commit ff4b1affcdb881b809056f1b77413a03a8c61cd0 Author: Ad Schellevis Date: Mon Oct 27 18:46:50 2014 +0100 initial dev version 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 000000000..1b78823bf Binary files /dev/null and b/usr/local/share/locale/pt_BR.ISO8859-1/LC_MESSAGES/pfSense.mo differ 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 invlida" + +#: etc/inc/PEAR.inc:342 etc/inc/PEAR.inc:600 etc/inc/PEAR.inc:637 +msgid "invalid error mode" +msgstr "modo de erro invlido" + +#: 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 no 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 excees" + +#: 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 parmetros 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 "no um array" + +# s se usa "ao invs", para coisas contrrias. "Dentro ao invs 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 endereo 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! No foi possvel 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: No foi possvel 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 autenticao 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() no foi possvel 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() no pde 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() No foi possvel 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() no foi possvel 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() no foi possvel 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 autenticao LDAP foi definido. Padronizando o banco de dados do usurio local. Visite Sistema -> Gerenciador de Usurio." + +#: 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 autenticao 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! No foi possvel 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 diretrio." + +#: 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 mltiplos usurios 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! No foi possvel logar no servidor %1$s como usurio %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 "Incio 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 "Autenticao 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 "Autenticao 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 "Autenticao 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 usurio '%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 "Sesso expirada para usurio '%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 "Usurio 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: no pde abrir '%s' em captiveportal_write_elements()%s" + +#: etc/inc/config.inc:100 +msgid "Upgrading m0n0wall configuration to pfSense... " +msgstr "Atualizando configurao do m0n0wall para o pfSense..." + +#: etc/inc/config.inc:103 +msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml" +msgstr "ERRO! No pde converter m0n0wall -> pfsense no config.xml" + +#: etc/inc/config.inc:133 +msgid "CDROM build" +msgstr "Construo 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 configurao 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 restaurao 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 padres de fbrica." + +#: 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 esttico desabilitado. No 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 informao 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 informao 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 questo 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 no 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 reflexo 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 reflexo 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 sada avanada %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 sada %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 no uma porta de origem vlida." + +#: 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 liberao/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 "No possvel 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 padro" + +#: 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 funo filter_tdr_install_cron(). A funo 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 varivel 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 opes erradas. Problemas com configurao!" + +#: 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 opes 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 no 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 no definido -- no pde 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 "No pde iniciar greif -- varivel no 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 no pde ser iniciado -- varivel no 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 no pde ser iniciado -- varivel no 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 no pde 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 "No pde obter um endereo 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 no existe. Link PPP no 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 no pde 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 preempo do CARP" + +#: etc/inc/interfaces.inc:1726 etc/inc/interfaces.inc:1791 +#: etc/inc/interfaces.inc:1790 +msgid "Enable CARP preemption" +msgstr "Habilitar preempo 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 "No pde 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 endereo de IP virtual %s no 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 no pudemos encontrar uma subrede em uma interface real correspondente ao endereo 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 no foi possvel encontrar uma subrede em uma interface real correspondente ao endereo 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 no pde 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 cdigo de erro %2$s, sada %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 endereo 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 endereo MAC INVLIDO (ff:ff:ff:ff:ff:ff) na interface %1$s foi automaticamente substitudo por %2$s" + +#: etc/inc/interfaces.inc:2910 +msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()" +msgstr "wanif no pde 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 no pde 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 invlida \"%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 no pde ser iniciada em interface_dhcp_configure()" + +#: etc/inc/notices.inc:76 +#, php-format +msgid "Could not open %s for writing" +msgstr "%s no pde 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 no pde 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 ( Autenticao de Usurio)" + +#: etc/inc/openvpn.inc:87 etc/inc/openvpn.inc:85 +msgid "Remote Access ( SSL/TLS + User Auth )" +msgstr "Acesso Remoto ( SSL/TLS + Autenticao de Usurio )" + +#: 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 endereo de IP ou nome de domnio vlido." + +#: 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 vlida, 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 vlido." + +#: 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 "Aps sincronizao, 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 "Cdigo 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 Mgico 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 configurao (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 comunicao 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 "Requisio 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 "No foi possvel 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 histrico 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 no 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 configuraes 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 dependncias necessrias 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 dependncias requeridas pelo pacote %s esto 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 configurao do pacote %s no 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 instalao 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 instalao 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 configurao 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 configurao 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! No foi possvel buscar o arquivo de configurao de pacote. Abortando instalao." + +#: 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! No foi possvel buscar o arquivo de configurao de pacote. Abortando instalao 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" +"Instalao 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 informaes 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 instalao 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 configurao..." + +#: 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 no est instalado.%sInstalao 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 dependncias." + +#: 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 dependncias..." + +#: 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 NO 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 configurao 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 instrues 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 "Servios... " + +#: 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 configurao 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 "Instalao 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 "No foi possvel carregar a configurao do pacote. Instalao 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 remoo 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 no est instalado.%sRemoo 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 instrues 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 "Configurao..." + +#: 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 configurao 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 requisio:" + +#: 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 autenticao" + +#: 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 "Restaurao de concesses 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 servio 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: no foi possvel 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 "Ateno! Instalao 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 configurao do Igmpproxy no pde ser escrito!" + +#: etc/inc/services.inc:956 +msgid "Started Igmpproxy service sucsesfully." +msgstr "Servio 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 servio de retransmio 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 servio de retransmisso 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 no pde 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 especficas 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 possvel no 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 servio 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 servio 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 servio 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 servio 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' contm caracteres invlidos." + +#: 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 no 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 informaes." + +#: 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 no especificado, heursticas baseadas no tamanho da banda da interface so 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 alfanumricos, _ 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 padro 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. No use espaos 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 padro 1. Filas Hfsc com maior prioridade so 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 "Opes 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 padro" + +#: 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 "Deteco Antecipada Aleatria" + +#: 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 "Deteco Randmica Recente de Entrada e Sada" + +#: 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 "Notificao de Congestionamento Explcita" + +#: 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 opes 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 "Descrio" + +#: 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 "Padro: 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 servio 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 servio 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 numrico" + +#: 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 servio 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 servio 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 numrico" + +#: 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 servio 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 servio 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 numrico" + +#: 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 Servio (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 mxima 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 mnima 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 especificaes de curva de servio (m1, d, m2). m2 controla o tamanho da banda atribuda para a fila. m1 e d so opcionais e podem ser usados para controlar quantidade de banda inicial atribuida. Para os primeiros d milisegundos a fila obtm 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 "Opes especficas 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 disponveis" + +#: 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 "Nmero de buckets disponveis." + +#: 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 no 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 "Mscara" + +#: 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 "Endereos 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 "Endereos 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 dinmico com o tamanho de banda, atraso, perda de pacote e tamanho de fila dado acima sero \n" +"criados para cada endereo IP de origem/destino encontrado, \n" +"respectivamente. Isso faz com que seja possvel 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 descrio aqui para sua referncia (no 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 opes avanadas" + +#: 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 so colocados em uma lista de tamanho fixo primeiro, ento eles so atrasados com o valor especificado no campo Atraso, e ento eles so 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 obtm (o intervalo de valores de 1 a 100, do contrrio, 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 Continer 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 atravs das filas
    botes no rodap representam aes de filas e so 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 estticas: IP do Gateway no pde 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: No pde 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 padro" + +#: 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: no pde 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: no pde 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 "configurao 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: no pde 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 horrio..." + +#: 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 horrio 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: no pde 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 rgido..." + +#: 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 Genrico" + +#: 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 Genrico (CD-ROM)" + +# Trata-se de um modelo de RouterBoard, acho vlido 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 "ADVERTNCIA: No pde 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 "ADVERTNCIA: Voc deve dar um nome como parmetro para a funo 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 "Referncia %s est se tornando negavita, no 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 cdigo de sada '%2$d', a sada 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 invlido 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 invlido 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: No 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: no 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: no 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: no foi possvel 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: Referncia de certificado da fase1 invlida 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: No 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: No 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: no foi possvel 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: no foi possvel 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 forada 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 servio 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 "No foi possvel 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: no pde 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: no pde 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: no pde 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 servio 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: no 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: no 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: no 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 servio 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: no 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: no 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: no 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 "No foi possvel 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 no um endereo 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 no um endereo 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 tnel IPsec '%1$s'. IP anterior '%2$s', IP atual '%3$s'. Recarregando poltica" + +#: 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 no 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: no foi possvel 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 no encontrado!" + +#: etc/inc/xmlrpc_client.inc:152 +msgid "Unknown method" +msgstr "Mtodo desconhecido" + +#: etc/inc/xmlrpc_client.inc:153 +msgid "Invalid return payload: enable debugging to examine incoming payload" +msgstr "Carga invlida retornada: habilite o debugging para examinar a carga de entrada" + +#: etc/inc/xmlrpc_client.inc:154 +msgid "Incorrect parameters passed to method" +msgstr "Parmetros incorretos passados ao mtodo" + +#: etc/inc/xmlrpc_client.inc:155 +msgid "Can't introspect: method unknown" +msgstr "No foi possvel analisar: mtodo indefinido" + +#: etc/inc/xmlrpc_client.inc:156 +msgid "Didn't receive 200 OK from remote server." +msgstr "No 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 mtodo solicitado no retorna um objeto XML_RPC_Response." + +#: etc/inc/xmlrpc_client.inc:158 +msgid "Invalid request payload" +msgstr "Carga solicitada invlida" + +#: etc/inc/xmlrpc_client.inc:260 +msgid "missing top level xmlrpc element" +msgstr "falta elemento de nvel 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 no 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 no numrico 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 "" +"Conexo 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 "" +"Conexo 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 requisio submetida no contm esse parmetro" + +#: etc/inc/xmlrpc_client.inc:1361 +msgid "mb_convert_encoding() is not available" +msgstr "mb_convert_enconding() no est disponvel" + +#: 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 "No 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 mtodo lista todos os mtodos 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 mtodo apresentado. Se no 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 mtodo passado, seno retorna uma string vazia" + +#: etc/inc/authgui.inc:73 +msgid "No page assigned to this user! Click here to logout." +msgstr "Nenhuma pgina atribuda este usurio! 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 Descrio: %2$s" + +#: etc/inc/authgui.inc:160 etc/inc/authgui.inc:159 etc/inc/authgui.inc:165 +msgid "unknown reason" +msgstr "razo desconhecida" + +#: etc/inc/authgui.inc:161 etc/inc/authgui.inc:160 etc/inc/authgui.inc:166 +#, php-format +msgid "Invalid login (%s)." +msgstr "Login invlido (%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 atravs de um endereo IP no configurado localmente, que pode ser encaminhado pelo NAT ou outros meios.

    Se voc no 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 "Usurio:" + +#: 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 usurio 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 cdigo de retorno -> %2$s. O comando foi %3$s" + +#: etc/inc/config.console.inc:58 +msgid "DANGER! WARNING! ACHTUNG!" +msgstr "PERIGO! ADVERTNCIA! 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-deteco:" + +#: 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 invlido '%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-deteco %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 invlido '%s'%s)" + +#: etc/inc/config.console.inc:261 +#, php-format +msgid "%sOptional interface %s description found: %s" +msgstr "Descrio 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 sero atribudas conforme segue:" + +#: etc/inc/config.console.inc:416 etc/inc/config.console.inc:418 +#, php-format +msgid "%sWriting configuration..." +msgstr "%sEscrevendo configurao..." + +#: 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 configuraes..." + +#: 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 invlida '%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 invlida 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. No pde 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 "No pde 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 configurao %2$s" + +#: etc/inc/config.lib.inc:233 +msgid "Resetting factory defaults..." +msgstr "Reconfigurando padres de fbrica..." + +#: 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 configurao XML encontrada - usando configuraes de fbrica.\n" +"Tenha certeza de que a configurao conf/config.xml do disquete est inserida. Se no, suas configuraes modificadas sero 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 configurao no encontrado. %s noo 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 configurao conhecida encontrada e restaurada. Por favor, cheque duas vezes seu arquivo de configurao por precauo." + +#: 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 atualizao de Configurao em %s, configure tempo de execuo 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 frequncia de atualizao 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 "Atualizao de Configurao 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 verso config de nvel %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 mudana 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 "ADVERTNCIA: Contedo de config no pde ser salvo. No pde 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 configurao..." + +#: 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 configurao ...." + +#: 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 Fcil: Bloqueado da Visualizao 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 Visualizao 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 Fcil: Liberado pela Visualizao 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 invlido:" + +#: 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 invlida 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 no possua 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 invlida para regra de liberao:" + +#: 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 invlido para regra de liberao:" + +#: 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 invlido:" + +#: 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 invlido:" + +#: 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 invlida:" + +#: 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 liberao 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 "Parmetros faltando para regra de liberao." + +#: 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 liberao 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 frum." + +#: 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 "Servio %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 estticas para monitor %1$s e adicionando nova rota atravs %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 no 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 latncia, 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 no pde 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 endereo 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 "Endereo 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 usurio 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 dinmico" + +#: etc/inc/ipsec.inc:48 +msgid "Peer IP address" +msgstr "Endereo 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 Mvel" + +#: 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 incompatvel ( %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 no 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 invlidos em '%2$s'%3$s" + +#: etc/inc/priv.defs.inc:10 +msgid "WebCfg - All pages" +msgstr "WebCfg - Todas as pginas" + +#: etc/inc/priv.defs.inc:11 +msgid "Allow access to all pages" +msgstr "Permitir acesso a todas as pginas" + +#: etc/inc/priv.defs.inc:16 +msgid "WebCfg - Status: CARP page" +msgstr "WebCfg - Pgina Status: CARP" + +#: etc/inc/priv.defs.inc:17 +msgid "Allow access to the 'Status: CARP' page." +msgstr "Permitir acesso pgina 'Status: CARP'." + +#: etc/inc/priv.defs.inc:22 +msgid "WebCfg - Crash reporter" +msgstr "WebCfg - Relatrio de falhas" + +#: etc/inc/priv.defs.inc:23 +msgid "Uploads crash reports to pfSense and or deletes crash reports." +msgstr "Envie os relatrios de falha para o pfSense e/ou exclua-os." + +#: etc/inc/priv.defs.inc:28 +msgid "WebCfg - Diagnostics: ARP Table page" +msgstr "WebCfg - Pgina Diagnstico: Tabela ARP" + +#: etc/inc/priv.defs.inc:29 +msgid "Allow access to the 'Diagnostics: ARP Table' page." +msgstr "Permitir acesso pgina 'Diagnstico: Tabela ARP'." + +#: etc/inc/priv.defs.inc:34 +msgid "WebCfg - Diagnostics: Authentication page" +msgstr "WebCfg - Diagnsticos: Pgina de Autenticao" + +#: etc/inc/priv.defs.inc:35 +msgid "Allow access to the 'Diagnostics: Authentication' page." +msgstr "Permite acesso 'Diagnstico: Pgina de Autenticao'." + +#: etc/inc/priv.defs.inc:40 +msgid "WebCfg - Diagnostics: Backup/restore page" +msgstr "WebCfg - Pgina Diagnstico: Backup/Restaurar" + +#: etc/inc/priv.defs.inc:41 +msgid "Allow access to the 'Diagnostics: Backup/restore' page." +msgstr "Permitir acesso pgina 'Diagnstico: Backup/Restaurar'." + +#: etc/inc/priv.defs.inc:46 +msgid "WebCfg - Diagnostics: Configuration History page" +msgstr "WebCfg - Pgina Diagnstico: Histrico de Configurao" + +#: etc/inc/priv.defs.inc:47 +msgid "Allow access to the 'Diagnostics: Configuration History' page." +msgstr "Permitir acesso pgina 'Diagnsticos: Histrico de Configurao'." + +#: etc/inc/priv.defs.inc:52 +msgid "WebCfg - Diagnostics: Factory defaults page" +msgstr "WebCfg - Pgina Diagnstico: Padres de fbrica" + +#: etc/inc/priv.defs.inc:53 +msgid "Allow access to the 'Diagnostics: Factory defaults' page." +msgstr "Permitir acesso pgina 'Diagnstico: Padres de fbrica'." + +#: etc/inc/priv.defs.inc:58 +msgid "WebCfg - Diagnostics: Show States page" +msgstr "WebCfg - Pgina Diagnstico: Exibir Estados" + +#: etc/inc/priv.defs.inc:59 +msgid "Allow access to the 'Diagnostics: Show States' page." +msgstr "Permitir acesso pgina 'Diagnstico: Exibir Estados'." + +#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:70 +msgid "WebCfg - Status: IPsec page" +msgstr "WebCfg - Pgina 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 pgina 'Status: IPsec'." + +#: etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:76 +msgid "WebCfg - Status: IPsec: SAD page" +msgstr "WebCfg - Pgina 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 pgina 'Status: Ipsec: SAD'." + +#: etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:82 +msgid "WebCfg - Status: IPsec: SPD page" +msgstr "WebCfg - Pgina 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 pgina 'Status: Ipsec: SPD'." + +#: etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:88 +msgid "WebCfg - Diag IPsec XML page" +msgstr "WebCfg - Pgina de Diagnstico 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 pgina '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 - Pgina Diagnstico: 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 pgina 'Diagnsticos: Atividade do Sistema'" + +#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:100 +msgid "WebCfg - Diagnostics: Logs: System page" +msgstr "WebCfg - Pgina Diagnstico: 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 pgina 'Diagnstico: Logs: Sistema'." + +#: etc/inc/priv.defs.inc:100 etc/inc/priv.defs.inc:106 +msgid "WebCfg - Status: System logs: Portal Auth page" +msgstr "WebCfg - Pgina Status: Logs de distema: Portal de Autenticao" + +#: 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 pgina 'Status: Logs de distema: Portal de Autenticao'." + +#: etc/inc/priv.defs.inc:106 etc/inc/priv.defs.inc:112 +msgid "WebCfg - Diagnostics: Logs: DHCP page" +msgstr "WebCfg - Pgina Diagnstico: 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 pgina 'Diagnstico: Logs: DHCP'." + +#: etc/inc/priv.defs.inc:112 etc/inc/priv.defs.inc:118 +msgid "WebCfg - Diagnostics: Logs: Firewall page" +msgstr "WebCfg - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina Omitidas: Pgina no 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 pgina 'Omitidas: Pgina no 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 - Pgina 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 - Pgina 'Status: Logs do Sistema: IPsec'." + +#: etc/inc/priv.defs.inc:130 +msgid "WebCfg - Status: System logs: OpenNTPD page" +msgstr "WebCfg - Pgina Status: Logs do Sistema: OpenNTPD" + +#: etc/inc/priv.defs.inc:131 +msgid "Allow access to the 'Status: System logs: OpenNTPD' page." +msgstr "Permitir acesso pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Status: Logs do Sistema: Configuraes" + +#: 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 pgina 'Status: Logs do Sistema: Configuraes'." + +#: 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina Diagnstico: 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 'Pgina Diagnstico: 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 - Pgina Diagnstico: 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 'Pgina Diagnstico: 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 - Pgina Diagnstico: 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 'Pgina Diagnstico: 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 - Pgina 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 pgina '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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Diagnsticos: Pgina 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 pgina 'Diagnstico: 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 - Diagnsticos: Tabela PF de Endereos 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 pgina 'Diagnsticos: 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Diagnsticos: 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 pgina 'Diagnsticos: 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Firewall: Alias: Importao" + +#: 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 pgina 'Firewall: Alias: Importao'." + +#: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Firewall: Endereos 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 Pgina 'Firewall: Endereos 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 - Pgina Firewall: Endereos 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 pgina 'Firewall: Endereos 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 Servio" + +#: 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 pgina 'AJAX: Provedores de Servio'." + +#: 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 - Pgina 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 pgina '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 - Pgina Diagnstico: Trfego 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 pgina 'Diagnstico: Trfego 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 - Pgina Diagnstico: Utilizao 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 Pgina 'Diagnstico: Utilizao 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina 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 pgina '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 - Pgina Estatsticas 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 pgina 'Estatsticas 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 / Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 - Pgina 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 - Pgina 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 - Pgina 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: Pgina 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 pgina '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 pgina" + +#: 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 pgina 'Interfaces: PPPs: Editar pgina'." + +#: 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 - Pgina 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 pgina '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 - Pgina 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 - Pgina '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 - Pgina Sistema: Licena" + +#: 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 pgina 'Sistema: Licena'." + +#: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Servios: Balanceador de Carga: Aes 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 pgina 'Pgina Servios: Balanceador de Carga: Aes 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 - Servios: Balanceador de Carga: Aes de Relay: Pgina 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 pgina 'Pgina Servios: Balanceador de Carga: Aes 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina 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 pgina '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 - Pgina Pacote: Configuraes" + +#: 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 pgina 'Pacote: Configuraes'." + +#: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Pacotes: Configuraes" + +#: 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 pgina 'Pacotes: Configuraes'." + +#: 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: Portal Captive: Endereos 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 pgina 'Servios: Portal Captive: Endereos 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 - Pgina Servios: Portal Captive: Editar Endereos 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 pgina 'Servios: Portal Captive: Endereos 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: Servidor DHCP: Editar mapeamento esttico" + +#: 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 pgina 'Servios: Servidor DHCP: Editar mapeamento esttico'." + +#: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Servios: Pgina 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: DNS Forwarder: Editar Substituio de Domnio" + +#: 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 pgina 'Servios: DNS Forwarder: Editar Substituio de Domnio'." + +#: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: Clientes DNS Dinmico" + +#: 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 pgina 'Servios: Clientes DNS Dinmico'." + +#: 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 - Pgina Servios: Cliente DNS Dinmico" + +#: 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 pgina 'Servios: Cliente DNS Dinmico'." + +#: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina 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 pgina '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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina Servios: 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 pgina 'Servios: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Status: Concesses 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 pgina 'Status: Concesses 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Status: Grfico de Trfego" + +#: 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 pgina 'Status: Grfico de Trfego'." + +#: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Status: Grficos 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 pgina 'Status: Grficos 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 - Pgina Status: Configuraes de Grficos 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 pgina 'Status: Configuraes de Grficos 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 - Pgina Status: Servios" + +#: 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 pgina 'Status: Servios'." + +#: 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 - Pgina 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 pgina '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 - Pgina Status: Conexo 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 pgina 'Status: Conexo 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: Configurao 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 pgina 'Sistema: Configuraes 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 - Pgina Sistema: Avanado: 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 pgina 'Sistema: Avanado: 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 - Pgina Sistema: Avanado: 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 pgina 'Sistema: Avanado: 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 - Pgina Sistema: Avanado: 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 pgina 'Sistema: Avanado: 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 - Pgina Sistema: Avanado: 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 pgina 'Sistema: Avanado: 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 - Pgina Sistema: Avanado: 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 pgina 'Sistema: Avanado: 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 - Pgina Sistema: Servidores de Autenticao" + +#: 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 pgina 'Sistema: Servidores de Autenticao'." + +#: 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 pgina '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 pgina '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 pgina '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 - Pgina Sistema: Firmware: Atualizao 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 pgina 'Sistema: Firmware: Atualizao 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 - Pgina Sistema: Firmware: Verificar por Atualizao" + +#: 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 pgina 'Sistema: Firmware: Verificar por Atualizao'." + +#: 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 - Pgina Sistema: Firmware: Auto Atualizao" + +#: 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 pgina 'Sistema: Firmware: Pgina de Auto Atualizao'." + +#: 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 - Pgina Sistema: Firmware: Configuraes" + +#: 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 pgina 'Sistema: Firmware: Configuraes'." + +#: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina Sistema: Gerenciador de Grupo: Adicionar Privigios" + +#: 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 pgina 'Sistema: Gerenciador de Grupo: Adicionar Privilgios'." + +#: 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 - Pgina Sistema: Rotas Estticas" + +#: 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 pgina 'Sistema: Rotas Estticas'." + +#: 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 - Pgina Sistema: Rotas Estticas: 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 pgina 'Sistema: Rotas Estticas: 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 - Pgina Sistema: Gerenciador de Usurios" + +#: 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 pgina 'Sistema: Gerenciador de Usurios'." + +#: 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 - Pgina Sistema: Gerenciador de Usurios: Adicionar Privilgios" + +#: 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 pgina 'Sistema: Gerenciador de Usurios: Adicionar Privilgios'." + +#: 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: Pgina Gerenciador de Senha de Usurios" + +#: 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 pgina 'Sistema: Gerenciador de Senha de Usurios'." + +#: 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 Usurios: Pgina de Configuraes" + +#: 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 pgina 'Sistema: Gerenciador de usurios: Pgina deConfiguraes'." + +#: 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 - Pgina Sistema: Gerenciador de Usurios: Configuraes: 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 pgina 'Sistema: Gerenciador de Usurio: Configuraes: 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 - Pgina Sistema: Firmware: Atualizao 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 pgina 'Sistema: Firmware: Atualizao 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 - Pgina Omitidos: Configurao 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 pgina 'Omitidos: Configurao 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 - Pgina 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 pgina '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 pgina '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 pgina '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 - Pgina VPN: IPsec: Mvel" + +#: 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 pgina 'VPN: IPsec: Mvel'." + +#: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 - Pgina VPN: L2TP da VPN: Usurios" + +#: 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 pgina 'VPN: L2TP da VPN: Usurios'." + +#: 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 - Pgina VPN: L2TP da VPN: Usurios: 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 pgina 'VPN: L2TP da VPN: Usurios: 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 - Pgina 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 pgina '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 - Pgina OpenVPN: Substituio Especfica 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 pgina 'OpenVPN: Substituio Especfica 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 - Pgina 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 pgina '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 - Pgina Servios: 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 pgina 'Servios: 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 - Servios: Servidor PPPoE: Pgina 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 pgina 'Servios: 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 - Pgina 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 pgina '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 - Pgina VPN: PPTP da VPN: Usurios" + +#: 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 pgina 'VPN: PPTP da VPN: Usurios'." + +#: 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 - Pgina VPN: PPTP da VPN: Usurios: 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 pgina 'VPN: PPTP da VPN: Usurios: 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 - Pgina 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 pgina '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 - Pgina 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 pgina '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 grficos 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 atualizao rrd" + +#: etc/inc/smtp.inc:92 +msgid ": data access time out" +msgstr ": tempo de expirao 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 conexo do servidor SMTP" + +#: etc/inc/smtp.inc:113 +msgid "it was not possible to read line from the SMTP server" +msgstr "no foi possvel ler linhas do servidor SMTP" + +#: etc/inc/smtp.inc:135 +msgid "it was not possible to send a line to the SMTP server" +msgstr "no foi possvel 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 "no foi possvel enviar dados ao servidor SMTP" + +#: etc/inc/smtp.inc:221 +msgid "establishing SSL connections requires at least PHP version 4.3.0" +msgstr "estabelecer conexes SSL requere pelo menos a verso 4.3.0 do PHP" + +#: etc/inc/smtp.inc:224 +msgid "establishing SSL connections requires the OpenSSL extension enabled" +msgstr "estabelecer conexes SSL requere que a extenso OpenSSL esteja habilitada" + +#: etc/inc/smtp.inc:233 +#, php-format +msgid "could not resolve host \"%s\"" +msgstr "no pde resolver o host \"%s\"" + +#: etc/inc/smtp.inc:237 +#, php-format +msgid "domain \"%s\" resolved to an address excluded to be valid" +msgstr "domnio \"%s\" resolvido para um endereo excludo de ser vlido" + +#: etc/inc/smtp.inc:239 +#, php-format +msgid "Connecting to host address \"%1$s\" port %2$s..." +msgstr "Conectando ao endereo de host \"%1$s\" porta %2$s..." + +#: etc/inc/smtp.inc:246 +msgid "-3 socket could not be created" +msgstr "-3 socket no pde 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 conexo 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 "no pde 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 "no foi possvel autenticar usando o mecanismo especificado porque a classe da biblioteca SASL no 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 no ser usado: %2$s" + +#: etc/inc/smtp.inc:294 +msgid "Could not start the SASL authentication client:" +msgstr "No pde iniciar o cliente de autenticao SASL:" + +#: etc/inc/smtp.inc:301 +msgid "Could not send the AUTH command" +msgstr "No pde enviar o comando de Autenticao" + +#: etc/inc/smtp.inc:316 etc/inc/smtp.inc:346 +msgid "Authentication error:" +msgstr "Erro de autenticao:" + +#: etc/inc/smtp.inc:331 +msgid "Could not send the authentication step message" +msgstr "No pde enviar a mensagem de passos de autenticao" + +#: etc/inc/smtp.inc:351 +msgid "Could not process the SASL authentication step:" +msgstr "No pde processar o passo de autenticao SASL:" + +#: etc/inc/smtp.inc:365 +msgid "connection is already established" +msgstr "conexo j est estabelecida" + +#: etc/inc/smtp.inc:403 +msgid "it was not specified the POP3 authentication user" +msgstr "no foi especificado o usurio de autenticao POP3" + +#: etc/inc/smtp.inc:409 +msgid "it was not specified the POP3 authentication password" +msgstr "no foi especificada a senha de autenticao POP3" + +#: etc/inc/smtp.inc:413 +#, php-format +msgid "Resolving POP3 authentication host \"%s\"..." +msgstr "Resolvendo host de autenticao POP3 \"%s\"..." + +#: etc/inc/smtp.inc:420 +msgid "POP3 authentication server greeting was not found" +msgstr "Cumprimentos do servidor de autenticao POP3 no foi encontrado" + +#: etc/inc/smtp.inc:428 +msgid "POP3 authentication user was not accepted:" +msgstr "Usurio de autenticao POP3 no foi aceito:" + +#: etc/inc/smtp.inc:436 +msgid "POP3 authentication password was not accepted:" +msgstr "Senha de autenticao POP3 no foi aceita:" + +#: etc/inc/smtp.inc:445 +msgid "could not determine the SMTP to connect" +msgstr "no pde determinar o SMTP para conectar" + +#: etc/inc/smtp.inc:451 +#, php-format +msgid "Resolving SMTP server domain \"%s\"..." +msgstr "Resolvendo o domnio 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 no requere autenticao" + +#: 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 "no suportado por nenhum mecanismo de autenticao 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 "conexo 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 "conexo no 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 destinatrio direto vlido no 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 "no foi possvel entregar diretamente para destinatrios de diferentes domnios" + +#: etc/inc/smtp.inc:667 etc/inc/smtp.inc:669 +msgid "connection is already established and the recipient is already set" +msgstr "conexo j est estabelecida e o destinatrio j est configurado" + +#: etc/inc/smtp.inc:679 etc/inc/smtp.inc:681 +msgid "connection is not in the recipient setting state" +msgstr "conexo no est no estado de configurao do destinatrio" + +#: etc/inc/smtp.inc:708 etc/inc/smtp.inc:710 +msgid "connection is not in the start sending data state" +msgstr "conexo no 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 "conexo no 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 "no foi previamente estabelecida uma conexo SMTP" + +#: etc/inc/upgrade_config.inc:113 +#, php-format +msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)." +msgstr "%sADVERTNCIA: regra de filtro removida (interface '%s' no existe mais)." + +#: etc/inc/upgrade_config.inc:125 +#, php-format +msgid "%sWarning: filter rule removed (source network '%s' does not exist anymore)." +msgstr "%sADVERTNCIA: regra de filtro removida (rede fonte '%s' no existe mais)." + +#: etc/inc/upgrade_config.inc:138 +#, php-format +msgid "%sWarning: filter rule removed (destination network '%s' does not exist anymore)." +msgstr "%sADVERTNCIA: regra de filtro removida (rede de destino '%s' no existe mais)." + +#: etc/inc/upgrade_config.inc:158 +#, php-format +msgid "%sWarning: traffic shaper rule removed (interface '%s' does not exist anymore)." +msgstr "%sADVERTNCIA: regra do Traffic Shaper removida (interface '%s' no existe mais)." + +#: etc/inc/upgrade_config.inc:170 +#, php-format +msgid "%sWarning: traffic shaper rule removed (source network '%s' does not exist anymore)." +msgstr "%sADVERTNCIA: regra do Traffic Shaper removida (rede fonte '%s' no existe mais)." + +#: etc/inc/upgrade_config.inc:183 +#, php-format +msgid "%sWarning: traffic shaper rule removed (destination network '%s' does not exist anymore)." +msgstr "%sADVERTNCIA: regra do Traffic Shaper removida (rede de destino '%s' no 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 "Trfego 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 usurio ir bloquear acesso ao webConfigurator para outros usurios." + +#: 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 usurio ir bloquear pginas HTMl individuais aps acessar uma pgina em particular (o bloqueio ser liberado se o usurio sair ou salvar o formulrio da pgina)." + +#: etc/inc/upgrade_config.inc:610 +msgid "Indicates whether this user is able to login for example via SSH." +msgstr "Indica se esse usurio 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 usurio tem permisso de copiar arquivos no aparelho %s via SCP/SFTP. Se voc vai usar esse privilgio, 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 usurio associado ao usurio root do UNIX (voc deve associar esse privilgio somente a um nico usurio)." + +#: 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 "No envie porta ICMP mensagens inalcansveis 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 padro 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, ningum 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 mximo de datagrama TCP de entrada" + +#: etc/inc/upgrade_config.inc:665 +msgid "Maximum outgoing TCP datagram size" +msgstr "Tamanho mximo de datagrama TCP de sada" + +#: 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 "No 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 mximo de datagrama UDP de sada" + +#: 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 no-IP que no so 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 privilgios a ns 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 conexo e limitar a quantidade de dados enfileirados para a rede para apenas a quantidade necessria 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 Esttico" + +#: etc/inc/upgrade_config.inc:745 +#, php-format +msgid "Interface %s Dynamic Gateway" +msgstr "Interface %s Gateway Dinmico" + +#: etc/inc/upgrade_config.inc:810 etc/inc/upgrade_config.inc:811 +#, php-format +msgid "Upgraded static route for %s" +msgstr "Atualizar rota esttica 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 indisponveis 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 Dinmico %s" + +#: etc/inc/upgrade_config.inc:1339 etc/inc/upgrade_config.inc:1341 +#: etc/inc/upgrade_config.inc:1342 +msgid "All Users" +msgstr "Todos Usurios" + +#: 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 atualizao 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 vlido 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: no 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 "no 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 "no 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 (sees %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 "Servios" + +#: 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 configurao 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 mudanas 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 "Endereo 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 "Diagnsticos" + +#: 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 "No 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 avanados" + +#: 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 "Avanado" + +#: 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 opes avanadas" + +#: 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 disponveis" + +#: 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 "Verso 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 "Disponvel" + +#: 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 "frum" + +#: 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 "No 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 pgina de status do EasyRule, principalmente usada para mostrar erros quando regras so adicionadas. Se voc est vendo isto, este aparentemente no foi um erro e voc navegou direto para a pgina 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 pgina destina-se a ser chama pelos botes bloquear/liberar na pgina 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 "Importao 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 "No 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 descrio 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 no um endereo IP. Por favor corrija o erro para continuar" + +#: usr/local/www/firewall_aliases_import.php:131 +msgid "Alias Import" +msgstr "Importao 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 descrio aqui para sua referncia (no 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 so 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 endereos 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 padro 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 "Continer de Regras Layer7 no encontrado!" + +#: usr/local/www/firewall_shaper_layer7.php:161 +msgid "Found the following repeated protocol definitions" +msgstr "Encontradas as seguintes definies 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 configurao 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 " +"referncias 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 "No pde 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 no 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 "No pde 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 "Aes 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 configurao 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 mltipla" + +#: usr/local/www/firewall_shaper_wizards.php:77 +msgid "Single Wan multi Lan" +msgstr "Wan nica Lan mltipla" + +#: usr/local/www/firewall_shaper_wizards.php:78 +msgid "Multiple Lan/Wan" +msgstr "Lan/Wan Mltiplas" + +#: 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 "Funo 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 "Domnio" + +#: 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 domnio vlido 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 endereo IP vlido deve ser especificado, ou # para uma excluso." + +#: 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 domnio" + +#: 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 "Domnio para sobrescrever (NOTA: isso no precisa ser um TLD vlido!)" + +#: 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 "Endereo IP do servidor DNS oficial para esse domnio" + +#: 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 atravs de host/sub-domnio para nameservers padres, ao invs 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 endereo de IP vlido 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 no possui IPv4 ou IPv6 configurado, portanto no 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 endereo de IP %s no 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 mscara de subrede /32 invlida 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 mscara de rede /128 invlida 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 endereo 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 nmero 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, no 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 no 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 no 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 no 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 "Endereos 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 mscara de subrede da rede. Ela no 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 endereos 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 "Endereo(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 "Endereo 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 "Endereo:" + +#: 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 "Expanso:" + +#: 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 mquina 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 "Frequncia de anncio" + +#: 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 frequncia em que essa mquina ir anunciar. 0 normalmente significa master. Caso contrrio, a menor combinao 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 no podem ser vinculados a nada rodando no firewall, como IPsec, OpenVPN, etc. Utilize endereos 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 informaes 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 no 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 "Ao 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 configurao do balanceador de carga foi modificada.
    Voc deve aplicar as mudanas 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 "Aes 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 "Opes" + +#: 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 padro 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 "Padro de fbrica" + +#: 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 padro de fbrica" + +#: 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 "Endereo 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 padro" + +#: usr/local/www/diag_defaults.php:73 usr/local/www/diag_defaults.php:75 +msgid "Reboot after changes are installed" +msgstr "Reiniciar aps instalar alteraes" + +#: 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 endereo 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 "Usurio 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 "No" + +#: 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 Autorizao" + +#: 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 "Configuraes" + +#: 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 autenticao" + +#: 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 servio 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 ao " + +#: 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 "Viso 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 "Viso Dinmica" + +#: 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 "Mximo(%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 "Ao" + +#: 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 "Soluo 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 tambm so 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 trfego" + +#: 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 liberao?" + +#: 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 (Viso Dinmica)" + +#: 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/Dinmico 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 invlida" + +#: 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 "Expresso 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 endereo de IP vlido 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 endereo de IP vlido 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 endereo de IP vlido 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 nmero 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 "Nmero 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 padro" + +#: 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 so bloqueados pelo regra implcita de bloqueio padro no sero mais registrados se voc desmarcar essa opo. Por regra as opes de registro no so 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 so mostrados como gerados pelo filtro de pacotes, sem qualquer formatao. Isto ir revelar informaes 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 gravao 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 "Endereos 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 servio 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 autenticao 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 "Ao" + +#: 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 "Usurio" + +#: 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 informaes 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 informao 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 duplicao do slice. Operao 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 opes nesta pgina so destinados somente para o uso de usurios avanados." + +#: 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 "Informao 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 partio 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 "Cpia de dados peridica" + +#: 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 "Frequncia:" + +#: 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, ento eles pode ser restaurados automaticamente no prximo boot. Tenha em mente que quanto mais frequente o backup, mais escritas sero 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 Concesses 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 concesses DHCP, ento eles podem ser restaurados automaticamente no prximo boot. Tenha em mente que quanto mais frequente o backup, mais escritas iro 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 trfego." + +#: 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 "Famlia de Endereos" + +#: 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 trfego 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 "Endereo 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 endereo IP tanto de Origem como Destino ou subrede na notao CIDR. A captura de pacotes ir observar os dois campos por este endereo." + +#: 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 domnio, um endereo 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 sero 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 tambm 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 no 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 nmero de bytes de cada pacote que ser capturado. O valor padro 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 nmero de pacotes que a captura de pacotes ir pegar. O valor padro 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 no 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 "Nvel 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 "Mdio" + +#: 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 nvel de detalhes que ser exibido aps 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 opo no afeta o nvel 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 seleo ir fazer com que a captura de pacote realize um consulta de DNS reversa associada com todos os endereos 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 opo 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 atualizao 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 execuo." + +#: 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 ns detectamos um erro de programao." + +#: 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 depurao de programao para os desenvolvedores do pfSense para inspeo?" + +#: 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 contedo para garantir que voc est confortvel enviando estas informaes antes de clicar Sim." + +#: usr/local/www/crash_reporter.php:73 +msgid "Contents of crash reports" +msgstr "Contedo dos relatrios 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 relatrio 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 relatrio do disco local." + +#: usr/local/www/diag_authentication.php:52 +msgid "is not a valid authentication server" +msgstr "no um servidor de autenticao vlido" + +#: usr/local/www/diag_authentication.php:55 +msgid "A username and password must be specified." +msgstr "Um nome de usurio 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 usurio um membro destes grupos" + +#: usr/local/www/diag_authentication.php:65 +msgid "Authentication failed." +msgstr "Autenticao 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 "Autenticao" + +#: 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 autenticao" + +#: 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 "Usurio" + +#: 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 dinmicos" + +#: 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 Dinmico" + +#: 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 "Servio" + +#: 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 "Endereos IP que aparecem em verde esto atualizados com o fornecedor de DNS Dinmico." + +#: usr/local/www/graph_cpu.php:83 +msgid "Cannot get CPU load" +msgstr "No pde 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 funo 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 esto indefinidas" + +#: usr/local/www/services_snmp.php:87 usr/local/www/services_snmp.php:91 +msgid "Invalid character '#' in system location" +msgstr "Caractere '#' invlido 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 '#' invlido 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 invlido '#' 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 invlido '#' 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 (padro 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 "Localizao 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 divulgao de informaes no 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 (padro 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 "Mdulos" + +#: 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 "Mdulos 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 opo pode ser til ao tentar acesso ao agente SNMP atravs do endereo IP da interface da LAN atravs o tnel 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 modificaes" + +#: usr/local/www/services_wol.php:63 +#, php-format +msgid "Sent magic packet to %1$s (%2$s)%3$s" +msgstr "Enviar pacote mgico 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) no 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 endereo MAC vlido deve ser especificado." + +#: usr/local/www/services_wol.php:88 +msgid "A valid interface must be specified." +msgstr "Uma interface vlida deve ser especificada." + +#: usr/local/www/services_wol.php:94 +msgid "A valid ip could not be found!" +msgstr "No foi possvel encontrar um ip vlido!" + +#: usr/local/www/services_wol.php:99 +#, php-format +msgid "Sent magic packet to %s." +msgstr "Enviar pacote mgico 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 no 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 "Endereo MAC" + +#: usr/local/www/services_wol.php:148 +msgid "Enter a MAC address " +msgstr "Informe o endereo 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 endereo 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 servio pode ser usado para acordar (ligar) computadores enviando um especial" + +#: usr/local/www/services_wol.php:212 +msgid "Magic Packets" +msgstr "Pacotes Mgicos" + +#: 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, configuraes 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 endereo 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 "Usurios 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 "Incio de sesso" + +#: 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 "No 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 "No pde 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 instalao 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: No pde encontrar um disco apropriado para instalao." + +#: 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 no pode ser removida porque ela est atribuda 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 "Atribuies 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 Mx 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 "Endereos Mx. 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 transmisso 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 possvel 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 no 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 "Configurao 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 opes de rvore expansvel 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 expansvel." + +#: 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 Expansvel na interface. O driver if_bridge(4) possui suporte para o Protocolo de rvore Expansvel (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 vlido" + +#: 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 configurao STP vlida. O padro 20 segundos. O mnimo 6 segundos e o mximo 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 padro 15 segundos. O mnimo 4 segundos e o mximo 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 configurao de Protocolo de rvore Expansvel. O tempo de hello somente pode ser modificado quando operando no modo legado do STP. O padro 2 segundos. O mnimo 1 segundo e o mximo 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 Expansvel. O padro 32768. O mnimo 0 e o mximo 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 transmisso para a rvore Expansvel. Esse o nmero de pacotes transmitidos antes que seja limitado a uma taxa. O padro 6. O mnimo 1 e o mximo 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 Expansvel de uma interface para um valor. O padro 128. O mnimo 0 e o mximo 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 Expansvel de uma interface para um valor. O padro calculado com base na velocidade do link. Para modificar um custo selecionado anteriormente para automtico, configure o custo como 0. O mnimo e 1 e o mximo 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 endereo de cache da ponte para um tamanho.\tO padro 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 expirao 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 expirao de entradas do Cache para esse nmero em segundos. Se for zero, ento as entradas de endereo de cache no expiraro. O padro 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 cpia 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 no 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 estaes fim e no 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 padro 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 automtico 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 transies 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 padro 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 sero removidas do status edge automtico padro." + +#: 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 endereos assimilados dinamicamente so tratados como estticos uma vez que entram no cache. Entradas Sticky nunca no descartadas do cache ou substitudas, mesmo que o endereo 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 no encaminha nenhum trfego para nenhuma outra porta que tambm 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 TNEL gif no 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 "Tnel 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 tnel 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 "Tneis GIF so 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, endereo local, endereo de tnel remoto, rede de tnel remoto, endereo de tnel 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 tnel local e remoto devem conter endereos IP vlidos." + +#: 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 "Configurao 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 endereo local para ser usada pelo tnel 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 "endereo 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 "Endereos peer onde pacotes gif encapsulados sero 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 "endereo local do tnel 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 tnel 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 "endereo remoto de tnel 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 endereo gif remoto. A parte da subrede usada para determinar a rede que est sendo usada no tnel." + +#: 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 configuraes em redes dinmicas." + +#: 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 amigvel 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 amigvel 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 tbel GRE no 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 tnel 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 tneis de Encapsulamento de Rota Genrico (GRE - RFC 2784)." + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local address" +msgstr "Endereo local" + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel address" +msgstr "Endereo de tnel remoto" + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Remote tunnel network" +msgstr "Rede de tnel remota" + +#: usr/local/www/interfaces_gre_edit.php:74 +msgid "Local tunnel address" +msgstr "Endereo de tnel 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 "Configurao 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 endereo local para ser usado para o tnel GRE." + +#: usr/local/www/interfaces_gre_edit.php:161 +#: usr/local/www/interfaces_gre_edit.php:162 +msgid "GRE remote address" +msgstr "Endereo 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 "Endereo peer onde os pacotes GRE encapsulados sero enviados " + +#: usr/local/www/interfaces_gre_edit.php:168 +#: usr/local/www/interfaces_gre_edit.php:169 +msgid "GRE tunnel local address " +msgstr "Endereo local de tnel 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 tnel GRE local" + +#: usr/local/www/interfaces_gre_edit.php:175 +#: usr/local/www/interfaces_gre_edit.php:176 +msgid "GRE tunnel remote address " +msgstr "Endereo remoto de tnel 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 endereo GRE remoto. A parte da subrede usada para determinar a rede que est sendo usada no tnel." + +#: usr/local/www/interfaces_gre_edit.php:193 +#: usr/local/www/interfaces_gre_edit.php:192 +msgid "Mobile tunnel" +msgstr "Tnel mvel" + +#: 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 mtodo de encapsulamento o tnel 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 operao correta, o dispositivo GRE necessita de uma rota para o destino que menos especfica que aquela sobre o tnel. (Basicamente, necessria uma rota para o host desencapsulado que no roda sobre o tnel, 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 "Verso 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 mtodo de encapsulamento WCCP (verso 1 ou 2) o tnel 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 sero 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 mltiplas interfaces sem duplicar as regras. Se voc remover membros de um grupo de interface, as regras do grupo no mais sero 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 so 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 "Edio 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 "No so permitidos nmeros e espaos. 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 "No possvel 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 iro se tornar invlidos. (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 "Importao 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 espaos reservados para hosts, redes e portas reais. Eles podem ser usados para minimizar o nmero de alteraes que devem ser feitas se um host, rede ou porta mudar. Voc pode inserir o nome de um alias ao invs 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 no pode ser resolvido (ex. porque voc o excluiu), o elemento correspondente (ex. regra de filtro/NAT/shaper) ser considerada invlida 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 vlida." + +#: 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 "No foi possvel 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 vlida. No foi possvel 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 "no uma porta vlida 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 no um vlido %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 no podem ser aninhados, porque no so 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 so especificadas no formato CIDR. Selecione a mscara 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) tambm podem ser especificados, usando uma mscara /32 para IPv4 e /128 para IPv6. Voc tambm 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 endereo 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 nmero de IPs e/ou subredes. Depois de salvar %s vai baixar a URL e criar uma tabela de arquivos contendo estes endereos. Isto ir trabalhar com grandes nmeros de endereos (30.000+) ou pequenos nmeros." + +#: 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 "Usurios 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 usurios 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 "Informaes 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 configurao 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 "Sada" + +#: 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 conexo 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 inacessvel naquele endereo IP. Ex.: se voc usar seu endereo IP WAN, qualquer servio neste sistema (IPsec, servidor OpenVPN, etc) utilizando o endereo 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 invlidos detectados (%s). Por favor, remova os caracteres invlidos 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 "Endereo 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 "Endereo 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 vlida 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 no um endereo IP vlido." + +#: 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 vlida 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 no um endereo IP de destino vlido." + +#: 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 vlido 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 opo 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 "Sugesto: 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 endereo de incio da subrede externa (normalmente em uma WAN) para o mapeamento 1:1. A mscara de subnet do endereo fonte abaixo ser aplicada para esse endereo 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 endereo 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 "no" + +#: 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 opo para inverter o sentido da correspondncia." + +#: 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 "endereo" + +#: 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 tambm 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 conexes para ou de um destino especfico." + +#: 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 "Reflexo 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 padro 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 invlidos detectados %s. Por favor, remova os caracteres invlidos 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\" no um endereo IP alvo vlido 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 no um inicio de porta de origem vlido. 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 no um fim de porta de origem vlido. 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 no um inicio de porta de destino vlido. 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 no um fim de porta de destino vlido. 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 no uma porta local vlida. 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 no um endereo IP vlido 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 vlido 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 sobrepe 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 (NO)" + +#: 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 opo ir desativar o redirecionamento do trfego 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 opo raramente necessria, no 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 endereo 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 "aleatrio" + +#: 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 endereo 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 mquina com o endereo IP digitado acima. No caso de uma porta, especifique a porta incio 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 sincronizao 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 "Associao 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 no 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 padro 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 "Configurao 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 "Gerao de regras automticas 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 "Gerao 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 Avanado)" + +#: 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 "Endereo 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 esttica" + +#: 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 "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 +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 automticas de sada NAT habilitadas, um mapeamento automaticamente criado para a subrede de cada interface (exceto conexes WAN) e as regras nesta pgina so ignoradas.

    Se gerao manual de regras de sada NAT estiver habilitado, regras de sada NAT no sero geradas automaticamente e apenas os mapeamentos nesta pgina sero utilizados.

    Se um endereo alvo diferente de endereos IP WAN so utilizados. dependendo de como a conexo 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 necessrio." + +#: 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 sada, mude para NAT de sada Manual e ento exclua qualquer regra NAT que aparea 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 vlida 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 vlida 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 vlida 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 vlida 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 vlido 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 endereo de destino de \"qualquer\" invlido." + +#: 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 "Endereo 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 endereo IP vlido 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 vlido 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 opes 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 avanadas 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 "No faa 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 opo, o NAT ser desabilitado para trfego 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 no vai usar esta opo." + +#: 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 sada." + +#: 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 "Traduo" + +#: 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 "Endereo 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 sero mapeados para o endereo 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 endereo IP ao invs do endereo IP da interface escolhida acima, selecione-o aqui ( necessrio 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 "endereo 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 "Tambm note que se voc est tentando redirecionar as conexes da LAN selecione a opo \"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 atravs de traduo de endereos." + +#: 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 "Randmico: Seleciona um endereo 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 endereo de origem para determinar a traduo do endereo, 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 mscara de sub-rede e mantm a ltima parte idntica; 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 "Endereo Stick: A opo de Endereo Stick pode ser usada com o modo Randmico ou Round Robin para garantir que um determinado endereo de origem sempre mapeado para o endereo mesma traduo." + +#: 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-esttica:" + +#: 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 "Requisio 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 inalcansvel" + +#: 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 "Solicitao 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 "Cabealho de IP invlido" + +#: 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 "Requisio de informao" + +#: 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 informao" + +#: 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 "Requisio de mscara de endereo" + +#: 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 mscara de endereo" + +#: 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 configuraes foram aplicadas. As regras de firewall esto recarregando em background agora.
    Voc tambm 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 configurao de regra do firewall foi modificada.
    Voc deve aplicar as modificaes 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/no atribudo 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 configuraes avanadas" + +#: 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 "Maro" + +#: 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 "Trfego 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 "Trfego 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 no est ativa no momento porque seu perodo 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 conexes de entrada nessa interface sero bloqueadas at que voc adicione regras de liberao." + +#: 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 "liberao (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 so avaliadas na primeira correspondncia (i.e. a ao da primeira regra que corresponder a um pacote ser executada). Isso significa que se voc usar regras de bloquei, voc ter que prestar ateno da ordem das regras. Tudo que no estiver explcitamente liberado bloqueado por padro." + +#: 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 so avaliadas com base no first-match (ex.: a ao da primeira regra que corresponder a um pacote ser executada) apenas se a opo 'quick' estiver marcada em uma regra. Caso contrrio elas sero aplicadas apenas se nenhuma outra regra corresponder. Preste muita ateno na ordem das regras e opes escolhidas. Se nenhuma regra corresponder, as regras por interface ou padro sero 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 no pode associar um grupo de gateways IPv4 a um endereo da famlia 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 no pode associar um grupo de gateways IPv6 a um endereo da famlia 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 no 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 no 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 vlido 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 'padro'." + +#: 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 no um fim de porta de origem vlido. 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 famlia do endereo 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 no pode usar endereos 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 no pode utilizar endereos 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 "Deteco de OS somente vlida 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 tambm." + +#: 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 no 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 no pode usar limites em regras Flutuantes sem escolher uma direo." + +#: 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 no pode usar gateways em regras Flutuantes sem escolher uma direo." + +#: 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 direo de Dentro antes de selecionar para Fora tambm." + +#: 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 no 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 no pode selecionar uma fila e uma interface virtual para Entrada e Sada. 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 Liberao." + +#: 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 tambm." + +#: 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 critrios 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 diferena entre bloqueado e rejeitado que com rejeitado, um pacote (TCP RST ou porta ICMP inalcansvel 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 "Rpido" + +#: 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 ao imediatamente aps correspondncia." + +#: 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 opo se precisar aplicar essa ao ao trfego 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 no 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 "Direo" + +#: 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 "Verso 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 verso 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 so 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 espao limitado para log. No 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 "Diagnstico: Logs de sistema: Configuraes" + +#: 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 "pgina" + +#: 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 descrio para sua referncia." + +#: 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 "Opes Avanadas" + +#: 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 opes de IP passem. Do contrrio eles so bloqueados por padro. Isso normalmente somente visto com trfego 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 gerao 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 "Poltica 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 " Mximo 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 " Nmero mximo 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 " Nmero mximo de conexes 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 " Mximo 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 "Mximo de novas conexes / 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 funo." + +#: 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 dvida, 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 conexes TCP de entrada para ajudar a proteger servidores de inundaes de spoofed TCP SYN. Essa opo 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 "No use mecanismos de estado para rastrear. Isso somente til se voc estiver fazendo filas avanadas em determinadas situaes. Por favor verifique a documentao." + +#: 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 "padro" + +#: 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 'padro' para usar a tabela de roteamento do sistema ou escolha um gateway para utilizar roteamento baseado em polticas." + +#: 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/Sada" + +#: 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 sada/virtual somente se voc selecionou a de Entrada tambm." + +#: 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 seleo de Sada aplicada ao trfego que estiver saindo da interface em que a regra foi criada a Entrada a aplicada ao trfego 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 Flotao, se a direo de Entrada, ento as mesmas regras se aplicam. Se a direo foi de Sada, as selees so revertidas:Sada para entradas e Entrada para sadas. E se voc no selecionar nenhuma direo, use somente a Entrada, j que a seleo de Sada no faz sentido, de modo a evitar confuses." + +#: 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 continer Layer7 para aplicar regras de inspeo de protocolo de aplicao. Essas so vlidas 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 "No 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 no pode ser nomeada LAN." + +#: usr/local/www/firewall_schedule_edit.php:95 +msgid "Schedule may not be named WAN." +msgstr "Agenda no pode ser nomeada WAN." + +#: usr/local/www/firewall_schedule_edit.php:97 +msgid "Schedule name cannot be blank." +msgstr "Nome da agenda no 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 "Informao 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 no 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 "Ms" + +#: 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 cabealho do dia da semana apropriado para selecionar todas as ocorrncias 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 incio" + +#: 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 trmino" + +#: 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 "Descrio 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 seleo" + +#: usr/local/www/firewall_schedule_edit.php:987 +#: usr/local/www/firewall_schedule_edit.php:986 +msgid "Schedule repeat" +msgstr "Repetio 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 aps restaurao da configurao." + +#: 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 estticas" + +#: 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 configurao" + +#: 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 verso" + +#: 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, no possvel 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 no parece conter uma configurao 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 configurao 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 no 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 configurao 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 configurao completa, mas no 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 configurao 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 configurao no 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 configurao no 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 configuraes (NO retorne a verso de suas configuraes!) - 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 verso 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/restaurao" + +#: 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 configurao 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 "Histrico de configurao" + +#: 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/Restaurao" + +#: 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 "Configurao 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 boto para fazer download da configurao 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 "No fazer backup de informaes 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 configurao." + +#: 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 "No fazer backup dos dados RRD (Nota: dados RRD podem consumir 4+ megabytes de espao 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 configurao" + +#: 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 configurao XML e clique no boto abaixo para restaurar a configurao." + +#: 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 restaurao:" + +#: 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 configurao 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 aps restaurar a configurao." + +#: 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 "Funes 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 boto 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 boto para limpar a trava de pacotes se um pacote falhou em reinstalar corretamente depois de uma atualizao." + +#: usr/local/www/firewall_shaper_queues.php:172 +msgid "Firewall: Shaper: By Queues View" +msgstr "Firewall: Modelador: Por Visualizao 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 descrio \"%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 configurao selecionada." + +#: usr/local/www/diag_confbak.php:59 +#, php-format +msgid "Deleted backup with timestamp %1$s and description \"%2$s\"." +msgstr "Backup excludo com timestamp %1$s e descrio \"%2$s\"." + +#: usr/local/www/diag_confbak.php:98 +msgid "Configuration History" +msgstr "Histrico de Configurao" + +#: usr/local/www/diag_confbak.php:111 +msgid "Configuration diff from" +msgstr "Diferena de Configurao 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 "Alterao na configurao" + +#: 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 configurao?" + +#: usr/local/www/diag_confbak.php:190 usr/local/www/diag_confbak.php:192 +msgid "Revert to this configuration" +msgstr "Reverter para esta configurao" + +#: usr/local/www/diag_confbak.php:194 usr/local/www/diag_confbak.php:196 +msgid "Delete this configuration backup?" +msgstr "Excluir este backup de configurao?" + +#: 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 no 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 no 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 no 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 "Endereos 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 configurao de Endereos 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 "Configuraes 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 "Endereos 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 endereos IP virtuais definidos nessa pgina 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 "Configurao 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 instalao 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 "Usurios 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 pgina 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 Disponveis" + +#: 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 pgina 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 pgina permite que voc customize a informao 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 ttulo." + +#: 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 Configuraes" + +#: 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 configuraes!" + +#: 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 descrio 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 configurao de IP esttica. Por favor, desabilite o servio do Servidor DHCP nessa interface primeiro, ento modifique a configurao 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 configurao de IPv6 esttica. Por favor, desabilite o servio do Servidor DHCPv6 nessa interface primeiro, ento modifique a configurao 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 "Endereo 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' configurao." + +#: 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 "Nmero 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 Usurio 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 Usurio 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 "Endereo 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 "Endereo 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 Usurio 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 "Endereo 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 "Endereo 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 endereo de IPv4 vlido 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 endereo de IPv6 vlido 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 vlido 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 endereo IP vlido 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 vlido 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 vlido 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 servio contm caracteres invlidos." + +#: 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 reinicializao do PPPoE vlida 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 reinicializao do PPPoE vlidos 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 reinicializao do PPPoE vlida 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 endereo de IP local PPTP vlido 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 endereo IP remoto PPTP vlido 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 invlido. 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 dinmico" + +#: 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 nmero mximo 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 Esttico" + +#: 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 Esttico" + +#: 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 configurao %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 "No esquea de ajustar o intervalo do Servidor DHCP se necessrio aps aplicao." + +#: 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 "Configurao 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 descrio (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 Configurao 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 Configurao 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 endereo 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 endereo 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 conexes 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 endereo 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 padro 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, ento o MSS clamping para as conexes TCP para o valor informado acima menos 40 (tamanho do cabealho 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 opo autoselect(a negociao ser feita automaticamente) ao menos que a porta onde se conecta a interfece tenha o Speed e Duplex forado." + +#: 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 "Configurao IPv4 esttico" + +#: 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 conexo 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 padro:" + +#: 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 "Descrio:" + +#: 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 "Configurao IPv6 esttico" + +#: 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 conexo 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 padro:" + +#: 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 Delegao 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 delegao 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 "Configurao 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 "Mudanas de status nesta interface iro disparar a reconfigurao (se necessrio) 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 concesso DHCP. Alguns ISPs podem requerer isso (para identificao 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 Endereo 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 endereo 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 "Configurao 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 "Configurao 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 Servio" + +#: 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 "Pas:" + +#: 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 servios." + +#: 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 Avanado" + +#: 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 configuraes 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 configurao 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 "Configurao 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 servio" + +#: 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 opo 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 "conexo. A interface configurada, mas a conexo atual do link atrasada at que trfego de sada 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 sada qualificado for transmitido no nmero de segundos especificado, a conexo 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 "Reinicializao peridica" + +#: 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 reinicializao" + +#: 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 especfica (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 reinicializao ser executada todos os dias no horrio 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 ms ('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 "Avanado 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 opes de configurao PPPoE adicionais. Salve primeiro se voc realizou mudanas." + +#: 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 opes de configurao PPPoE avanadas e configuraes 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 "Configurao 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 "Endereo 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 "Endereo 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 opo 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 opes de configurao de PPTP e L2TP adicionais. Salve primeiro se voc fez alteraes." + +#: 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 opes de configurao de PPTP e L2TP avanadas" + +#: 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 "Configuraes sem fio comuns - Configuraes 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 configuraes 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 configuraes sem fio comuns durante remoes e atribuies 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 "Padro" + +#: 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 Proteo" + +#: 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 Proteo 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 Proteo 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 Proteo 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 tcnica 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 configuraes discretas de energia esto disponveis e o driver ir usar as configuraes mais prximas ao valor especificado. Nem todos os adaptadores suportam mudanas nas configuraes de transmisso 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: padres sem fio - canal # (frequncia @ max TX power / TX power permitidos no domnio 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 carto. Auto pode sobrescrever os padres 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 "Configuraes 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 "Padro" + +#: 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 transmisso" + +#: 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 recepo" + +#: 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 nmero de antenas nem sempre correspondem com os rtulos no carto." + +#: 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 "Configurao de distncia" + +#: 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 distncia 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 cartes 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 "Configuraes Regulatrias" + +#: 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 "Domnio regulatrio" + +#: 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 cartes tem um padro que no reconhecido e requerem mudanas no domnio regulatrio 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 "Pas (listado com cdigo de pas e domnio regulatrio)" + +#: 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 configurao de pas que no seja a \"Padro\" ir sobrescrever a configurao de domnio regulatrio" + +#: 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 "Localizao" + +#: 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 configuraes devem afetar os canais que estiverem disponveis e o mximo de energia de transmisso permitido para tais canais. Usando as configuraes corretas para estar de acordo com os requisitos regulatrios 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 sero temporariamente desligadas quando houver mudanas das configuraes regulatrias. Alguns domnios regulatrios ou cdigos de pases podem no ser permitidos em alguns cartes. Essas configurae podem no ser capazes de adicionar canais adicionais que ainda no so 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 "Configurao sem fio de rede especfica" + +#: 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 "Padro mnimo 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 estaes capazes de operar nos padres sem fio selecionados se associem (estaes no capazes no tem permisso 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 estaes que suportam 11g se associem (estaes somente 11b no tem permisso 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 comunicao 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 criao de pontes internas til quando o trfego 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 opo ir forar o carto 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 opo ir forar o carto a NO 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 dgitos 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 dgitos 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 Autenticao Extensvel" + +#: 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 "Autenticao 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 "Autenticao 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: Autenticao 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 "Rotao 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 so 1-9999 mas no devem ser mais longos que o tempo de Regenerao 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 "Regenerao 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 so 1-9999 mas devem ser menores que o tempo de Rotao 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 "Regenerao 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 opo forar 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 Autenticao 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 opo habilitar a autenticao 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 opo requer verificao 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 "Endereo IP de Servidor de Autenticao 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 endereo IP do Servidor de Autenticao 802.1X. Esse , comumente, um servidor Radius (FreeRadius, Servios de Autenticao 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 Autenticao 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 padro 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 Autenticao 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-Autenticao de Roaming de Autenticao" + +#: 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 opo bloqueia o trfego dos endereos IP que esto 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 "endereos 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 opo normalmente ligada, a menos que sua rede WAN tambm estiver no mesmo espao do endereo 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 opo bloqueia o trfego dos endereos IP que est reservados (mas no na RFC1918) ou ainda no foram atribudas 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 so prefixos que nunca devem aparecer na tabela de roteamento da Internet, e obviamente no devem aparecer como os endereos 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 atribuda 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 tnel gre. Por favor, remova o tnel 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 tnel gif. Por favor, remova o tnel 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 " necessrio reiniciar. Por favor, aplique as configuraes 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 no correspondncia 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 configurao da interface foi modificada.
    Voc deve aplicar as alteraes 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 so configuradas como membros de uma interface lagg(4) no sero exibidos." + +#: usr/local/www/diag_pf_info.php:46 +msgid "Diagnostics: pfInfo" +msgstr "Diagnsticos: 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 informaes 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 "Ateno" + +#: 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 "Informao/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 "Endereo 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 "Informao" + +#: usr/local/www/diag_smart.php:281 usr/local/www/diag_smart.php:302 +msgid "Info type" +msgstr "Tipo informao" + +#: usr/local/www/diag_smart.php:284 usr/local/www/diag_smart.php:305 +msgid "Health" +msgstr "Sade" + +#: 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 "Servio: /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 "Visualizao" + +#: 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 "Diagnsticos: 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 "Diagnsticos: 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 classificao:" + +#: 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 "Licena" + +#: usr/local/www/license.php:47 +msgid "is Copyright" +msgstr "tem Direito de Cpia" + +#: 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 "Redistribuio e uso em forma de fonte e binrios, com ou sem " + +#: usr/local/www/license.php:54 +msgid "modification, are permitted provided that the following conditions are met" +msgstr "modificao, so permitidos desde que as seguintes condies sejam encontradas" + +#: usr/local/www/license.php:57 +msgid "1. Redistributions of source code must retain the above copyright notice," +msgstr "1. Redistribuies de cdigo fonte devem conter a notificao de direitos de cpia acima, " + +#: usr/local/www/license.php:59 +msgid "this list of conditions and the following disclaimer" +msgstr "essa lista de condies e os seguintes avisos legais" + +#: usr/local/www/license.php:61 +msgid "2. Redistributions in binary form must reproduce the above copyright" +msgstr "2. Redistribuies em formato binrio devem reproduzir a notificao de direitos" + +#: usr/local/www/license.php:62 +msgid "notice, this list of conditions and the following disclaimer in the" +msgstr "de cpia acima, a lista de condies e os seguintes avisos legais na" + +#: usr/local/www/license.php:64 +msgid "documentation and/or other materials provided with the distribution." +msgstr "documentao e/ou outros materiais fornecidos com a distribuio." + +#: 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 IMPLCITA," + +#: usr/local/www/license.php:68 +msgid "INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY" +msgstr "INCLUINDO, MAS NO LIMITADO A, GARANTIAS IMPLCITAS DE COMRCIO" + +#: usr/local/www/license.php:69 +msgid "AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE" +msgstr "E ADEQUAO PARA UM PROPSITO PARTICULAR SO REJEITADOS. EM NENHUM CASO O AUTOR" + +#: usr/local/www/license.php:71 +msgid "AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY," +msgstr " RESPONSVEL 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 CONSEQUNCIA (INCLUINDO, MAS NO LIMITADO A, PROCURAO PARA " + +#: usr/local/www/license.php:75 +msgid "SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS" +msgstr "SUBSTITUIO DE BENS E SERVIOS; PERDA DE USO, DADOS, OU LUCROS; OU INTERRUPO" + +#: usr/local/www/license.php:77 +msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN" +msgstr "DO NEGCIO) 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 NEGLIGNCIA 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 cdigo contribudo no m0n0wall" + +#: usr/local/www/license.php:86 +msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder" +msgstr "Diagnstico: Funo Ping; canal WLAN auto-selecionado; DNS forwarder" + +#: usr/local/www/license.php:90 +msgid "Timezone and NTP client support" +msgstr "Fuso horrio 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 "Gerao de syslog remoto; alguns bits de cdigo para servidor DHCP em interfaces opcionais" + +#: usr/local/www/license.php:98 +msgid "Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP agent" +msgstr "Idia/bits de cdigo para senhas criptografadas do webConfigurator; agente SNMP minimizado" + +#: usr/local/www/license.php:102 +msgid "Advanced outbound NAT: destination selection" +msgstr "Outbound NAT avanado: seleo 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 (ordenao, bloqueio/liberao, desabilitado); melhor pgina de status;" + +#: usr/local/www/license.php:112 +msgid "webConfigurator assign network ports page " +msgstr "webConfigurator atribui pgina 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 " pgina" + +#: 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 "Pgina de lista de concesses 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 trfego baseado em SVG" + +#: usr/local/www/license.php:131 +msgid "per-user IP address assignments for PPTP VPN" +msgstr "endereos IP por usurio atribudos 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: endereos MAC/IP pass-through, autenticao 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 concorrncia de servidor HTTP" + +#: usr/local/www/license.php:141 +msgid "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;" +msgstr "correspondncia do Traffic Shaper TOS; magic shaper; DHCP nega clientes desconhecidos;" + +#: usr/local/www/license.php:142 +msgid "IPsec user FQDNs; DHCP relay" +msgstr "IPsec usurio FQDNs; DHCP relay" + +#: usr/local/www/license.php:145 +msgid "IDE hard disk standby" +msgstr "Espera de disco rgido IDE" + +#: usr/local/www/license.php:148 +msgid "CPU/memory usage display" +msgstr "Exibio de uso de CPU/memria" + +#: 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 vrios 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 esforo" + +#: 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 cpia" + +#: 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, disponvel de graa 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 "Pores desse cdigo tem direitos de cpia" + +#: 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 portvel" + +#: 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 cpia 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 cpia (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 no 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 configurao do balanceador de carga foi modificada%sVoc deve aplicar as mudanas 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, no Multi-WAN. Para balanceamento de carga ou failover para WANs mltiplas, 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 pgina 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 prximos 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 domnio 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 vlida 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 no 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 atualizao 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 "Configurao 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 domnio" + +#: 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 "No use 'local' como um nome de domnio. Isso far com que host locais que executam mDNS (avahi, bonjour, etc.) fiquem impossibilitados de resolver hosts locais que no 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, escritrio, 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 endereos IP usados pelo sistema para resoluo de DNS. Eles tambm so usados para o servio 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 "Alm disso, opcionalmente selecione o gateway para cada servidor DNS. Quando usando mltiplas conexes 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 substituda 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 opo estiver configurada, %s ir usar servidores DNS atribudos para um servidor DHCP/PPP na WAN para seus prprios propsitos (incluindo o DNS forwarder). No entanto, eles sero atribudos 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 "No 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 padro localhost (127.0.0.1) ser usado como o primeiro servidor DNS onde o encaminhador DNS est habilitado, ento o sistema pode usar o encaminhador DNS para fazer buscas. Marcar essa opo 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 horrio" + +#: 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 localizao mais prxima 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 espao para separar mltiplos hosts (somente um necessrio). 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 aparncia 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 no 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 cartes que no explicitam que a suportam, tags VLAN ainda funcionaro, mas um MTU reduzido pode causar problemas. Veja o livro %s para informaes sobre cartes 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 "Configurao 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 sero 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 formulrio 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 temporria 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 extenso" + +#: 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 "Atualizao 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 atualizao est atualmente em progresso.

    O firewall ir reiniciar quando a operao 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 "Atualizao" + +#: 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 no 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 memria?)" + +#: 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 invlida." + +#: 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 no 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 no 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 no uma imagem oficial/suportada e mode levar a um comportamento inesperado ou comprometimento de segurana. Somente instale imagens que vem de fontes que voc confia, e tenha certeza de que a imagem no 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-Atualizao" + +#: 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 "Configuraes 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 "Atualizao 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 atualizao de firmware\" para comear." + +#: 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 atualizao" + +#: 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 atualizao." + +#: 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 "Advertncia:" + +#: 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 "NO aborde a atualizao do firmware uma vez que a iniciou. O firewall ir reiniciar automaticamente aps armazenar um novo firmware. A configurao ser mantida." + +#: usr/local/www/system_firmware_auto.php:115 +#: usr/local/www/system_firmware_auto.php:113 +msgid "Beginning firmware upgrade" +msgstr "Iniciando atualizao 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 informaes da verso 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 verificaes por atualizaes." + +#: 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 atualizaes" + +#: 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 verso." + +#: 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 atualizao no pode continuar. Voc pode desabilitar esta verificao na aba Configuraes de Atualizao. " + +#: 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 atualizao no possui uma assinatura, porm 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 "Atualizao no 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 no 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-atualizao 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 necessrio" + +#: 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 operao 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-Atualizao" + +#: usr/local/www/system_firmware_auto.php:258 +#: usr/local/www/system_firmware_auto.php:260 +msgid "Current Version" +msgstr "Verso Atual" + +#: usr/local/www/system_firmware_auto.php:259 +#: usr/local/www/system_firmware_auto.php:261 +msgid "Latest Version" +msgstr "ltima Verso" + +#: 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-Atualizao" + +#: 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 informaes de nova verso..." + +#: 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 "No pode contactar servidor de atualizao 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 "No pode contactar o servidor de atualizao %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 informaes da verso 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 verso est disponvel 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 "Verso 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 "Construdo 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 verso" + +#: 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 atualizao" + +#: 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 Atualizao Padro" + +#: 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 Atualizao 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 atualizao de firmware que no " + +#: 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 verses 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-Atualizao" + +#: 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 "pgina 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 no 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 "Atualizaes" + +#: 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 no 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 invlida." + +#: 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 sincronizao na atualizao" + +#: 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 "Aps atualizar, sincronize com o seguinte repositrio/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 repositrio" + +#: 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 repositrio 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 sincronizao no ser realizada se um branch no 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 Estticas" + +#: 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 configurao da rota esttica foi modificada.%sVoc deve aplicar as mudanas 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 "No informe rotas estticas para redes atribudas a qualquer interface desse firewall. Rotas estticas so somente usadas em redes alcanveis atravs de um roteador diferente, e no alcanveis atravs de seu gateway padro." + +#: 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 vlida 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 no 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 esttica" + +#: 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 padro:" + +#: 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, no 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 "Aes" + +#: 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 sumrio 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: Usurios do IE8 precisam habilitar o modo de compatibilidade." + +#: usr/local/www/uploadconfig.php:48 +msgid "ERR Could not save configuration." +msgstr "ERRO No pde salvar configurao." + +#: usr/local/www/uploadconfig.php:54 +msgid "OK" +msgstr "OK" + +#: usr/local/www/uploadconfig.php:57 +msgid "ERR Could not install configuration." +msgstr "ERRO: No pde instalar configurao." + +#: usr/local/www/uploadconfig.php:60 +msgid "ERR Invalid configuration received." +msgstr "ERRO Configurao invlida 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 configurao de tnvel 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 "Tneis" + +#: 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 mveis" + +#: 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 "Transformaes 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 "Mtodos de Autenticao 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:Avanado: 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 "Transformaes 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 "Descrio 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 "Sada" + +#: 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 "Grfico 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 "Ateno: Voc deve fazer o carregamento de um arquivo com extenso .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 padro 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 padres" + +#: 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 contm caracteres invlidos." + +#: 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 usurio com esse nome j existe. Ao invs disso, adicione a chave ao usurio." + +#: 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 endereo IP, um nome de domnio completamente qualificado quanto um endereo 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 Autenticao de Usurio" + +#: usr/local/www/vpn_ipsec_mobile.php:128 +#: usr/local/www/vpn_ipsec_mobile.php:132 +msgid "Group Authentication Source" +msgstr "Fonte de Autenticao 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 endereo IP vlido para 'Rede de Pool de Endereos 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 vlido para 'Domnio Padro 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 opo 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 endereo IP vlido 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 endereo IP vlido 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 endereo IP vlido 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 endereo IP vlido 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 opo 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 endereo IP vlido 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 endereo IP vlido 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 vlido 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 "Mvel" + +#: 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 Mveis IPsec est habilitado mas a definio da Fase 1 no 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 "Extenses 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 Mveis IPsec" + +#: usr/local/www/vpn_ipsec_mobile.php:350 +#: usr/local/www/vpn_ipsec_mobile.php:377 +msgid "Extended Authentication (Xauth)" +msgstr "Autenticao Extendida (Xauth)" + +#: usr/local/www/vpn_ipsec_mobile.php:354 +#: usr/local/www/vpn_ipsec_mobile.php:381 +msgid "User Authentication" +msgstr "Autenticao de Usurio" + +#: 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 "Autenticao de Grupo" + +#: usr/local/www/vpn_ipsec_mobile.php:388 +#: usr/local/www/vpn_ipsec_mobile.php:413 +msgid "Client Configuration (mode-cfg)" +msgstr "Configurao 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 Endereos 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 endereo 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 acessveis 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 no funciona quando instalado via a ferramentas de configurao 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 "Domnio Padro 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 domnio padro 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 configuraes de dispositivos mveis 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 no 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 agregao de link, tolerncia de laos e falhas. Somente interfaces no atribudas 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 "Configurao 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 sero usados para a agregao 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 trfego somente atravs da porta master. Se a porta master de tornar indisponvel, a prxima porta ativa usada. A primeira interface adicionada a porta master; qualquer interface adicionada depois disso sero 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 instalao esttica e no negocia agregaes 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 Agregao de Link (LACP) da IEEE 802.3ad e o Protocolo Marker. LACP negociar um conjunto de links agregveis com o peer em um ou mais Grupos de Links Agregados. Cada LAG composto de portas da mesma velocidade, configurado para uma operao full-duplex. O trfego ser balanceado atravs das portas no LAG com a velocidade total maior, na maioria dos casos haver somente um LAG que contm todas as portas. No momento em que houver mudanas na conexo fsica, a Agregao do Link ser rapidamente convergida para uma nova configurao." + +#: 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 trfego de sada atravs das portas ativas baseado em informaes do cabealho de protocolo em hash e aceita trfego de entrada de qualquer porta ativa. Essa uma instalao esttica e no negocia agregao com o peer ou troca frames para monitorar o link. A hash inclui a fonte Ethernet e endereo de destino e, se disponvel, a tag VLAN, e a fonte IP e endereo 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 trfego de sada usando um agendamento round-robin atravs de todas as portas ativas e aceita trfego 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 no tem inteno de fazer nada: ele desabilita qualquer trfego 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 no 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 "Conexes multilink (MLPPP) usando o tipo de link PPP no 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 Servio contm caracteres invlidos." + +#: 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 "No especifique um nome de Servio e um nome de Servio 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 ms de reincio PPPoE vlido deve ser especificado (1-12) nos campos de reincio peridico 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 ms de reincio do PPPoE vlido deve ser especificado (1-31) nos campos de reincio peridico do PPPoE personalizados. Nenhuma verificao feita em um # de dias vlido por ms" + +#: 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 reincio do PPPoE vlido deve ser especificado. No 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 endereo IP local vlido 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 endereo IP de gateway ou nome de host vlido 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 "Configurao 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 conexes 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 descrio aqui para sua referncia. A descrio ir aparecer na lista de seleo \"Atribuio 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 "Nmero 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 padro 1 caso voc configurar o APN acima. Ignora-se caso voc no 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 inicializao" + +#: 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 inicializao do modem aqui. NO inclua a string \"AT\" no incio do comando. Muitos modems USB 3G modernos no precisam de uma string de inicializao." + +#: 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 "Conexo 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 expirao em segundos para que a conexo seja estabelecida (segundos). O padro 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 "Gerao de log de tempo de execuo" + +#: 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 persistncia da conexo em tempo de execuo." + +#: 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 opo faz com que o acmulo de tempo de execuo seja gravado e exibido na pgina 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 Servio 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 Servio no ser configurado se esse campo estiver vazio. Verifique a caixa \"Configure Nulo\" para configurar um nome de servio 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 "Endereo 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 opo faz com que a inteface opere no modo de discagem sob demanda. NO habilite se voc deseja que seu link esteja sempre funcionando. A interface configurada, mas a conexo real adiada at qualificar o trfego de sada." + +#: 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 padro 0, o que desabilita a funcionalidade de tempo de expirao." + +#: 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 sada forem transmitidos para o nmero de segundos informados, a conexo 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 opo de discagem sob demanda estiver habilitada, mpd retorna ao modo discagem sob demanda. Do contrrio, 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 "Compresso" + +#: 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 (compresso) (auto-negociada por padro)." + +#: 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 opo habilita a compresso de cabealho TCP de Van Jacobson, que salva muitos bytes por pacote TCP. Voc deve sempre querer configurar essa opo. Essa compresso no tem efeito para conexes TCP com extenses modernas habilitadas como time stamping ou SACK, que modifica as opes 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 padro)." + +#: 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 opo faz com que o mpd ajuste segmentos TCP SYN de entrada e sada de modo que o tamanho mximo de segmento requerido no maior que o total permitido pelo MTU da interface. Isso necessrio em muitas configuraes para evitar problemas causados por roteadores que descartam mensagens ICMP Datagram Too Big. Sem essas mensagens, a mquina de origem envia dados, passa pelo roteador trapaceiro e ento alcana a mquina que em um MTU que no grande o bastante para o dado. Em funo da opo No Fragmentar IP estar configurada, a mquina 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 opo de No Fragmentar para seus dados de sada." + +#: 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 padro)." + +#: 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 opo somente faz sentido se o multi-link PPP negociado. Ele proscreve cabealhos de fragmentos de multi-link mais curtos, salvando 2 bytes a cada frame. No necessrio desabilitar isso para conexes que no so 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 (compresso) (auto-negociada por padro)." + +#: 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 "Enderea e controla compresso de campo. Essa opo somente se aplica a tipos de link assncronos. 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 (compresso) (auto-negociada por padro)." + +#: 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 "Compresso de campo de protocolo. Essa opo 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 "Parmetros 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 conexes 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 padro." + +#: 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 padro." + +#: 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 conexes 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 no 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 cartes que no explicitam que a suportam, tags QinQ ainda funcionaro, mas um MTU reduzido pode causar problemas. Veja o livro %s para informaes sobre cartes 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 nvel no 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 nvel no 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 no 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 nvel 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 nvel 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 nmeros 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 sero 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 nvel" + +#: 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 nvel. No topo dela esto 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 no pode ser apagado porque ele est atribudo 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 atribudos como interfaces separadas independentes. Somente disponvel em conjunto de chips sem fio que os suportam, com limitao do nmero 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 no pode ser modificado porque ainda est atribudo 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 pgina de configurao para a interface atribuda 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 no suportar a criao 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 cdigo %s" + +#: usr/local/www/interfaces_wireless_edit.php:131 +#: usr/local/www/interfaces_wireless_edit.php:133 +msgid "Created without id" +msgstr "Criado sem cdigo" + +#: usr/local/www/interfaces_wireless_edit.php:156 +#: usr/local/www/interfaces_wireless_edit.php:158 +msgid "Wireless clone configuration" +msgstr "Configurao 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 no 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 configurao 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 "Nmero de usurios" + +#: 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 instncia 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 instncia 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 sero 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 instncia 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 no pode usar espaos 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 "Cdigo(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 cabealho se necessrio." + +#: 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 "Cdigo 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 no um endereo IP vlido (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 no um endereo IP vlido (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 invlido." + +#: 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 esto 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 endereo 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 "Endereo 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 (padro)" + +#: 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 no um endereo IP vlido." + +#: 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 endereo IP WAN em que voc gostaria que o servidor lesse. Toas as conexes para esse IP e porta sero 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 iro conectar. Todas as conexes nessa porta sero 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 sero 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 "No esquea de adicionar uma regra de firewall para o servidor/pool virtual depois que finalizar as configuraes." + +#: 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 sero 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 configurao 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 no h pacotes disponveis para instalao." + +#: 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 disponveis" + +#: 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 restaurao antes da instalao 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 "Reinstalao 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 "instalao 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 "No pde 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 "Instalao 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 "Instalao 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 "Instalao 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 "instrues de instalao" + +#: 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 "Instalao completa. Por favor, verifique para ter certeza de que o pacote est configurado no respectivo menu e ento inicie o pacote." + +#: usr/local/www/preload.php:6 +msgid "You are not allowed to access this page." +msgstr "Voc no tem permisso de acessar essa pgina." + +#: usr/local/www/progress.php:25 usr/local/www/progress.php:22 +msgid "Invalid Meter ID" +msgstr "ID de Medida invlido" + +#: 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 endereo IP vlido." + +#: 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 resoluo 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 informao:" + +#: 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 so para servios externos, assim a sua confiabilidade no 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 "Forando todas as permisses 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 diretrio no 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 no existe ou no 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 gravao 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 no 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 no pode ser usado na interface %s j que ele est sendo usado na instncia %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 no parece ser vlido." + +#: 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 intermedirio no parece ser vlido." + +#: 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 no parece ser vlida." + +#: 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 expirao 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 mnimo 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 crdito de passagem deve ser um nmero 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 perodo de espera para restaurar os crditos 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 endereo IP vlido 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 nmero de porta vlido 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 nmero mximo de conexes concorrentes por endereo IP de cliente no pode ser maior que o mximo 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 "Endereos 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 "Mximo de conexes 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 endereo 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 configurao limita o nmero de conexes concorrentes para o servidor HTTP(S) do portal captive. Ela no configura quantos usurios podem estar logados no portal captive, mas sim quantos usurios podem carregar a pgina do portal ou autenticar ao mesmo tempo! O padro 4 conexes por endereo IP de cliente, com o total mximo de 16 conexes." + +#: 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 sero 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 sero desconectados depois desse tempo, independentemente de ter atividade ou no. Eles podem realizar login novamente imediatamente, no entanto. Deixe esse campo em branco para no ter tempo de expirao rgido (no 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 "Crditos de passagem permitidos por endereo 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 endereo 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 configurao permite passagem pelo portal captive sem autenticao para um nmero limitado de vezes por endereo MAC. Uma vez utilizado, o cliente somente pode realizar login com credenciais vlidas at que o perodo de espera especificado abaixo tenha expirado. Recomenda-se configurar um tempo de expirao e/ou tempo de espera ao utilizar essa funo 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 "Perodo de espera para restaurar crditos 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 tero seus crditos de passagem restaurados para a contagem original aps esse total de tempo desde que usando o primeiro. Esse deve ser acima de 0 horas se os crditos de passagem esto 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 "Perodo de espera para reincio 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 perodo de espera de reincio 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 perodo de espera reiniciado para a durao original se houver tentaviva de acesso quando todos os crditos 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 atravs do portal captive. Isso permite que clientes desconectem-se explicitamente antes que o tempo ocioso ou tempo de expirao rdigo 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 preautenticao" + +#: 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 varivel $PORTAL_REDIRURL$, que pode ser acessada usando sua pgina personalizada do captive portal index.php ou pginas 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 aps autenticao" + +#: 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 sero redirecionados para essa URL ao invs daquela que inicialmente eles tentaram acessar aps 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 usurio 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 opo for configurada, somente o login por nome de usurio mais recente ser ativado. Logins subsequentes provocaro a desconexo de mquinas anteriormente logadas com o mesmo nome de usurio." + +#: 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 opo for configurada, nenhuma tentativa ser feita para garantir que o endereo MAC de clientes se mantenha o mesmo enquanto eles esto logados. Esse um requisito quando o endereo MAC do cliente no pode ser determinado (normalmente porque no 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, autenticao de MAC RADIUS no 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 adies automticas 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 opo estiver configurada, a entrada MAC passthrough automaticamente adicionada aps o usurio ter autenticado com sucesso. Usurios de tal endereo MAC nunca tero 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 autenticao MAC RADIUS no pode ser usada. Alm disso, a janela de logout no 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 adio automtica de MAC Pass-through com nome de usurio" + +#: 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 opo estiver configurada, com a entrada automtica de MAC passthrough criada, o nome de usurio, usado durante a autenticao, 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 "Restrio de banda por usurio" + +#: 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 restrio de banda por usurio" + +#: 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 padro" + +#: 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 padro" + +#: 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 opo estiver configurada, o portal captive restringir cada usurio que realizar login na largura de banda especificada. RADIUS pode sobrescrever a configurao padro. Deixe vazio ou configure 0 para no 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 "Autenticao 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 autenticao 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, usurios podero se autenticar atravs do painel PMS, se eles preencherem os campos necessrios 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 Autenticao" + +#: 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 usurio" + +#: 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 "Autenticao 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 primrio" + +#: 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 endereo IP do servidor RADIUS no qual usurios 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 padro (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 no usar o segredo compartilhado do RADIUS (no 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 secundrio" + +#: 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 secundrio, voc pode ativa-lo informando seu endereo IP aqui." + +#: usr/local/www/services_captiveportal.php:639 +msgid "Tertiary RADIUS server" +msgstr "Servidor RADIUS tercirio" + +#: 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 endereo IP aqui." + +#: usr/local/www/services_captiveportal.php:658 +msgid "Quaternary RADIUS server" +msgstr "Servidor RADIUS quartenrio" + +#: 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 endereo 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 sero enviados para o servidor RADIUS primrio." + +#: 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 padro (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 "Reautenticao" + +#: 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 usurios 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 reautenticao estiver habilitada, Access-Requests sero enviados para o servidor RADIUS para cada usurio logado a cada minuto. Se um Access-Reject recebido por um usurio, aquele usurio 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 "Atualizaes 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 atualizao 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 "atualizao 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 "Autenticao 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 autenticao 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 opo estiver habilitada, o portal captive tentar autenticar usurios enviando seus endereos MAC como o nome de usurio 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 "Opes 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 estao." + +#: 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 sero desconectados aps 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 endereo IP do cliente e o Called-Station-Id para o endereo MAC do cliente. O comportamento padro Calling-Station-Id = endereo MAC de cliente e Called-Station-Id = endereo 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 endereo 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 "no 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 opo modifica o formato do endereo MAC usado em todo o sistema RADIUS. Modifique isso se voc tambm" + +#: 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 usurio para a autenticao 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 "padro:" + +#: 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 "no 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 usurio e senha ser transmitido sobre uma conexo HTTPS para proteg-los de eavesdroppers. Um nome de servidor, certificado e chave privada correspondente tambm 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 ao do formulrio para o POST HTTPS e deve corresponder ao Common Name (CN) no seu certificado (do contrrio, o browser do cliente ir provavelmente mostrar um aviso de segurana). 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 intermedirio 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 "Contedo da pgina 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 pgina 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 pgina do portal aqui (deixe em branco para manter o atual). Tenha certeza que incluiu um formulrio (com POST para %1$s) com um boto de submisso (%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 autenticao estiver habilitada, do contrrio 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 cdigo para o formulrio:" + +#: 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 "pgina 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 "contedo" + +#: 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 contedo do arquivo HTML/PHP que voc carregar aqui exibido quando um erro de autenticao 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 substitudo 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 contedo do arquivo HTML/PHP que voc carregou aqui so exibidos no sucesso de autenticao 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 configurao nessa pgina ir desconectar todos os clientes! No esquea de habilitar o servidor DHCP na interface de seu portal captive! Tenha certeza de que o tempo de concesso padro/mximo maior que o tempo de expirao informado nessa pgina. Alm disso, o DNS forwarder precisa estar habilitado para receber DNS lookups de clientes no 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 no 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 disposio no diretrio root do servidor HTTP(S) do portal captive. Voc deve referencia-los diretamente de seu cdigo HTML da pgina do seu portal usando caminhos relativos. Exemplo: voc carregou uma imagem com o nome 'captiveportal-test.jpg' usando o gerenciador de arquivo. Ento voc pode inclui-lo na sua pgina 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 tambm pode carregar os arquivos .php para execuo. Voc pode passar o nome do arquivo para sua pgina personalizada pela pgina 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 "Poltica de uso aceitvel" + +#: 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 "Diagnsticos: 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 informaes 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 trfego 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 "Viso 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 Autenticao." + +#: 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 associao de segurana?" + +#: usr/local/www/diag_ipsec_sad.php:121 usr/local/www/diag_ipsec_sad.php:122 +msgid "No IPsec security associations." +msgstr "Nenhuma associao de segurana 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 endereo" + +#: 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 endereo" + +#: 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 endereo?" + +#: 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 endereo" + +#: 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 endereos IP permitidos ir permitir acesso dos IPs de destino/origem esses endereos atravs do portal captive sem que sejam direcionados pgina do portal. Isso pode ser usado para um servidor web que serve imagens para a pgina do portal ou um servidor DNS em outra rede, por exemplo. Especificando endereos de origem, isso pode ser usado para sempre permitir acesso pass-through de um cliente por trs 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 conexes" + +#: 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 endereo 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 endereos 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 "Endereos 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 necessrio 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 necessria 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 endereo de IP atravs do portal captive (sem autenticao)" + +#: 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 no autenticados) atrs do portal para esse endereo 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 "Endereo IP e mscara 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 endereo 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 endereo 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 operao 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 usurio:" + +#: 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 endereo 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 configurao de endereo MAC do portal captive foi modificada.
    Voc deve aplicar as modificaes 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 endereos MAC como MACs pass-throughs permite que eles tenham acesso atravs do portal captive automaticamente sem que sejam direcionados pgina 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 endereo 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 endereo MAC vlido 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 liberao de trfego (Pass-through) do endereo 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 "Endereo MAC (6 octetos hexadecimais separados por vrgulas)" + +#: 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 endereo 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 endereo 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 tnel" + +#: 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 segurana?" + +#: 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 "sada (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 segurana 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 endereos IP estticos" + +#: 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 esttico sero 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 "Incio 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 vlido 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 endereo IP vlido 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 endereo IP vlido deve ser especificado para os servidores WINS primrio/secundrio." + +#: 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 endereo gateway %s no 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 endereo IP vlido deve ser especificado para os servidores DNS primrio/secundrio." + +#: 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 concesso padro deve ser de no mnimo 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 concesso mximo deve ser no mnimo de 60 segundos e maior que o tempo de concesso padro." + +#: 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 domnio vlido deve ser especificado para o registro de DNS dinmico." + +#: 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 endereo IP vlido deve ser especificado pelos servidores NTP primrio/secundrio." + +#: 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 domnio vlido deve ser especificado para o domnio 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 endereo IP vlido 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 endereo IP vlido 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 no pode usar o endereo da rede no incio 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 no pode usar o endereo 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 no pode sobrepor o endereo 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 no 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 srie 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 nmero 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 nmero 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 nmero 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 nmero 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 nmero 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 nmero 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 "Endereo IP ou tipo de host deve ser um endereo 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 invlido (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 no pode sobrepor nenhum mapeamento DHCP esttico." + +#: 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 "Endereo 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. No possvel habilitar do servio 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 configurao de mapeamento esttico 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 obtero concesses 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 "Mscara 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 disponvel" + +#: 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 "Mscara 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 padro do sistema - esse IP de interface se o DNS forwarder estiver habilitado, do contrrio os servidores configurados na pgina 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 padro usar o IP nessa interface do firewall como o gateway. Especifique um gateway alternativo aqui se esse no 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 domnio" + +#: 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 padro usar o nome de domnio desse sistema como o nome de domnio padro fornecido pelo DHCP. Voc pode especificar um nome de domnio 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 domnio" + +#: 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 domnio." + +#: 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 concesso padro" + +#: 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 no requisitam um tempo de expirao especfico." + +#: 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 padro 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 mximo de concesso" + +#: 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 mximo tempo de concesso para clientes que requisitama por um tempo de expirao especfico." + +#: 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 padro 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 endereo IP da interface da outra mquina. Mquinas 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 Esttico" + +#: 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 estticas" + +#: 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 mquinas listadas abaixo sero 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 Dinmico" + +#: 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 dinmico." + +#: 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 domnio DNS dinmico 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 configurao 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 configurao 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 configurao 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 "Opes 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 Opes 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 nmero de opo DHCP e o valor de cada item que voc gostaria de incluir nas informaes de concesso DHCP. Para uma lista de opes disponveis, 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 "Nmero" + +#: 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: Configuraes 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 atribudo 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 concesso 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: concesses 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 "pgina." + +#: 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 no pode terminar com um hfen 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 vlido especificado, mas a parte do nome de domnio 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 esttico est habilitado. Voc deve especificar um endereo 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, endereo 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 endereo IP no 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 endereo 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 esttico" + +#: 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 esttico" + +#: 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 endereo 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 endereo 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 endereo 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 domnio." + +#: 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 endereo IP do Servidor de Destino vlido 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 "Configurao 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 requisies" + +#: 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 (nmero de interface %s) e o agent ID requisio 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 endereo IP do servidor para o qual as requisies DHCP so retransmitidas. Voc pode inserir mltiplos servidores de endereos de IP, separados por vrgulas. Selecione \"Requisies 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 "Opes personalizadas invlidas" + +#: 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 configurao 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 "Opes 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 concesses 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 opo estiver configurada, ento mquinas que especificam seus nomes de host quando requisitam uma concesso DHCP sero registrados no DNS forwarder, de modo que seus nomes possam ser resolvidos. Voc deve tambm configurar em %sSistema: Configuraes 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 esttico" + +#: 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 estticos 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 opo estiver configurada, ento os mapeamentos estticos DHCP sero registrados no DNS forwarder, de modo que seus nomes possam ser resolvidos. Voc deve tambm configurar o domnio em %sSistema: Configuraes 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 opo estiver definida, os mapeamentos DHCP sero 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 opes adicionais que desejar s configuraes do servidor OpenVPN aqui, separados por ponto-e-vrgula 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 servio DHCP (se habilitado) servir automaticamente o endereo 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: Instalao Geral%s ou aqueles obtidos via DHCP ou PPP na WAN se a opo "Permitir que a lista de servidores DNS seja sobrescrita pelo DHCP/PPP na WAN" estiver marcada. Se voc no usar essa opo (ou se voc usar o endereo IP esttico na WAN), voc deve especificar manualmente pelo menos um servidor DNS na pgina %sSistema: Configuraes 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 seo 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 opes 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 domnio" + +#: 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 domnio inteiro especificando um servidor DNS autoritativo para ser consultado para tal domnio." + +#: 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 domnio?" + +#: 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/domnio 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 domnio" + +#: 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 "Domnio 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 "Endereo 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 "No h pacotes com instalaes 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 pgina de status inclui as seguintes informaes" + +#: 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 informaes sensveis (senhas, talvs endereos IP tambm) antes de publicar informaes dessa pgina para espaos pblicos (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 informaes" + +#: 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 "Endereo 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 "Endereo 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 "Endereo 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 endereo de servidor vlido 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 endereo inicial remoto vlido 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 endereo de servidor RADIUS vlido 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 endereo 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 endereo do servidor especificado igual ao endereo da interface LAN." + +#: usr/local/www/vpn_pptp.php:117 usr/local/www/vpn_pptp.php:120 +msgid "PPTP redirection target address" +msgstr "Endereo 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 endereo de alvo vlido 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 "Configurao" + +#: 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 "Usurios" + +#: 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 conexes 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 endereo IP do host que aceitar conexes 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. usurios 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 so 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 endereo 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 no 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 no deve ser definido para nenhum endereo 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 endereo 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 endereo de incio 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 primrio e secundrio atribudos 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 autenticao" + +#: 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 usurios sero autenticados usando o servidor RADIUS especificado abaixo. A base de dados de usurios local no 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 secundrio para autenticao 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 requisies iro para o servidor secundrio quando o primrio 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 endereos 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 "Atualizao 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 endereo 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 secundrio 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 secundrio" + +#: 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 sero aceitas. Do contrrio criptografias de 40 e 56 bits sero aceitas tambm. Note que a criptografia ser sempre forada nas conexes PPTP (i.e. conexes no criptografadas no sero 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 "no esquea 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 trfego 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 "Advertncia: RADIUS est habilitado. A base de dados de usurios local no 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 usurios 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 mudanas 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 "Advertncia: isso ir finaliar todas as sesses 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 usurio" + +#: 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 usurio" + +#: 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 usurio?" + +#: 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 usurio" + +#: 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 usurio contm caracteres invlidos." + +#: usr/local/www/vpn_pptp_users_edit.php:88 +msgid "The password cannot start with '!'." +msgstr "A senha no 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 contm caracteres invlidos." + +#: 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 no 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 endereo IP informado no vlido." + +#: 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 usurio 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 "confirmao" + +#: 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 usurio, 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 usurio seja designado a um endereo IP especfico, 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: No pde abrir %s." + +#: usr/local/www/wizard.php:77 +#, php-format +msgid "ERROR: Could not parse %s/wizards/%s file." +msgstr "ERRO: No pde 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: Ao 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 ao j est sendo usado. Nomes de ao devem ser nicos." + +#: usr/local/www/load_balancer_relay_action_edit.php:134 +#, php-format +msgid "modified '%s' action:" +msgstr "ao '%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 Ao 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 sincronizao CARP." + +#: usr/local/www/xmlrpc.php:67 usr/local/www/xmlrpc.php:63 +msgid "Authentication failed" +msgstr "Autenticao 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 mtodo deve ser chamado com 2 parmetros: uma string contendo a senha do sistema local seguida pelo cdigo 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 mtodo deve ser chamado com 2 parmetros: 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 mtodo deve ser chamado com 2 parmetros: 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 mtodo deve ser chamado com 2 parmetros: uma string contendo a senha do sistema local e uma lista para mesclar com a configurao do sistema. Essa funo 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 (sees %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 sees de pacotes. Esse mtodo deve ser chamado com 2 parmetros: uma string contendo a senha do sistema local seguida por uma lista para mesclar com a configurao do sistema. Essa funo 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 mtodo deve ser chamado com 2 parmetros: uma string contendo a senha do sistema local seguida por uma lista para mesclar com a configurao do sistema. Essa funo 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 mtodo deve ser chamado com 1 parmetro: uma string contendo a senha do sistema local. Essa funo 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 bsico 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 bsico de XMLRPC para check_firmware_version. Essa funo retornar o resultado de check_firmware_version aps 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 bsico 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 "descrio" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:111 +msgid "action" +msgstr "ao" + +#: 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 aes disponveis" + +#: usr/local/www/load_balancer_relay_protocol_edit.php:237 +#: usr/local/www/load_balancer_relay_protocol_edit.php:235 +msgid "Available Actions" +msgstr "Aes Disponveis" + +#: 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 Aes" + +#: 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 "Configuraes 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 Repositrio 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 invs 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 "Endereos 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 atravs do captive portal sem lev-los a pgina do portal. Isto pode ser usado para um servidor web servindo imagens para a pgina do captive portal ou um servidor DNS em outra rede, por exemplo. Especificando endereos de origem, pode ser usado para sempre permitir acesso de um cliente atrs 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 vlido 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 atravs do portal captive (sem autenticao)" + +#: 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 no autenticados) atrs 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 mudanas em chaves pblicas e privadas. Clique em cancelar se no 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 invlido" + +#: 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 "No 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 " necessria 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 sincronizao" + +#: 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 sincronizao" + +#: 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 "Sincronizao de usurio" + +#: 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 "So necessrios 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 no so 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 "no so 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 no parece uma chave RSA pblica." + +#: 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 no 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 no 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 invlidos" + +#: 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 do permisso de acesso atravs do portal captive para o tempo configurado. Uma vez que um voucher for ativado, seu relrio 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 sesso 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 pblica 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 pblica (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 no precisa estar disponvel 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 so gerados com um especfico conjunto de caracteres. Ele deve conter caracteres passveis de impresso (nmeros, letras maisculas e minsculas) que so difceis 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 configurao, usado para marcar se um voucher foi usado. A cadeia de bits para 65535 vouchers requer 8 KB de espao 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 vlido 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 "Nmero mgico" + +#: 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 "Nmero mgico armazenado em cada voucher. Verificado durante a verificao do voucher. O tamanho depende de quantos bits so deixados pelos bits Lista+Ticket+Checksum. Se todos os bits so usados, nenhum nmero mgico 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 Invlido" + +#: 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 invlidos na pgina 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 pgina 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 "Sincronizao 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 "Endereo 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 no 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 sincronizao 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 usurio de sincronizao 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 usurio 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 sincronizao 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 parmetro de Voucher (alm de gerenciar a lista de Listas) nessa pgina ir tornar inteis os vouchers existentes se eles foram gerados com configuraes 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 opo Voucher Database Synchronization no grava qualquer outro valor das demais opes. Eles sero 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 "Nmero 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 "Nmero de lista deve ser numrico 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 mnimo 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 so marcados como no 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 usurio tem permisso de acesso. O relgio inicia a contagem a primeira vez que um voucher usado para autenticao" + +#: 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 nmero 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 nmero para uma Lista existente ir marcar todos os vouchers como no 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 identificao 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 conexes 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 conexes da tabela ir remover todas as entradas correspondentes das tabelas. Isto significa que todas as conexes em aberto sero fechadas e sero reestabelecidas. Isto pode ser necessrio aps mudanas considerveis ao firewall e/ou regras de NAT, especialmente se h mapeamentos do protocolo IP (e.g. PPTP ou IPv6) com conexes 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 conexes 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 sesso do browser pode parecer expirada aps clicar em "Reiniciar". Simplemente atualize a pgina 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 associaes de origem/destino. Isto significa que as associaes persistentes sero 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 no limpa estados de conexes 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 pgina 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 "Resoluo 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 resoluo de nomes, a consulta deve demorar um pouco. Voc pode parar a qualquer momento, clicando no boto 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 "Nmero mximo 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 "Nmero mximo 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 concludo. Voc pode pressionar o boto 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 "Sada de traceroute:" + +#: usr/local/www/diag_traceroute.php:137 +msgid "Multi-wan is not supported from this utility currently." +msgstr "Este utilitrio no 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 "Grfico de trfego" + +#: 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 no 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 sada" + +#: 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 verso mais recente ou outro browser que suporte SVG requerido para visualizar o grfico" + +#: 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 alteraes no estaro disponveis no prximo 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 "No foi possvel localizar interfaces CARP definidas." + +#: usr/local/www/carp_status.php:196 +msgid "You can configure CARP settings" +msgstr "Voc pode definir as configuraes CARP" + +#: usr/local/www/carp_status.php:202 usr/local/www/carp_status.php:195 +msgid "pfSync nodes" +msgstr "Ns 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 "Lanamento" + +#: 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 "Mscara 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 "Mscara 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/sada" + +#: 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/sada (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/sada (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/sada " + +#: usr/local/www/status_interfaces.php:329 +#: usr/local/www/status_interfaces.php:426 +#: usr/local/www/status_interfaces.php:429 +msgid "Collisions" +msgstr "Colises" + +#: 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 "Interrupes/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 conexo novamente se algum pacote a engatilhar. Para fundamentar esse ponto: desconectar manualmente %sno%s ir prevenir discagem sob demanda de fazer conexes externas! No 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 funo no suportada. Use-a sob seu prprio 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. No 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 "Concesses 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 "Concesses 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 "Grficos 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 "Padro de fbrica" + +#: 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 pgina" + +#: 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 "Frum Usurio" + +#: 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 "Documentao" + +#: 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 pgina." + +#: 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 pgina." + +#: 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 pgina." + +#: 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 esto sendo reinstalados em background atualmente.

    No faa alteraes 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 trfego no 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 "Estatsticas" + +#: 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 "Grficos 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 "Perodo 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 "Perodo 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 "Trfego" + +#: 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: Mudana de cor e/ou estilo podem no ter efeito at a prxima atualizao" + +#: 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 "Grficos:" + +#: 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 "Perodo:" + +#: 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 "Incio:" + +#: 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 no existe, usando padres!" + +#: 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, no temos dados para gerar grfico 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 grfico com o cdigo 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 grfico 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 gerao de grfico RRD." + +#: usr/local/www/status_rrd_graph_settings.php:178 +#: usr/local/www/status_rrd_graph_settings.php:179 +msgid "Default category" +msgstr "Categoria padro" + +#: 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 padro." + +#: usr/local/www/status_rrd_graph_settings.php:193 +#: usr/local/www/status_rrd_graph_settings.php:194 +msgid "Default style" +msgstr "Estilo padro" + +#: 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 padro." + +#: usr/local/www/status_rrd_graph_settings.php:208 +#: usr/local/www/status_rrd_graph_settings.php:209 +msgid "Default period" +msgstr "Perodo padro" + +#: 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 perodo padro." + +#: 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 grficos RRD? Isto ir apagar todos os dados do grfico." + +#: 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 "Grficos no tero permisso de serem criados dentro de um intervalo de 1 minuto, por favor, leve isso em conta aps 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 "No disponvel." + +#: 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 "Sincronizao de relgio 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 "Servio 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 "Servio 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 "Servio 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 Servio" + +#: usr/local/www/status_services.php:398 +#: usr/local/www/widgets/widgets/services_status.widget.php:228 +msgid "Stop Service" +msgstr "Interromper Servio" + +#: usr/local/www/status_services.php:407 +#: usr/local/www/widgets/widgets/services_status.widget.php:237 +msgid "Start Service" +msgstr "Iniciar Servio" + +#: 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 servio 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 sesses 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 Servio" + +#: 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 contm caracteres invlidos." + +#: 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 dinmico" + +#: 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/domnio 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 tnel" + +#: 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 servio DNS Dinmico voc pode somente usar um nome de host, no um endereo 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 opo somente se voc precisar de um registro MX especial. Nem todos os servios 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 usurio necessrio 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" +" Configuraes Gerais%s ou permitir que a lista de servidor DNS seja sobrescrita\n" +" pelo DHCP/PPP na WAN para atualizaes DNS dinmicas 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 sero 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 permisso. 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 sada que responsvel por comunicar-se com fontes de dado multicast disponveis. 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) so interfaces de distribuio 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 sero ignorados. Essa configurao opcional e, por padro, 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 atualizao do DNS contm caracteres invlidos." + +#: 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 atualizao 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 atualizao do DNS contm caracteres invlidos." + +#: 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 atualizao 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 configurao 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 " Usurio" + +#: 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 invs 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: Configuraes Gerais%s ou pemitir que a lista de servidores DNS seja sobrescrita pelo DHCP/PPP na WAN para atualizaes DNS dinmicas 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 mltiplos vouchers separados por espao ou uma nova linha. O tempo remanescente, se vlido, 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 "Concesses 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 concesso" + +#: 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 endereo 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 esttico para esse endereo 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 endereo 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 concesso 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 concesses ativas e estticas 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 concesses 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 concesses 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 "Advertncia, latncia" + +#: 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 verificao %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: Grfico 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 no pode ver o grfico, 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 "Endereo" + +#: 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 "Conexes 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 "Endereo 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 "Endereo 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 conexo 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 "Estatsticas da instncia 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 "Endereo 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 "Estatsticas de instncias 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 configurao 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 instncia 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 nmero de porta do webConfigurator vlido" + +#: 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 "Nmero mximo 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 no 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 nmero de porta vlido" + +#: 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 "Avanado: 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 "Notificaes" + +#: 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 nmero de porta personalizado para o webConfigurator acima se desejar sobrescrever o padro (80 para HTTP, 433 para HTTPS). Mudana tero efeito imediatamente aps salvar." + +#: usr/local/www/system_advanced_admin.php:351 +#: usr/local/www/system_advanced_admin.php:372 +msgid "Max Processes" +msgstr "Nmero mximo 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 "Nmero mximo de processos para o WebConfigurator. O padro 2. Aumentando o nmero, voc aumentara o nmero de usurios simultneos que podero 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 segurana exigem que este seja desativado. Marque esta caixa para desativar autocomplete no formulrio de login para que os navegadores no solicitar para salvar as credenciais (NOTA: Alguns navegadores no respeitam essa opo)" + +#: 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 opo estiver marcada, no 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 usurio. Maque essa opo para desabilitar essa regra automaticamente adicionada, para que o acesso ao webConfigurator seja controlado pelas regras de firewall definidas pelo usurio (tenha certeza de que possui uma regra de firewall que lhe d permisso de acesso, ou voc no 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 opo "Configure o endereo IP de interface(s)" no menu do console reinicia essa configurao da mesma forma." + +#: usr/local/www/system_advanced_admin.php:419 +#: usr/local/www/system_advanced_admin.php:440 +msgid "DNS Rebind Check" +msgstr "Verificao 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 Verificao 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 opo para desabilitar essa proteo 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 verificaes de ataques de DNS Bindings. Separe os nomes dos hosts com espaos." + +#: usr/local/www/system_advanced_admin.php:442 +#: usr/local/www/system_advanced_admin.php:463 +msgid "Browser HTTP_REFERER enforcement" +msgstr "Execuo de HTTP_REFERER de navegao" + +#: usr/local/www/system_advanced_admin.php:445 +#: usr/local/www/system_advanced_admin.php:466 +msgid "Disable HTTP_REFERER enforcement check" +msgstr "Desabilitar verificao de execuo 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 no estiver marcado, acesso ao webConfigurator est protegido contra tentativas de redirecionamento HTTP_REFERER. Marque essa caixa para desabilitar essa proteo se achar que isso interfere com o acesso ao webConfigurator em alguns casos especficos tais como quando usando scripts de terceiros para interagir com o pfSense. Mais informaes sobre HTTP_REFERER esto disponveis 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 "Mtodo de Autenticao" + +#: 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 "usurio" + +#: 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 padro de 22." + +#: usr/local/www/system_advanced_admin.php:489 +#: usr/local/www/system_advanced_admin.php:526 +msgid "Serial Communcations" +msgstr "Comunicaes 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 padro, o outra velocidade selecionvel 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 sada do console e mensagens para a porta serial. VOc pode permanecer acessando o menu console de um monitor carto/teclado. Um cabo serial null modem ou adaptador so 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 "Opes 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 "Alteraes nesta opo tero efeito aps 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 "configurao 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 "configurao 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 "configurao 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 mximo 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 mximo 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 expirao 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 "Avanado: 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 otimizao 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 latncia alta, como os links satlites. Expira conexes ociosas mais tarde que o padro" + +#: 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 conexes ociosas mais rpido. Faz uso mais eficiente da CPU e da memria mas pode derrubar conexes legtimas" + +#: 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 conexo legtima s custas do uso de memria e utilizao 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 Avanado" + +#: 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 invlidos ao invs 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 permisso para comunicaes 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 no descarte tais pacotes mas, ao invs 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 "Gerao de id Randmico 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 cabealho 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 identificao do IP de pacotes com valores randmicos para compensar por sistemas operacionais que usam valores previsveis. Essa opo somente se aplica a pacotes que no esto fragmentados aps 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 "Opes de Otimizao 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-latncia" + +#: 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 otimizao 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 tambm 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 no 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 sada" + +#: 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 opo de PF scrubbing que pode, s vezes, interferir com o NFS e trfego 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 Mximos 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 "Nmero mximo de conexes 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 padro. No seu sistema o tamanho padro :" + +#: 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 "Mximo 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 "Nmero mximo 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 padro." + +#: 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 padro :" + +#: 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 esttica" + +#: 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 trfego 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 opo somente se aplica se voc definiu uma ou mais rotas estticas. Se estiver habilitada, o trfego que entra e sai da mesma interface no ser verificado pelo firewall. Isso pode ser desejvel em algumas situaes onde mltiplas redes esto 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 trfego saia pela mesmas interface pode onde ele chegou, portanto, reply-to automaticamente adicionado por padro. Quando utilizando bridge, voc precisa desabilitar este comportamento se o IP do gateway da WAN diferente do IP do gateway dos hosts atrs 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 "Traduo de Endereo 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 criao automtica de regras de redirecionamento NAT adicionais para acesso a encaminhamento de portas para seu endereo IP externo de dentro de suas redes internas. Nota: Reflection para entradas de encaminhamento de porta no 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 expirao 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 expirao 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 criao automtica de mapeamentos NAT 1:1 adicionais para acessar os mapeamentos 1:1 de seus endereos IP externos de dentro de sua rede interna. Nota: Reflection para 1:1 NAT pode no funcionar totalmente em certos cenrios 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 sada NAT criada automaticamente que assistem regras de entrada para direcionar o trgefo 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 Reflexo 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 "Avanado: 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. Padro 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 "Usurio 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 usurio 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 conexes 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 "Conexes sucessivas sero redirecionadas para servidores usando round-robin com as conexes da mesma fonte sendo enviada para o mesmo servidor web. Essa 'conexo sticky' existir contanto que existam estados que se referenciam a ela. Uma vez que os estados expirarem, o mesmo ocorrer com a conexo sticky. Mais conexes desse host sero redirecionadas para o prximo 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 alterao de rota padro" + +#: 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 padro reside falhar, troca o default gateway para outro disponvel." + +#: 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 utilitrio powerd monitora o estado do sistema e configura vrias opes de controle de energia de acordo. Ele oferece 3 modos (mximo, mnimo e adaptvel) que podem ser selecionados individualmente quando estiver usando energia AC ou baterias. Os modos mximo, mnimo e adaptvel podem vir abreviados como max, min, adp. O modo Mximo escolhe os valores de performance mais altos. O modo Mnimo seleciona os valores de performance mais baixos para obter o mximo de economia de energia. O modo Adaptvel tenta balancear por meio de degradao da performance quando o sistema parece estar ocioso e aumenta a performance quando o sistema est ocupado. Ele oferece um bom balano 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 "Acelerao 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 funes de criptografia em sistemas que possuem o chip. No habilite essa opo se voc tem um carto de acelerao de criptografia Hifn, j que ele ter prioridade e o carto Hifn no ser usado. Acelerao pode ser automtica 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 no tiver um chip glxsb no seu sistema, essa opo no ter efeito. Para descarregar o mdulo, desmarque essa opo e ento 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 "Segurana 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 "Associaes de Segurana" + +#: 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 padro, se vrias SAs correspondem, o mais nova preferida se ela for pelo menos 30 segundos velha. Selecione essa opo para sempre preferir SAs velhas ao invs 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 "Depurao 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 depurao" + +#: 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 "Lanamentos de racoon no modo de depurao para gerao de logs mais detalhado para auxiliar na soluo 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 configurao 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 "Mximo 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 trfego 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 padro 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 padro, agendadores limpam os estados de conexes quando atingirem o tempo de expirao. Esta opo sobrescreve o comportamento anterior, no 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 padro o monitoramento de processos ir limpar a tabela de estados quando um gateway cair. Esta opes sobrescreve o comportamento anterior para conexes 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 "Configuraes 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 rgido" + +#: 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 rgido em modo de espera quando o total de tempo selecionado aps 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 "No configure isso para cartes 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 endereo 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 "Avanado: Rede" + +#: usr/local/www/system_advanced_network.php:205 +#: usr/local/www/system_advanced_network.php:204 +msgid "IPv6 Options" +msgstr "Opes 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 sero bloqueados a menos que essa opo 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, no esquea 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 tcnica que permite que o sistema periodicamente eleja dispositivos de rede para novos dados ao invs de confiar em interrupes. Isso previne que seu webConfigurator, SSH, etc, de serem inacessveis devido a transbordo de interrupes quando extremamente carregados. Geralmente isso no recomendado. Nem todas as NICs suportam polling; veja a pgina %s para uma lista de cartes 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 opo o hardware checksum offloading ser desabilitado. Checksum offloading est quebrado em algum hardware, particularmente alguns cartes Realtek. Raramente, drivers podem ter problemas com checksum offloading e alguns NICs especficos." + +#: 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 opo, 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 especficos." + +#: 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 opo 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 especficos." + +#: 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 opo ir suprimir mensagens de log ARP quando mltiplas interfaces residirem no mesmo domnio 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 "Avanado: Notificaes" + +#: 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 (padro 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 Notificao" + +#: 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 notificaes do Growl (padro: %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 endereo IP para o qual voc gostaria de enviar notificaes 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 notificao 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 endereo FQDN ou IP do servidor de E-Mail SMTP para o qual as notificaes sero 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 (submisso) 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 "Endereo 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 endereo 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 "Endereo de E-mail de Notificao" + +#: 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 endereo de e-mail para o qual voc gostaria que notificaes 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 usurio de autenticao de E-Mail de Notificao (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 usurio do endereo de e-mail para autenticao 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 autorizao de E-Mail de Notificao" + +#: 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 endereo de e-mail para autenticao SMTP." + +#: usr/local/www/system_advanced_sysctl.php:125 +msgid "Advanced: System Tunables" +msgstr "Avanado: 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 configuraes 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 Autenticao" + +#: 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 "Verso 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 "Nvel 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 nomeao de usurio" + +#: 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 nomeao 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 "Continer de autenticao" + +#: 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 usurio 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 autenticao" + +#: 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 contm caracteres invlidos." + +#: 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 autenticao 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 usurio/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. Ao 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 "Configuraes 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 endereo 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 opes utilizada se a opes '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 contrrio 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 "Nvel:" + +#: 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 "Contineres de autenticao" + +#: 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 "Contineres:" + +#: 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 vrgula. Isso ser anexado base de busca dn acima ou voc pode especificar o caminho completo do continer." + +#: 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 Vnculo" + +#: 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 vnculos annimos 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 usurio:" + +#: 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 nomeao de usurio" + +#: 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 nomeao 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 "Configuraes 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 "Servios 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 autenticao 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 intermediria" + +#: 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) excludas 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 no so 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 "Cdigo de Pas 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 Provncia 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 "Organizao 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 "Endereo 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 "Revogao 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 "Mtodo" + +#: 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 Revogao 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 "Cdigo do pas" + +#: 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 Provncia" + +#: 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 "Organizao" + +#: 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 referncia 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 confiveis 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 Requisio 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 mdulo de certificado no coincide com o mdulo de solicitao 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 "Certificao 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 "Requisio 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 "Requisio 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 no estiver em uso." + +#: usr/local/www/system_crlmanager.php:46 +msgid "Certificate Revocation List Manager" +msgstr "Gerenciador de Lista de Revogao de Certificado" + +#: usr/local/www/system_crlmanager.php:49 +msgid "Create an internal Certificate Revocation List" +msgstr "Crie uma Lista de Revogao de Certificado interna" + +#: usr/local/www/system_crlmanager.php:50 +msgid "Import an existing Certificate Revocation List" +msgstr "Importe uma Lista de Revogao de Certificado existente" + +#: usr/local/www/system_crlmanager.php:86 +msgid "Invalid CRL reference." +msgstr "Referncia a Lista de Revogao de Certificado invlida." + +#: usr/local/www/system_crlmanager.php:92 +#, php-format +msgid "Certificate Revocation List %s is in use and cannot be deleted" +msgstr "Lista de Revogao de Certificado %s esta sendo usada e no pode ser apagada" + +#: usr/local/www/system_crlmanager.php:98 +#, php-format +msgid "Certificate Revocation List %s successfully deleted" +msgstr "Lista de Revogao 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 Revogao 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 incompatvel entre o Certificado e Lista de Revogao de Certificado. Impossvel revogar." + +#: usr/local/www/system_crlmanager.php:143 +msgid "Cannot revoke certificates for an imported/external CRL." +msgstr "No possvel revogar certificados para uma Lista de Revogao 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 Revogao 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 Revogao 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 Revogao 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 Revogao 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 Revogao 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 Revogao 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 Revogao de Certificado Interna" + +#: usr/local/www/system_crlmanager.php:370 +#: usr/local/www/system_crlmanager.php:371 +msgid "Default: 9999" +msgstr "Padro: 9999" + +#: usr/local/www/system_crlmanager.php:378 +#: usr/local/www/system_crlmanager.php:379 +msgid "Default: 0" +msgstr "Padro: 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 Revogao 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 "Razo de Revogao" + +#: 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 Revogao 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 Revogao 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 "Razo" + +#: 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 Revogao 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 revogao 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 Revogao 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 Revogao 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 Revogao 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 Revogao 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 Revogao 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 configurao de gateway foi modificada.%sVoc deve aplicar as mudanas 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 polticas. Sem regras direcionando o trfego para os Grupos de Gateway, eles no sero 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 "Latncia 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 Latncia 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 vlido 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 no deve conter caracteres invlidos." + +#: 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 no 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 sero feitos. Mltiplos links de mesma prioridade iro balancear conexes at que todos os links da prioridade tiverem exaurido. Se todos os links em um nvel de prioridade estiverem exaurido, usaremos o(s) prximo(s) link(s) disponveis no prximo nvel 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 "Nvel 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 excluso de um membro" + +#: usr/local/www/system_gateways.php:134 +msgid "The gateway configuration has been changed." +msgstr "A configurao 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 endereo IP de gateway vlido 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 no pode usar um endereo 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 endereo %1$ s no 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 no pode usar um endereo 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 dinmico no pode ser especificado para as interfaces com uma configurao IPv4 esttico." + +#: 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 dinmico no pode ser especificado para as interfaces com uma configurao IPv6 esttico." + +#: 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 endereo IP monitor vlido 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 "Mudana de nome de gateway no 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 endereo 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 endereo 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 latncia inferior precisa ser um valor numrico." + +#: 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 latncia superior precisa ser um valor numrico." + +#: 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 numrico." + +#: 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 numrico." + +#: 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 latncia 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 "Endereo 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 Padro" + +#: 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 padro" + +#: 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 endereo alternativo aqui para ser usado para monitorar o link. Esse usado para os grficos RRD de qualidade assim como as entradas do balanceador de carga. Use isso se o gateway no responder requisies 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 latncia" + +#: 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 latncia em milisegundos. O padro 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 %. Padro 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. Padro 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 "Frequncia 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 freqncia com que uma sonda de icmp sero enviadas em segundos. Padro 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 "Privilgio" + +#: usr/local/www/system_groupmanager.php:122 +msgid "The group name contains invalid characters." +msgstr "O nome do grupo contm caracteres invlidos." + +#: 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 "Descrio do Grupo, para sua prpria referncia 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 "Adeses de Grupos" + +#: usr/local/www/system_groupmanager.php:291 +#: usr/local/www/system_groupmanager.php:294 +msgid "Not Members" +msgstr "No 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 mltiplos items" + +#: usr/local/www/system_groupmanager.php:342 +#: usr/local/www/system_groupmanager.php:345 +msgid "Assigned Privileges" +msgstr "Privilgios atribudos" + +#: 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 privilgio?" + +#: 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\tPermisses de grupo podem ser designadas, as quais so herdadas de usurios que so 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 no podem ser apagadas." + +#: usr/local/www/system_groupmanager_addprivs.php:56 +msgid "Add privileges" +msgstr "Adicionar privilgios" + +#: usr/local/www/system_groupmanager_addprivs.php:79 +#: usr/local/www/system_usermanager_addprivs.php:84 +msgid "Selected priveleges" +msgstr "Privilgios 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 "Privilgios 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 privilgio da lista acima para uma descrio" + +#: 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 "associao removida." + +#: usr/local/www/system_usermanager.php:202 +msgid "The username is longer than 16 characters." +msgstr "O nome de usurio contm mais de 16 caractres." + +#: usr/local/www/system_usermanager.php:226 +msgid "That username is reserved by the system." +msgstr "Esse nome de usurio 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 expirao invlido; 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 invlida" + +#: 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 "(confirmao)" + +#: 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 usurio, para sua prpria referncia somente" + +#: usr/local/www/system_usermanager.php:501 +#: usr/local/www/system_usermanager.php:499 +msgid "Expiration date" +msgstr "Data de expirao" + +#: 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 no deve expirar, do contrrio, informe a data de expirao 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 "No 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 "Privilgios 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 usurio" + +#: 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 associao de certificado?" + +#: usr/local/www/system_usermanager.php:660 +#: usr/local/www/system_usermanager.php:658 +msgid "(Certificate will not be deleted)" +msgstr "(Certificado no 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 usurio." + +#: 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 Usurio?" + +#: 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 "Usurios adicionais podem ser adicionados aqui. Permisses de usurio para acessar o webConfigurator podem ser atribudos 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 no podem ser excludas." + +#: 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 so usadas tambm 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 Usurio" + +#: 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 no pode mudar a senha para um usurio que no 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 "Configuraes de gerenciamento de usurio" + +#: usr/local/www/system_usermanager_settings.php:61 +msgid "Session timeout must be an integer value." +msgstr "Expirao de Sesso 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 no 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 "Expirao de Sesso" + +#: 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 sesses de gerenciamento ociosas. O padro 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 sesses. NOTA: Isso um risco de segurana!" + +#: 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 "No pde conectar ao servidor LDAP. Por favor, verifique sua configurao 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 continers pelos quais Autenticar:" + +#: usr/local/www/system_usermanager_settings_test.php:76 +#, php-format +msgid "Could not find settings for %s%s" +msgstr "No pde encontrar configuraes para %s%s" + +#: usr/local/www/system_usermanager_settings_test.php:78 +msgid "Testing pfSense LDAP settings... One moment please..." +msgstr "Testanto configuraes 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, no pudemos encontrar um cdigo 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 endereo de gateway remoto vlido 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 endereo 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 domnio 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 usurio e um nome de domnio 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 domnio dinmico 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 endereo IP vlido 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 domnio vlidos 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 vlido 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 usurio FQDN vlido 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 endereo de DNS Dinmico vlido 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 endereo 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 domnio 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 usurio e um nome de domnio 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 endereo de IP vlido 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 domnio vlido 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 vlido 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 usurio FQDN vlido 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 numrico 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 numrico 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 "Informao 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 opo 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 famlia 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 endereo IP pblico 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 (Autenticao)" + +#: 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 "Mtodo de Autenticao" + +#: 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 configurao 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 Negociao" + +#: 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 flexvel, mas no 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 configurao de \"grupo\" em algumas implementaes 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 "Gerao de poltica" + +#: 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 mveis), isto controla como as polticas so 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 "Verificao 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 ao de tamanho da tempo de vida, tamanho da chave, e PFS da seleo da fase 2 no lado que responde, e a ao de verificao 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 "Algortmo 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 "Forar" + +#: 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 opo para habilitar o uso de NAT-T (i.e. o encapsulamento de ESP em pacotes UDP) se necessrio, o que pode ajudar com clientes que esto atrs 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 "Deteco 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 requisies 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 "Nmero 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 vlido 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 "Algorptimos 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 vlido 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 endereo IP vlido 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 vlido 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 endereo IP vlido 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 mveis." + +#: 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 combinao 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 algortimo 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 opo 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 autenticao" + +#: 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 "Algortmos 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 carto de acelerao de criptografia de hardware. Blowfish normalmente o mais rpido 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 "Algortmos 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 opes de clientes mveis" + +#: 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 endereo 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 endereo de incio para a subrede de endereos 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 "Mscara 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 "Nmero de usurios 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/instalaes." + +#: 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 autenticao." + +#: 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 primrio e secundrio atribudos 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 usurios sero autenticados usando o servidor RADIUS especificado abaixo. A base de dados de usurios local no 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 endereo 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 "Endereos 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 "No se esquea de adicionar uma regra de firewall para permitir trfego 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 usurios 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 "Advertncia: isso finalizar todas as sesses 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 usurio, 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 usurio e senha so requeridos para o proxy com autenticao." + +#: 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' no parece ser vlido" + +#: 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 Autenticao TLS' no parece ser vlido" + +#: 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 "Substituio Especfica 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 opo 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 opo se voc desejar especificar uma porta especfica para bind. Deixe em branco ou 0 para obter um valor randmico 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 endereo" + +#: 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 endereo" + +#: 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 "Opes extras de autenticao 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 "bsico" + +#: 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 "Resoluo 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 no 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 "Configuraes 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 "Autenticao 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 autenticao 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 autenticao 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 "Configuraes de tnel" + +#: 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 tneis" + +#: 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 comunicaes privadas entre esse cliente e o servidor expresso usando CIDR (e.g. 10.0.8.0/24). O primeiro endereo assumido como o do endereo do servidor e, o segundo, o endereo de rede que ser atribudo 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 atravs do tnel 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 sada" + +#: 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 sada mximo para esse tnel. Deixe vazio para no 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 tnel usando o algortmo 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 Servio" + +#: 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 cabealho IP TOS para que os pacotes do tnel 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 "Configurao Avanada" + +#: 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 opes adicionais que voc deseja adicionar configurao do cliente OpenVPN aqui, separado por ponto-e-vrgula" + +#: 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 "Substituio Especfica 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 "Substituio Especfica 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 endereo IP vlido" + +#: 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 Distribuio de Dados do NetBIOS WINS #1' deve conter um endereo IP vlido" + +#: usr/local/www/vpn_openvpn_csc.php:325 usr/local/www/vpn_openvpn_csc.php:324 +msgid "Disable this override" +msgstr "Desabilitar essa substituio" + +#: 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 opo para desabilitar uma substituio especfica 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 conexo" + +#: 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 conexo 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 "No use essa opo para desabilitar permanentemente um cliente devido a uma chave ou senha comprometida. An invs disso, use uma CRL (lista de revogao 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 trfego gerado por clientes atravs desse tnel" + +#: 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 "Configuraes de Cliente" + +#: usr/local/www/vpn_openvpn_csc.php:415 usr/local/www/vpn_openvpn_csc.php:414 +msgid "Server Definitions" +msgstr "Definies 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 configuraes 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 "Opes 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 opo no estiver configurada, todas as opes de NetBIOS sobre TCP/IP (incluindo WINS) sero 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 "Opes possveis: b-node (faz broadcasts), p-node (consulta nomes ponto-a-ponto para um servidor WINS), m-node (faz broadcast e ento consulta servidor de nome), e h-node (consulta servidor de nome, ento 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 servio de nome extendido para \tNetBIOS sobre TCP/IP. O ID do escopo do NetBIOS isola o trfego de NetBIOS em uma nica rede para somente aqueles ns 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 opo adicional que desejar para essa substituio especfica de cliente, separado (csc) por um ponto-e-vrgula" + +#: 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 "Substituies especficas 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 Autenticao se o modo do servidor requerer Autenticao de Usurio." + +#: 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 'Conexes concorrentes' deve ser numrico." + +#: 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 tneis" + +#: 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 opo 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 autenticao" + +#: 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 Revogao 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 Parmetros 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, no aceitar certificados com profundidade abaixo desta. til para negar certificados emitidos por CAs intermadirios 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 "Correspondncia de Usurio 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 autenticao de usurios, reforce uma correspondncia entre um nome comum do certificado do cliente e um dado nome de usurio 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 comunicaes privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. 10.0.8.0/24). O primeiro endereo de rede ser atribudo \t interface virtual do servidor. Os endereos de rede remanescentes podem opcionalmente ser atribudos a clientes em conexo. (veja Pool de Endereo)" + +#: 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 comunicaes privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. fe80::/64). O primeiro endereo de rede ser atribudo \tinterface virtual do servidor. Os endereos de rede remanescentes podem opcionalmente ser atribudos a clientes em conexo. (veja Pool de Endereo)" + +#: 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 acessvel do endpoint remoto. Expressado como um intervalo CIDR. Voc deve deixar isso em branco se no desejar adicionar uma rota rede local atravs desse tnel na mquina 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 acessvel do endpoint remoto. Expressado como um intervalo CIDR. Voc deve deixar isso em branco se no desejar adicionar uma rota rede local atravs desse tnel na mquina 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 atravs do tnel, 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 no 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 "Conexes 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 nmero mximo de clientes que tem permisso 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 "Comunicao 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 comunicao 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 "Conexes 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 mltiplas conexes concorrentes para clientes usando um Nome Comum.
    NOTA: Isto geralmente no recomendado, mas pode ser necessrio em alguns cenrios." + +#: 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 Dinmico" + +#: 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 conexes se seus endereos 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 endereos" + +#: 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 endereo IP adaptador virtual para clientes (veja Rede de Tneis)" + +#: 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 opo no estiver configurada, todas as opes de NetBIOS sobre TCP/IP (incluindo WINS) sero 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 opes adicionais que desejar s configuraes do servidor OpenVPN aqui, separados por ponto-e-vrgula" + +#: 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 endereo do servidor especificado igual a um endereo 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 usurio %s" + +#: usr/local/www/vpn_pppoe_edit.php:143 +#, php-format +msgid "Incorrect ip address specified for username %s" +msgstr "Endereo IP especificado incorreto para o usurio %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 "Configurao 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. usurios 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 so 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 endereo 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 endereos de incio para a subrede do endereo 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 sero dados a todos os clientes PPPoE, seno, DNS de LAN e um DNS de WAN iro 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 primrio falhar, todas as requisies sero enviadas atravs 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 "Endereo 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 "Endereo 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 "Perodo de atualizao 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 Endereos IP atravs 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 Primrio" + +#: 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 endereo IP, porta de autenticao 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 padro 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 primrio 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 Secundrio" + +#: 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 endereo IP, porta de autenticao 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 secundrio 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 "Usurio (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 "no esquea de adicionar uma regra de firewall para permitir trfego 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 nmero de conexes." + +#: 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 nmero de conexes 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 no tem interfaces suficientes para o nmero de conexes 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 "Endereo deve ser um IP vlido 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 especificao 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 customizveis so 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 no 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 no 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 no 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 no 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 nmero 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 nmero de conexes 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 conexo para upload no vlida." + +#: 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 conexo para download no vlida." + +#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252 +msgid "You cannot specify bandwidth less than 1!" +msgstr "Voc no 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 "No so 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 no vlida." + +#: 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 no pode definir a largura de banda para upload VoIP numa conexo WAN maior que 80% da conexo." + +#: 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 no pode definir a largura de banda do download VoIP numa conexo maior que 80% da conexo" + +#: 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 "Endereos WoL no 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 traduo 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 rotevel 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 endereos IP estticos" + +#: 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 vlido 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 endereo IPv6 vlido 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 endereo IPv6 vlido deve ser especificado para os servidores DNS primrio/secundrio." + +#: 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 endereo IPv6 vlido deve ser especificado pelos servidores NTP primrio/secundrio." + +#: 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 endereo IPv6 vlido 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 endereo IPv6 vlido 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 no pode sobrepor o endereo 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 operao para o Daemon anncio de roteador. Use \"Somente Roteador\" apenas para anunciar o router, \"no gerenciados\" para Advertising Router com Autoconfig Stateless, \"Managed\" para DHCPv6 somente com anncios 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 Delegao 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 Delegao 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 vlido 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, endereo 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 esttico" + +#: 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 endereo 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 endereo de IPv6 vlido 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 "Configurao 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 endereo de IPv6 no sero 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 opo estiver marcada, o DHCPv6 relay anexar o circuit ID (nmero de interface %s) e o agent ID requisio 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 endereo IPv6 do servidor para o qual as requisies DHCPv6 so retransmitidas. Voc pode informar mltiplos endereos de servidores IPv6 separados por vrgulas. Selecione \"Requisies 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 "Concesses 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 instncia do Captiveportal" + +#: usr/local/www/services_captiveportal_zones.php:88 +#: usr/local/www/services_captiveportal_zones.php:89 +msgid "edit captiveportal instance" +msgstr "editar instncia 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 instncia 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. No pode conter espaos." + +#: 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 "
    No foi possvel 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 "# Conexes" + +#: 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 padro no adicionada porque o gateway dinmico OLSR est habilitado." + +# 87% +#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:124 +msgid "WebCfg - Diagnostics: Logs: Gateways page" +msgstr "WebCfg - Pgina Diagnstico: 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 pgina 'Diagnstico: Logs: Gateway'." + +# 85% +#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:130 +msgid "WebCfg - Diagnostics: Logs: Resolver page" +msgstr "WebCfg - Pgina Diagnstico: 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 pgina 'Diagnstico: Logs: Sistema: Resolver'." + +# 87% +#: etc/inc/priv.defs.inc:130 etc/inc/priv.defs.inc:136 +msgid "WebCfg - Diagnostics: Logs: Wireless page" +msgstr "WebCfg - Pgina Diagnstico: 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 pgina 'Diagnstico: 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 - Pgina 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 pgina '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 "Ingls" + +#: 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 "Portugus (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 "Servio 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 esttica" + +#: 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 opo para desabilitar esta rota esttica 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 informaes do pacote, verifique o frum" + +#: 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 informaes 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 excluda 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 configuraes do DNS Resolver foram alteradas. Voc precisa aplicar as configuraes para que elas tenham efeito." + +#: usr/local/www/services_unbound_acls.php:181 +msgid "General Settings" +msgstr "Configurao 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 "Configuraes avanadas" + +#: 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 "Fornea 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 requisies DNS que correspondem aos critrios 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 ao 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 ao tambm 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 ao 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 ao permite acesso recursivo e no 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 "Opes 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 nmero de entradas do log exibidas na interface. Isto no 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 so bloqueados pela regra de bloqueio padro no so \"logadas\" se voc desmarcar esta opo. Opes de log por regras ainda so 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 so exibidas da forma como so geradas pelo filtro de pacotes, sem formatao alguma. Isto ir revelar mais informaes detalhadas, mas mais difcil 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 gravao 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 "Opes 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 "Endereos 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 "Contedo 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 no 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 "Endereo 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 atualizaes" + +#: 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 usurio necessrio 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 usurio e senha, apresente usurio e senha autenticao 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 domnio 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 includo na requisio, 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 atualizao for bem sucedida, deixe em branco para desabilitar a verificao 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 possveis, 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 so removidos antes da comparao." + +#: 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 Forar Atualizao" + +#: usr/local/www/fbegin.inc:102 usr/local/www/fbegin.inc:111 +#: usr/local/www/fbegin.inc:103 +msgid "High Avail. Sync" +msgstr "Sincronizao 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 vlido 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 alteraes..." + +#: 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 alteraes?" + +#: 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 padro de fbrica 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 configuraes de sincronizao de alta disponibilidade " + +#: usr/local/www/load_balancer_setting.php:69 +msgid "Timeout must be a numeric value" +msgstr "Timeout deve ser um valor numrico" + +#: usr/local/www/load_balancer_setting.php:73 +msgid "Interval must be a numeric value" +msgstr "Intervalo deve ser um valor numrico" + +#: usr/local/www/load_balancer_setting.php:78 +msgid "Prefork must be a numeric value" +msgstr "Prefork deve ser um valor numrico" + +#: 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 "Configuraes 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 verificaes. Deixe em branco para usar o valor padro 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 pado 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 "Nmero de processos usados pelo relayd. Deixe em branco para usar o valor padro de 5 processos" + +# 98% +#: usr/local/www/services_dhcp_relay.php:80 +msgid "A valid Destination Server IP address must be specified." +msgstr "Um endereo IP do Servidor de Destino vlido 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 "Usurio 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 "Usurio Mvel" + +#: 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 restries 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 no 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 no 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 no pode usar um endereo 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 configurao do DNS Rescolver foi modificada" + +#: usr/local/www/services_unbound.php:136 +#: usr/local/www/services_unbound_advanced.php:123 +msgid "General settings" +msgstr "Configuraes Gerais" + +# 75% +#: usr/local/www/services_unbound.php:147 +msgid "General DNS Resolver Options" +msgstr "Opes 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 opes." + +#: usr/local/www/services_unbound.php:177 +msgid "Outgoing interfaces" +msgstr "Interfaces de sada" + +#: 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 padro todas as interfaces so 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 opes estiver definida, ento mquinas que especificarem seu hostname quando requisitando um DHCP lease sero registradas no DNS Resolver, assim seus nomes podem ser resolvidos. Voc deve tambm definir o domnio em %sSistema: Configuraes 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 estticos 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 opo estiver definida, ento mapeamentos estticos DHCP sero registrados no DNS Resolver, assim seus nomes pode ser resolvidos. Voc deve tambm definir o domnio em %sSistema: Configuraes Gerais%s para o valor prprio." + +#: 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 servio DHCP (se habilitado) ir automaticamente forneceser o endereo IP da LAN como um servidor DNS para clientes DHCP, assim eles iro usar o DNS Resolver. Se o Forwarding estiver habilitado, o DNS Resolver ir usar o servidor DNS informado em %sSistema: Configuraes Gerais%s ou aqueles obtidos bia DHCP ou PPP on WAN se a opo "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 configurao do DNS Resolver foi alterada" + +#: usr/local/www/services_unbound_advanced.php:134 +msgid "Advanced Resolver Options" +msgstr "Opes Avanadas 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 so recusadas." + +#: usr/local/www/services_unbound_advanced.php:144 +msgid "Hide Version" +msgstr "Esconder Verso" + +#: 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 so 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 so pr-carregados antes de expirarem para ajudar a manter o cache atualizado. Quando habilitada, esta opo pode causar um aumento em torno de 10% no trfego DNS e carga do servidor, itens requisitados frequentemente no iro 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 so obtidas anteriormente no processo de validao quando uma %sDelegation signer%s encontrada. Isto ajuda a reduzir a latncia das requisies, 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 so 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 validao. O cache RRSet ser automaticamente definido para duas vezes este montante. O cahce RRSet contm os dados RR reais. O padro 4 megabytes." + +#: usr/local/www/services_unbound_advanced.php:194 +msgid "Outgoing TCP Buffers" +msgstr "Buffers TCP de Sada" + +#: 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 nmero de buffers TCP de sada a alocar por thread. O valor padro 10. Se 0 selecionado, ento 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 nmero de buffers TCP de entrada a ser alocados por thread. O valor padro 10. Se 0 selecionado, ento 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 "Nmero 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 recomendao da RFC 4096 (que o padro), o qual o valor padro. Se voc tem problemas com remontagem de fragmentos, normalmente visto como timeouts, ento 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 "Nmero 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 nmero de consultas que toda thread ir fornecer simultaneamente. Se mais consultas chegarem, e mais nenhuma puder ser atendida, ento elas sero excludas." + +#: 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 negao de servio por consultas lentas ou altas taxas de consultas. O padro 200 milisegundos." + +#: usr/local/www/services_unbound_advanced.php:256 +msgid "Maximum TTL for RRsets and messages" +msgstr "TTL Mximo 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 mximo para RRsets e mensagens em cache. O padro 86400 segundos (1 dia). Quando o TTL interno expira, o item de cache expirado. Isto pode ser configurado para forar o resolver a consultar dados mais frequentemente e no confiar em valores TTL (muito grandes)." + +#: usr/local/www/services_unbound_advanced.php:263 +msgid "Minimum TTL for RRsets and messages" +msgstr "TTL Mnimo 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 mnimo para RRsets e mensagens no cache. O padro 0 segundos. Se o valor mnimo entra em ao, os dados so cacheados por mais tempo que o dono do domnio pretendia e, assim, menos consultas so feitas para buscar dados. O valor 0 garante que os dados em cache est como o dono do domnio 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 contm o tempo de viagem e informao de suporte EDNS. O padro 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 delegao for considerada imperfeita. O padro 15 minutos." + +#: usr/local/www/services_unbound_advanced.php:296 +msgid "Number of Hosts to cache" +msgstr "Nmero 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 "Nmero de hosts para os quais as informaces so cacheadas. O padro 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 nmero total de respostas indesejadas so rastreadas em toda thread. Quando o limite alcanado, uma ao defensiva tomada en um aviso impresso no arquivo de log. Esta ao 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 Mximo 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 "Mximo 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 "Nmero mximo 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 nmero real de tabelas, no o nmero 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 negao nas regras de poltica 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 trfego chegue as redes conectadas e redes VPN quando usando poltica de roteamento. Voc pode desabilitar isto para propsitos 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 endereo 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 comunicao com o alvo no podem ser precisamente determinados no momento que as regras so carregadas. Regras de Reflexo no so criadas para ranges maiores que 500 portas e no sero usados por mais que o total de 1000 portas entre todos os redirecionamentos de portas. Apenas protocolos TCP e UDP so 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 possvel determinar com preciso a interface e IP do gateway usado para comunicao com o alvo quando as regras so carregadas. No h limites inerente ao nmero de portas que no sejam os limites dos protocolos. Todos os disponveis para redirecionamento de portas so 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 Reflexo 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 Reflexo 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 criao automatica de regras adcionais de redirecionamento do NAT para acesso a mapeamento 1:1 do seu endereo 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: Reflexo em mapeamento 1:1 somente para componentes de entrada de mapeamentos 1:1. Estas funes so as mesmas de um modo puro NAT de redirecionamento de porta. Para mais detalhes, veja a descrio 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 sada de NAT automatica para Reflexo" + +#: 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 Reflexo de NAT para portas redirecionadas ou Reflexo 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 criao manual de regras de NAT de sada para regras que direcionam a respostas de pacotes atravs 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 endereo IP ou nome de domnio totalmente qualificado FQDN. Nomes de host FQDN so periodicamente re-resolvido e atualizado. Se vrios IPs so retornados por uma consulta DNS, todos so 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 "Verso" + +#: 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 inicializao/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 inicializao e desligamento no vo 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 invlida:" + +#: 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 invlida:" + +#: 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 "Votao" + +#: 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 "Compensao" + +#: 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 "Conexes sucessivas sero redirecionadas para os servidores de um modo round-robin com conexes 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 conexo. Uma vez que os estados expirar, assim que a conexo pegajosa. Outras conexes do que o anfitrio ser redirecionado para o prximo servidor web no round robin. Mudando esta opo ir reiniciar o servio 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 conexes pegajosos. Por padro 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 perodos 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 "Adaptvel" + +#: 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 "Mnimo" + +#: 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 "Mximo" + +#: 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 utilitrio powerd monitora o estado do sistema e define vrias opes de controle de energia em conformidade. Ele oferece quatro modos (mximo, mnimo, adaptativas e hiadaptive) que podem ser selecionados individualmente durante a alimentao por AC ou baterias. Os modos de mximo, mnimo, adaptativos e hiadaptive pode ser abreviado max, min, adp, hadp. Modo mxima escolhe os mais altos valores de desempenho. Modo mnima seleciona os valores mais baixos de desempenho para obter o mximo de poupana de energia. O modo adaptativo tenta encontrar um equilbrio, degradando o desempenho quando o sistema parece ocioso e aumentando-a quando o sistema est ocupado. Ele oferece um bom equilbrio 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 so o consumo de energia mais importantthan. Levanta-se freqncia mais rpido, 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 no 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 resoluo de nome, a requisio deve demorar um pouco mais. Voc pode parar isso a qualquer momento clicando no boto \"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 configurao limita o nmero de conexes simultneas ao HTTP portal cativo (S) do servidor. Isso no define quantos usurios podem ser registradas no portal cativo, mas sim quantos usurios podem carregar a pgina do portal ou autenticar ao mesmo tempo! Regulao possvel permitido : 4 conexes mnimos por endereo IP do cliente, com um total mximo de 100 conexes." + +#: 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 padro 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 grfico de qualidade uma mdia sobre segundos, no intervalos. assim como a consulta de frequencia aumentada o grfico 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 nmero de consultas ruins para o alarme ser acionado. O padro 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 padro 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 "Correspondncia 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 forar uma atualizao do endereo de IP editando na pgina para este servio." + +#: 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 tnel e as configuraes do servidor bridge juntos no 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 endereo 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 endereo 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 invlida (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 instncia torneira ser, em ponte. Isto no feito automaticamente. Voc deve atribuir essa interface e criar a ponte separadamente. Esta definio controla qual o endereo IP existente e mscara de subrede so usados por OpenVPN para a ponte. A definio como 'none' far com que as configuraes 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 instncia torneira est superado. Se essas configuraes so deixadas em branco, DHCP ser repassado para a LAN, ea interface de configurao acima sero 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 domnio vlido 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 domnios. Use o caractere ponto e vrgula 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 "Alterao 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 concesso DHCP exibio 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 padro arrendamentos so exibidas em tempo UTC. Ao marcar esta \n" +"\t\t\t\t\t\tcaixa tempo de concesso DHCP ser exibida no horrio local e definir a zona de tempo selecionado. Isso ser usado para todos os tempos interfaces de DHCP locao." + +#: 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 no um endereo de IP vlido, 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 endereos 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 tambm 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 sero 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 "Sincronizao de Alta Disponibilidade" + +# 76% +#: usr/local/www/services_ntpd.php:86 usr/local/www/services_ntpd.php:92 +msgid "NTP Server Configuration" +msgstr "Configurao 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 padro 128. O mnimo 0 e o mximo 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 prximo 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 nmero decimal a ser usado como o nmero de srie para o prximo 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 Invlida" + +#: 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 "no 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 vlido 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 padro 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 configurao 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 configurao 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 nmero hexadecimal vlidor 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 "Tnel 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 "Tnel 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 padro ser usado. Este tipicamente 1500 bytes, mas pode variar em algumas circunstncias." + +#: 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 rpido 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 atribudo 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 endereo 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 "Endereo IP secundario de Servidor de Autenticao 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 Autenticao 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 Autenticao 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 nmero 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 nmero da porta deve ser um nmero 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 no um endereo IPv4 vlido (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 endereos 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 no um endereo IP vlido 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 endereos 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 "Lnguagem" + +#: 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 no pode ser removida porque ela esta referenciada por um IP de CARP com a descrio" + +#: 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 no pode ser removida porque ela esta referenciada por um IP Alias com a descrio" + +#: 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 Operao do Servio 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 servio 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 servio Router Advertisement (RA) " + +#: usr/local/www/services_dhcpv6.php:653 usr/local/www/services_dhcpv6.php:584 +msgid "prefix delegation size" +msgstr "tamanho da delegao 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 concesso DHCP exibio 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: Pgina de Sockets" + +#: etc/inc/priv.defs.inc:65 +msgid "Allow access to the 'Diagnostics: Sockets' page." +msgstr "Permite acesso a pgina '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-deteco %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 no lido" + +#: etc/inc/functions.inc:115 +msgid "unread notices" +msgstr "avisos no lido" + +#: etc/inc/service-utils.inc:234 etc/inc/service-utils.inc:233 +#: etc/inc/service-utils.inc:250 +msgid "Router Advertisement Daemon" +msgstr "Servio de Anncio 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 "Servio 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 Servio " + +#: 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 Servio %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 Servio %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 Servio %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 descries 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 pgina" + +#: 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 endereo 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 no um endereo de IP vlido, subrede IPv4 ou alias." + +#: usr/local/www/services_router_advertisements.php:194 +#: usr/local/www/services_router_advertisements.php:189 +msgid "Router advertisements" +msgstr "Anncios 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 configuraes 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 configuraes 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 domnio vlido deve ser especificado para o domnio DNS." + +#: usr/local/www/vpn_ipsec_mobile.php:505 +msgid "Split DNS" +msgstr "Diviso 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 "Fornea 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 padro 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 vlido devve ser especificado aps _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 endereo 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 "Endereo 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 Revogao 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 conexes ociosas mais rpido. Faz uso mais eficiente da CPU e da memria mas pode derrubar conexes legtimas" + +#: 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 conexo legtima s custas do uso de memria e utilizao 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 funes de criptografia em sistemas que possuem o chip. No habilite essa opo se voc tem um carto de acelerao de criptografia Hifn, j que ele ter prioridade e o carto Hifn no ser usado. Acelerao pode ser automtica 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 "Acelerao 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 vlido." + +#: 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 vlido" + +#: 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 nmerico." + +#: 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 nmerico." + +#: 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 nmerico." + +#: 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 nmerico." + +#: 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 nmerico." + +#: 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 configurao de tempo de queda deve ser um valor nmerico." + +#: 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 configurao 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 configuraa 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 contrrio vai parecer que o gateway caiu antes da prxima consulta." + +#: usr/local/www/shortcuts.inc:96 +msgid "Main page for this section" +msgstr "Pgina principal para esta sesso" + +#: usr/local/www/shortcuts.inc:120 +msgid "Status of items on this page" +msgstr "Status dos itens nesta pgina" + +#: usr/local/www/shortcuts.inc:127 +msgid "Log entries for items on this page" +msgstr "Entrada de log para os itens nesta pgina" + +#: 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 comunicaes privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. fe80::/64). O primeiro endereo de rede ser atribudo \tinterface virtual do servidor. Os endereos de rede remanescentes podem opcionalmente ser atribudos a clientes em conexo. (veja Pool de Endereo)" + +#: 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 instncia torneira ser, em ponte. Isto no feito automaticamente. Voc deve atribuir essa interface e criar a ponte separadamente. Esta definio controla qual o endereo IP existente e mscara de subrede so usados por OpenVPN para a ponte. A definio como 'none' far com que as configuraes 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 instncia torneira est superado. Se essas configuraes so deixadas em branco, DHCP ser repassado para a LAN, ea interface de configurao acima sero 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 atravs do tnel, 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 no 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 atravs do tnel, 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 no 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 endereos 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 endereos 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 Opes de pool especfico. 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 endereos adicionais dentro desta subrede externa na faixa acima, ento 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 endereo 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 endereo 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 endereos MAC permitidos, separados por virgula, sem espao, 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 endereos MAC bloqueados, separados por virgula, sem espao, como " + +#: usr/local/www/load_balancer_virtual_server_edit.php:89 +msgid "You cannot use spaces or slashes in the 'name' field." +msgstr "Voc no pode usar espaos 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 atualizao do dashboard." + +#: usr/local/www/services_ntpd.php:119 +msgid "Interfaces without an IP address will not be shown." +msgstr "Interfaces sem um endereo de IP no sero visualizados." + +#: usr/local/www/services_ntpd.php:121 +msgid "Selecting no interfaces will listen on all interfaces with a wildcard." +msgstr "Seno selecionar uma interface, todas elas sero 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 endereo 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 so 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 no vlida ao longo do tempo. Caso contrrio ntpd s podem utilizar os valores do relgio local no 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, nmeros 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, nmeros e sobrelinhas (_)." + +#: usr/local/www/diag_packet_capture.php:81 +msgid "Invalid interface." +msgstr "Interface invlida" + +#: usr/local/www/diag_packet_capture.php:84 +msgid "Invalid address family." +msgstr "Famlia de Endereo invlido." + +#: usr/local/www/diag_packet_capture.php:87 +msgid "Invalid protocol." +msgstr "procolo invlido." + +#: 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 endereo IP local vlido 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 vlido 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 endereo IP vlido 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 endereo 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 atravs do tnel 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 "Endereo do Servidor" + +#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_l2tp.php:337 +msgid "Remote Address Range" +msgstr "Faixa de endereo remoto" + +#: usr/local/www/vpn_l2tp.php:384 usr/local/www/vpn_l2tp.php:387 +msgid "Authentication Type" +msgstr "Tipo de Autenticao" + +#: 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 mscara de subrede /32 invlida 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 mscara de rede /128 invlida 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-Atualizao" + +#: 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 "Concesses 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 Padro" + +#: 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 no deve ser definido para nenhum endereo 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 vlido." + +#: 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 vlido." + +#: 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 "Vlido 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 "Vlido at" + +#: usr/local/www/services_captiveportal_ip_edit.php:107 +#, fuzzy +msgid "A valid subnet mask must be specified" +msgstr "Uma sub-rede externa vlida 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 endereo IP vlido." + +#: usr/local/www/diag_testport.php:68 +#, fuzzy +msgid "Please enter a valid port number." +msgstr "Um nmero de porta vlido 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 "Conexo 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 invlido" + +#: 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 invlido" + +#: usr/local/www/interfaces_lagg_edit.php:101 +msgid "Protocol supplied is invalid" +msgstr "Protocolo fornecido invlido" + +#: 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 invlida" + +#: 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 endereo IP no 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 no 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 no 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 "Descrio 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 padro arrendamentos so exibidas em tempo UTC. Ao marcar esta \n" +"\t\t\t\t\t\tcaixa tempo de concesso DHCP ser exibida no horrio local e definir a zona de tempo selecionado. Isso ser usado para todos os tempos interfaces de DHCP locao." + +#: 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 estticos DHCP no DNS forwarder" + +#: usr/local/www/diag_system_pftop.php:133 +msgid "View type:" +msgstr "Tipo de Visualizao:" + +#: 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 "Endereo 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 "Endereo de Origem" + +#: usr/local/www/diag_system_pftop.php:166 +msgid "Number of States:" +msgstr "Nmero 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 Delegao" + +#: usr/local/www/services_dhcpv6.php:846 +#, fuzzy +msgid "DHCPv6 Static Mappings for this interface." +msgstr "Mapeamento DHCPv6 esttico" + +#: 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 numrico" + +#: usr/local/www/system_authservers.php:731 +#: usr/local/www/system_authservers.php:773 +msgid "Authentication Timeout" +msgstr "Limite de tempo de Autenticao" + +#: 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 padro 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 mximo 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 Mximo 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 "Adaptvel" + +#: 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 padro." + +#: 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 atualizao" + +#: 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 usurios/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 Autenticao 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 "Usurios - Servios - 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 usurio 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 "Verso do Pacote" + +#: etc/inc/priv.defs.inc:732 +msgid "WebCfg - Services: Captive portal: Allowed Hostnames page" +msgstr "WebCfg - Servios: 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 pgina 'Servios: Captive porta: Hostnames Permitidos'" + +#: etc/inc/priv.defs.inc:738 +msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page" +msgstr "WebCfg - Servios: Captive portal: Edita Hostnames permitidos" + +#: etc/inc/priv.defs.inc:1136 +#, fuzzy +msgid "WebCfg - System: User Manager: settings page" +msgstr "WebCfg - Sistema: Gerenciador de Usurios: Pgina de Configuraes" + +#: etc/inc/priv.defs.inc:1137 +#, fuzzy +msgid "Allow access to the 'System: User Manager: settings' page." +msgstr "Permitir acesso pgina 'Sistema: Gerenciador de usurios: Pgina deConfiguraes'." + +#: 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 vlido." + +#: 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 tnel 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 no 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 NO 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 opes avanada" + +#: 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 "Informao 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 "Endereo 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 "Endereo 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 "Expresso 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 amigvel ECN" + +#: usr/local/www/firewall_virtual_ip_edit.php:146 +#, fuzzy +msgid "You cannot use the network address for this VIP" +msgstr "Voc no pode usar o endereo da rede no incio 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 no pode usar o endereo 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 "sero 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 no estiver marcado, acesso ao webConfigurator est protegido contra tentativas de redirecionamento HTTP_REFERER. Marque essa caixa para desabilitar essa proteo se achar que isso interfere com o acesso ao webConfigurator em alguns casos especficos tais como quando usando scripts de terceiros para interagir com o pfSense. Mais informaes sobre HTTP_REFERER esto disponveis 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 nmero e no 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 nmero e no 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 cado" + +#: 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. No 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. No 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 "Mudana de nome de gateway no 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 vlida. No foi possvel 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' no vlida." + +#: 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 "No foi possvel localizar nenhum dos backups anteriores." + +#: usr/local/www/system_firmware_restorefullbackup.php:182 +msgid "do not restore config.xml." +msgstr "no 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 sero bloqueados a menos que essa opo 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 > Avanado, 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 endereo IP vlido deve ser especificado, ou # para uma excluso." + +#: 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 Fcil" + +#: 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! No foi possvel logar no servidor %1$s como usurio %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 endereo %1$ s no 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 no 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 endereo local para ser usado para o tnel 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 transmisso para a rvore Expansvel. Esse o nmero de pacotes transmitidos antes que seja limitado a uma taxa. O padro 6. O mnimo 1 e o mximo 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 contrrio vai parecer que o gateway caiu antes da prxima 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 padro 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 dinmico com o tamanho de banda, atraso, perda de pacote e tamanho de fila dado acima sero \n" +"criados para cada endereo IP de origem/destino encontrado, \n" +"respectivamente. Isso faz com que seja possvel 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 domnios. Use o caractere ponto e vrgula 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 nmerico." + +#: 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 configuraa 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 grfico de qualidade uma mdia sobre segundos, no intervalos. assim como a consulta de frequencia aumentada o grfico 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 contrrio vai parecer que o gateway caiu antes da prxima 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 usurio contm mais de 16 caractres." + +#: 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 " Nmero mximo de conexes 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 "Mximo de novas conexes / 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 domnios. Use o caractere ponto e vrgula 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 no 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 "Proteo 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 "Fora 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 domnios. Use o caractere ponto e vrgula 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 "Alterao de Nome de Usurio" + +#: 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 resoluo de hostname de Alias deve ser inteiro" + +#: usr/local/www/system_advanced_firewall.php:456 +msgid "Aliases Hostnames Resolve Interval" +msgstr "Intervalo de resoluo 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 padro." + +#: 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 notificaes 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 servio estiver marcado como desabilitado." + +#: usr/local/www/system_advanced_notifications.php:246 +msgid "Disable SMTP Notifications" +msgstr "Desabilitar notificaes 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 servio estiver marcado como desabilitado." + +#: usr/local/www/services_rfc2136_edit.php:197 +msgid "Use Public IP" +msgstr "Usa IP Pblico" + +#: 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 informaes 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 "No 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 desistalao 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 instalao do pacote" + +#: etc/inc/pkg-utils.inc:1301 +msgid "Finished reinstalling all packages." +msgstr "Terminada a reinstalao de todos os pacotes." + +#: etc/inc/shaper.inc:2884 +msgid "Burst" +msgstr "Exploso" + +#: 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 mdia (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 endereo de IP que deve ser usado para resoluo de DNS do sistema." +"Ele tambm ser usado para o servio 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 contm caracteres invlidos." + +#: /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 varivel fornecida no 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 alteraes 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 000000000..fe81cbec9 Binary files /dev/null and b/usr/local/share/locale/tr/LC_MESSAGES/pfSense.mo differ 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 + + + CTE 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 BARTHLEMY + 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 000000000..691c8d63c Binary files /dev/null and b/usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttf differ diff --git a/usr/local/www/apple-touch-icon.png b/usr/local/www/apple-touch-icon.png new file mode 100755 index 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/apple-touch-icon.png differ diff --git a/usr/local/www/bandwidth_by_ip.php b/usr/local/www/bandwidth_by_ip.php new file mode 100755 index 000000000..74697e6a3 --- /dev/null +++ b/usr/local/www/bandwidth_by_ip.php @@ -0,0 +1,121 @@ + 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 +

      +

    +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 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/favicon.ico differ 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 000000000..f06a20581 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_code.gif differ diff --git a/usr/local/www/filebrowser/images/file_database.gif b/usr/local/www/filebrowser/images/file_database.gif new file mode 100755 index 000000000..d479c915b Binary files /dev/null and b/usr/local/www/filebrowser/images/file_database.gif differ 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 000000000..222c31b77 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_doc.gif differ 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 000000000..e565c37a2 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_flash.gif differ diff --git a/usr/local/www/filebrowser/images/file_generic.gif b/usr/local/www/filebrowser/images/file_generic.gif new file mode 100755 index 000000000..5f39482ed Binary files /dev/null and b/usr/local/www/filebrowser/images/file_generic.gif differ 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 000000000..496068380 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_image.gif differ 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 000000000..9b6601f95 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_js.gif differ 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 000000000..b01bb230b Binary files /dev/null and b/usr/local/www/filebrowser/images/file_pdf.gif differ 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 000000000..ab7f45995 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_php.gif differ diff --git a/usr/local/www/filebrowser/images/file_ppt.gif b/usr/local/www/filebrowser/images/file_ppt.gif new file mode 100755 index 000000000..0383c984d Binary files /dev/null and b/usr/local/www/filebrowser/images/file_ppt.gif differ 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 000000000..f1997c73c Binary files /dev/null and b/usr/local/www/filebrowser/images/file_system.gif differ diff --git a/usr/local/www/filebrowser/images/file_xls.gif b/usr/local/www/filebrowser/images/file_xls.gif new file mode 100755 index 000000000..d004013b3 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_xls.gif differ diff --git a/usr/local/www/filebrowser/images/file_zip.gif b/usr/local/www/filebrowser/images/file_zip.gif new file mode 100755 index 000000000..ec98255f4 Binary files /dev/null and b/usr/local/www/filebrowser/images/file_zip.gif differ diff --git a/usr/local/www/filebrowser/images/folder_generic.gif b/usr/local/www/filebrowser/images/folder_generic.gif new file mode 100755 index 000000000..45b191d8a Binary files /dev/null and b/usr/local/www/filebrowser/images/folder_generic.gif differ 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 000000000..246a81960 Binary files /dev/null and b/usr/local/www/filebrowser/images/icon_cancel.gif differ 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 000000000..cf8215980 Binary files /dev/null and b/usr/local/www/filebrowser/images/icon_contract.gif differ 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 000000000..06c0c685c Binary files /dev/null and b/usr/local/www/filebrowser/images/icon_expand.gif differ diff --git a/usr/local/www/filebrowser/images/icon_home.gif b/usr/local/www/filebrowser/images/icon_home.gif new file mode 100755 index 000000000..f888434d7 Binary files /dev/null and b/usr/local/www/filebrowser/images/icon_home.gif differ 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 000000000..0d1137ced Binary files /dev/null and b/usr/local/www/filebrowser/images/icon_left.gif differ diff --git a/usr/local/www/filebrowser/images/icon_magnifier.gif b/usr/local/www/filebrowser/images/icon_magnifier.gif new file mode 100755 index 000000000..e96e548b8 Binary files /dev/null and b/usr/local/www/filebrowser/images/icon_magnifier.gif differ 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 000000000..9df0abf6a Binary files /dev/null and b/usr/local/www/green_dot.jpg differ diff --git a/usr/local/www/gui.css b/usr/local/www/gui.css new file mode 100755 index 000000000..a4d645353 --- /dev/null +++ b/usr/local/www/gui.css @@ -0,0 +1,363 @@ +/* + pfSense_MODULE: base +*/ + +html,body { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; +} +td,th,input,select { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; +} +form { + margin: 0px; +} +.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; +} +a { + text-decoration: none; +} +.navlnk { + color: #FFFFFF; + text-decoration: none; + font-size: 0.9em; +} +.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-bottom: 1px solid #999999; + border-left: 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; + 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 { +} +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; +} diff --git a/usr/local/www/guiconfig.inc b/usr/local/www/guiconfig.inc new file mode 100644 index 000000000..d4f899451 --- /dev/null +++ b/usr/local/www/guiconfig.inc @@ -0,0 +1,1187 @@ +. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (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 000000000..6ec9bbf1e Binary files /dev/null and b/usr/local/www/javascript/chosen/chosen-sprite.png differ diff --git a/usr/local/www/javascript/chosen/chosen.css b/usr/local/www/javascript/chosen/chosen.css new file mode 100644 index 000000000..d2b1eb4a0 --- /dev/null +++ b/usr/local/www/javascript/chosen/chosen.css @@ -0,0 +1,317 @@ +div.chzn-container { + font-size: 13px; + position: relative; +} + +div.chzn-container input { + background: #fff; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee)); + background: -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%); + background: -o-linear-gradient(bottom, white 85%, #eeeeee 99%); + border: 1px solid #aaa; + font-family: sans-serif; + font-size: 1em; + margin: 0px; + padding: 4px 5px; + outline: none; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + -ms-border-radius: 3px; + -khtml-border-radius: 3px; + border-radius: 3px; +} +div.chzn-container textarea:focus { + border-color: #058cf5; + -moz-box-shadow: 0px 0px 3px #aaa; + -webkit-box-shadow: 0px 0px 3px #aaa; + box-shadow: 0px 0px 3px #aaa; +} + + +div.chzn-container div.chzn-drop { + background: #FFF; + border: 1px solid #aaa; + border-width: 0 1px 1px; + left: 0; + position: absolute; + top: 29px; + -webkit-box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.15); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15); + z-index: 20; +} +div.chzn-container-single div.chzn-drop { + -moz-border-radius: 0 0 4px 4px; + -webkit-border-radius: 0 0 4px 4px; + -o-border-radius: 0 0 4px 4px; + -ms-border-radius: 0 0 4px 4px; + -khtml-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + + +/* SINGLE */ +div.chzn-container a.chzn-single { + background: #FFF; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white)); + background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%); + background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 50%); + border: 1px solid #aaa; + display: block; + overflow: hidden; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -o-border-radius: 4px; + -ms-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + height: 25px; + color: #444; + line-height: 26px; + padding: 0px 0px 0px 8px; + position: relative; + text-decoration: none; + z-index: 19; + white-space: nowrap; +} +div.chzn-container a.chzn-single span { + display: block; + margin-right: 26px; + overflow: hidden; + text-overflow: ellipsis; +} +div.chzn-container a.chzn-single div { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + -o-border-top-right-radius: 4px; + -ms-border-top-right-radius: 4px; + -khtml-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + -o-border-bottom-right-radius: 4px; + -ms-border-bottom-right-radius: 4px; + -khtml-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + background: #ccc; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); + background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); + background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%); + border-left: 1px solid #aaa; + display: block; + height: 100%; + position: absolute; + right: 0; + top: 0; + width: 18px; +} +div.chzn-container a.chzn-single div b { + background: url('chosen-sprite.png') no-repeat 0 1px; + display: block; + width: 100%; + height: 100%; +} +div.chzn-container div.chzn-search { + padding: 3px 4px; + margin: 0px; + white-space: nowrap; +} +div.chzn-container div.chzn-search input { + background: url('chosen-sprite.png') no-repeat 97% -35px, #ffffff; + background: url('chosen-sprite.png') no-repeat 97% -35px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee)); + background: url('chosen-sprite.png') no-repeat 97% -35px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%); + background: url('chosen-sprite.png') no-repeat 97% -35px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%); + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + -o-border-radius: 0px; + -ms-border-radius: 0px; + -khtml-border-radius: 0px; + border-radius: 0px; + margin: 1px 0; + outline: 0; +} + + +/* Multi */ +div.chzn-container ul.chzn-choices { + background: #fff; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee)); + background-image: -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%); + background-image: -o-linear-gradient(bottom, white 85%, #eeeeee 99%); + margin: 0; + cursor: text; + border: 1px solid #aaa; + overflow: hidden; + height: auto !important; + height: 1%; + padding: 0; + position: relative; +} +div.chzn-container ul.chzn-choices:focus { + border-color: #058cf5; + -moz-box-shadow: 0px 0px 5px #999; + -webkit-box-shadow: 0px 0px 5px #999; + box-shadow: 0px 0px 5px #999; +} +div.chzn-container ul.chzn-choices li { + float: left; + list-style-type: none; + margin: 0px; +} +div.chzn-container ul.chzn-choices li.search-field { + margin: 0px; + white-space: nowrap; + padding: 0px; +} +div.chzn-container ul.chzn-choices li.search-field input { + color: #666; + background: transparent !important; + border: 0px !important; + padding: 5px; + margin: 1px 0; + outline: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +div.chzn-container ul.chzn-choices li.search-field input.default { + color: #999; +} +div.chzn-container ul.chzn-choices li.search-choice { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #e4e4e4; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #e4e4e4), color-stop(0.7, #eeeeee)); + background-image: -moz-linear-gradient(center bottom, #e4e4e4 0%, #eeeeee 70%); + background-image: -o-linear-gradient(bottom, #e4e4e4 0%, #eeeeee 70%); + color: #333; + border: 1px solid #b4b4b4; + line-height: 13px; + padding: 3px 19px 3px 6px; + position: relative; + margin: 3px 0px 3px 5px; +} +div.chzn-container ul.chzn-choices li.search-choice span { + cursor: default; +} +div.chzn-container ul.chzn-choices li.search-choice.search-choice-focus { + background: #d4d4d4; +} +div.chzn-container ul.chzn-choices li.search-choice a.search-choice-close { + position: absolute; + right: 5px; + top: 6px; + display: block; + width: 8px; + height: 9px; + font-size: 1px; + background: url(chosen-sprite.png) right top no-repeat; +} +div.chzn-container ul.chzn-choices li.search-choice a.search-choice-close:hover { + background-position: right -9px; +} +div.chzn-container ul.chzn-choices li.search-choice.search-choice-focus a.search-choice-close { + background-position: right -9px; +} + + +/* Results */ +div.chzn-container ul.chzn-results { + margin: 0 4px 4px 0; + max-height: 190px; + padding: 0 0 0 4px; + position: relative; + overflow-x: hidden; + overflow-y: auto; + z-index: 20; +} +div.chzn-container-multi ul.chzn-results { + margin: -1px 0 0; + padding: 0; +} +div.chzn-container-multi ul.chzn-results li { + border-left: 0px !important; + border-right: 0px !important; +} +div.chzn-container ul.chzn-results li { + line-height: 80%; + padding: 7px 7px 8px; + z-index: 22; + margin: 0; + list-style-type: none; +} +div.chzn-container ul.chzn-results li.active-result { + cursor: pointer; +} +div.chzn-container ul.chzn-results li em { + font-style: normal; + background: #FEFFDC; +} +div.chzn-container ul.chzn-results li.highlighted { + background: #3875d7; + color: #fff; +} +div.chzn-container ul.chzn-results li.highlighted em { + background: transparent; +} +div.chzn-container ul.chzn-results li.no-results { + background: #F4F4F4; +} +div.chzn-container ul.chzn-results li.group-result { + cursor: default; + color: #999; + font-weight: bold; +} +div.chzn-container ul.chzn-results li.group-option { + padding-left: 20px; +} + +div.chzn-container-multi div.chzn-drop li.result-selected { + display: none; +} + + + +/* Active */ +div.chzn-container-active a.chzn-single { + -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3); + box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3); + border: 1px solid #5897fb; +} +div.chzn-container-active a.chzn-single-with-drop { + border: 1px solid #aaa; + border-width: 1px 1px 1px; + -moz-box-shadow: 0px 1px 0px #FFF inset; + -webkit-box-shadow: 0px 1px 0px #FFF inset; + box-shadow: 0px 1px 0px #FFF inset; + background: #EEE; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee)); + background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%); + -webkit-border-bottom-left-radius: 0px; + -webkit-border-bottom-right-radius: 0px; + -moz-border-radius-bottomleft: 0px; + -moz-border-radius-bottomright: 0px; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} +div.chzn-container-active a.chzn-single-with-drop div { + background: transparent; + border-left: none; +} +div.chzn-container-active a.chzn-single-with-drop div b { + background-position: -18px 1px; +} +div.chzn-container-active ul.chzn-choices { + z-index: 21; + -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3); + box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3); + border: 1px solid #5897fb; +} +div.chzn-container-active ul.chzn-choices input { + color: #111 !important; +} diff --git a/usr/local/www/javascript/chosen/chosen.jquery.js b/usr/local/www/javascript/chosen/chosen.jquery.js new file mode 100644 index 000000000..21e822a69 --- /dev/null +++ b/usr/local/www/javascript/chosen/chosen.jquery.js @@ -0,0 +1,755 @@ +(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; + $ = 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 < 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 000000000..10dbd74e8 Binary files /dev/null and b/usr/local/www/javascript/datepicker/media/bg_header.jpg differ 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 000000000..ae352c2b6 Binary files /dev/null and b/usr/local/www/javascript/datepicker/media/bullet1.gif differ diff --git a/usr/local/www/javascript/datepicker/media/bullet2.gif b/usr/local/www/javascript/datepicker/media/bullet2.gif new file mode 100755 index 000000000..04b293d4b Binary files /dev/null and b/usr/local/www/javascript/datepicker/media/bullet2.gif differ 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 000000000..8526cf5d1 Binary files /dev/null and b/usr/local/www/javascript/datepicker/media/cal.gif differ diff --git a/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif b/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif new file mode 100755 index 000000000..72a0d3ee6 Binary files /dev/null and b/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif differ diff --git a/usr/local/www/javascript/domTT/LICENSE b/usr/local/www/javascript/domTT/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/usr/local/www/javascript/domTT/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/usr/local/www/javascript/domTT/behaviour.js b/usr/local/www/javascript/domTT/behaviour.js new file mode 100644 index 000000000..21b28d79e --- /dev/null +++ b/usr/local/www/javascript/domTT/behaviour.js @@ -0,0 +1,254 @@ +/* + Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work + of Simon Willison (see comments by Simon below). + + Description: + + Uses css selectors to apply javascript behaviours to enable + unobtrusive javascript in html documents. + + Usage: + + var myrules = { + 'b.someclass' : function(element){ + element.onclick = function(){ + alert(this.innerHTML); + } + }, + '#someid u' : function(element){ + element.onmouseover = function(){ + this.innerHTML = "BLAH!"; + } + } + }; + + Behaviour.register(myrules); + + // Call Behaviour.apply() to re-apply the rules (if you + // update the dom, etc). + + License: + + This file is entirely BSD licensed. + + More information: + + http://ripcord.co.nz/behaviour/ + +*/ + +var Behaviour = { + list : new Array, + + register : function(sheet){ + Behaviour.list.push(sheet); + }, + + start : function(){ + Behaviour.addLoadEvent(function(){ + Behaviour.apply(); + }); + }, + + apply : function(){ + for (h=0;sheet=Behaviour.list[h];h++){ + for (selector in sheet){ + list = document.getElementsBySelector(selector); + + if (!list){ + continue; + } + + for (i=0;element=list[i];i++){ + sheet[selector](element); + } + } + } + }, + + addLoadEvent : function(func){ + var oldonload = window.onload; + + if (typeof window.onload != 'function') { + window.onload = func; + } else { + window.onload = function() { + oldonload(); + func(); + }; + } + } +}; + +Behaviour.start(); + +/* + The following code is Copyright (C) Simon Willison 2004. + + document.getElementsBySelector(selector) + - returns an array of element objects from the current document + matching the CSS selector. Selectors can contain element names, + class names and ids and can be nested. For example: + + elements = document.getElementsBySelect('div#main p a.external') + + Will return an array of all 'a' elements with 'external' in their + class attribute that are contained inside 'p' elements that are + contained inside the 'div' element which has id="main" + + New in version 0.4: Support for CSS2 and CSS3 attribute selectors: + See http://www.w3.org/TR/css3-selectors/#attribute-selectors + + Version 0.4 - Simon Willison, March 25th 2003 + -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows + -- Opera 7 fails +*/ + +function getAllChildren(e) { + // Returns all children of element. Workaround required for IE5/Windows. Ugh. + return e.all ? e.all : e.getElementsByTagName('*'); +} + +document.getElementsBySelector = function(selector) { + // Attempt to fail gracefully in lesser browsers + if (!document.getElementsByTagName) { + return new Array(); + } + // Split selector in to tokens + var tokens = selector.split(' '); + var currentContext = new Array(document); + for (var i = 0; i < tokens.length; i++) { + token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,''); + if (token.indexOf('#') > -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 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/logobig.jpg differ 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 000000000..65498f1b0 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/alert_bgr.gif differ diff --git a/usr/local/www/themes/_corporate/images/footer.gif b/usr/local/www/themes/_corporate/images/footer.gif new file mode 100755 index 000000000..e516113dd Binary files /dev/null and b/usr/local/www/themes/_corporate/images/footer.gif differ 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 000000000..aebc5111b Binary files /dev/null and b/usr/local/www/themes/_corporate/images/header.gif differ 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 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/_corporate/images/help.png differ diff --git a/usr/local/www/themes/_corporate/images/horizontal.gif b/usr/local/www/themes/_corporate/images/horizontal.gif new file mode 100755 index 000000000..4ed769433 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/horizontal.gif differ 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 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/favicon.ico differ 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 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif differ 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 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif differ 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 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alert.gif b/usr/local/www/themes/_corporate/images/icons/icon_alert.gif new file mode 100755 index 000000000..764694120 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_alert.gif differ 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 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif differ 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 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif differ 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 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif b/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif new file mode 100644 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif differ 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 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_block.gif b/usr/local/www/themes/_corporate/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_block.gif differ 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 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif differ 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 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif differ 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 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_cal.gif b/usr/local/www/themes/_corporate/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_cal.gif differ 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 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_carp.gif b/usr/local/www/themes/_corporate/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_carp.gif differ 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 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif differ 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 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_chain.png differ 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 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_check.gif differ 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 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif differ 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 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif differ 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 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_close.gif b/usr/local/www/themes/_corporate/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_close.gif differ 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 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_down.gif b/usr/local/www/themes/_corporate/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_down.gif differ 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 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_e.gif b/usr/local/www/themes/_corporate/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_e.gif differ 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 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif differ 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 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_error.gif differ 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 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png new file mode 100755 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png differ 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 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png differ 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 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png new file mode 100755 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png differ 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 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png new file mode 100755 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png new file mode 100755 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png new file mode 100755 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png new file mode 100755 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png new file mode 100755 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png differ 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 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png new file mode 100755 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png differ 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 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png differ 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 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png new file mode 100755 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png new file mode 100755 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif b/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif differ 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 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_help.gif differ 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 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif differ 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 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif differ 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 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif differ 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 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif b/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif new file mode 100644 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif differ 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 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif b/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_left.gif b/usr/local/www/themes/_corporate/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_left.gif differ 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 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif differ 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 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif differ 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 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_log.gif differ 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 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif b/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif differ 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 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif differ 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 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_match.gif b/usr/local/www/themes/_corporate/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_match.gif differ 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 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_minus.gif b/usr/local/www/themes/_corporate/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_minus.gif differ 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 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_other.gif b/usr/local/www/themes/_corporate/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_out.gif b/usr/local/www/themes/_corporate/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_out.gif differ 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 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_parp.gif b/usr/local/www/themes/_corporate/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_parp.gif differ 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 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif differ 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 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_pass.gif differ 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 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif differ 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 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_plus.gif differ 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 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif new file mode 100755 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif differ 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 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif differ 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 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif differ 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 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif differ 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 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif differ 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 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif differ 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 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif differ 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 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif differ 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 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif differ 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 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif differ 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 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_right.gif differ 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 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif differ 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 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif differ 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 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif differ 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 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif differ 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 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif differ 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 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif b/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png b/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png new file mode 100644 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-group.png b/usr/local/www/themes/_corporate/images/icons/icon_system-group.png new file mode 100644 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png b/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png new file mode 100644 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system-user.png b/usr/local/www/themes/_corporate/images/icons/icon_system-user.png new file mode 100644 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png new file mode 100644 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png b/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png new file mode 100755 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif b/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif new file mode 100755 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif b/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_up.gif b/usr/local/www/themes/_corporate/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif b/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif b/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png new file mode 100644 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png b/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png new file mode 100644 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x.gif b/usr/local/www/themes/_corporate/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif b/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif b/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif b/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/in.gif b/usr/local/www/themes/_corporate/images/icons/in.gif new file mode 100644 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/in.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/in_d.gif b/usr/local/www/themes/_corporate/images/icons/in_d.gif new file mode 100644 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/out.gif b/usr/local/www/themes/_corporate/images/icons/out.gif new file mode 100644 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/out.gif differ diff --git a/usr/local/www/themes/_corporate/images/icons/out_d.gif b/usr/local/www/themes/_corporate/images/icons/out_d.gif new file mode 100644 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/_corporate/images/log.png b/usr/local/www/themes/_corporate/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/log.png differ diff --git a/usr/local/www/themes/_corporate/images/logo.gif b/usr/local/www/themes/_corporate/images/logo.gif new file mode 100755 index 000000000..08638ff12 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/logo.gif differ diff --git a/usr/local/www/themes/_corporate/images/menu_down.gif b/usr/local/www/themes/_corporate/images/menu_down.gif new file mode 100755 index 000000000..137de8dd9 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/menu_down.gif differ diff --git a/usr/local/www/themes/_corporate/images/menu_footer.gif b/usr/local/www/themes/_corporate/images/menu_footer.gif new file mode 100755 index 000000000..d06faa403 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/menu_footer.gif differ diff --git a/usr/local/www/themes/_corporate/images/menu_right.gif b/usr/local/www/themes/_corporate/images/menu_right.gif new file mode 100755 index 000000000..881327cfc Binary files /dev/null and b/usr/local/www/themes/_corporate/images/menu_right.gif differ diff --git a/usr/local/www/themes/_corporate/images/metal_bgr.gif b/usr/local/www/themes/_corporate/images/metal_bgr.gif new file mode 100755 index 000000000..a0ca6c85a Binary files /dev/null and b/usr/local/www/themes/_corporate/images/metal_bgr.gif differ diff --git a/usr/local/www/themes/_corporate/images/metal_bgr_red.gif b/usr/local/www/themes/_corporate/images/metal_bgr_red.gif new file mode 100755 index 000000000..c4a1465de Binary files /dev/null and b/usr/local/www/themes/_corporate/images/metal_bgr_red.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/bar_blue.gif b/usr/local/www/themes/_corporate/images/misc/bar_blue.gif new file mode 100755 index 000000000..953cde1b4 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/bar_gray.gif b/usr/local/www/themes/_corporate/images/misc/bar_gray.gif new file mode 100755 index 000000000..a82da7893 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/bar_left.gif b/usr/local/www/themes/_corporate/images/misc/bar_left.gif new file mode 100755 index 000000000..ea98cec30 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/bar_right.gif b/usr/local/www/themes/_corporate/images/misc/bar_right.gif new file mode 100755 index 000000000..b5114b032 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png new file mode 100755 index 000000000..37db2fdcf Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png differ diff --git a/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png new file mode 100755 index 000000000..fba7af914 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png differ diff --git a/usr/local/www/themes/_corporate/images/misc/button.gif b/usr/local/www/themes/_corporate/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/button.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/key_128.gif b/usr/local/www/themes/_corporate/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/key_152.gif b/usr/local/www/themes/_corporate/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/key_256.gif b/usr/local/www/themes/_corporate/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/key_64.gif b/usr/local/www/themes/_corporate/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/left_background.gif b/usr/local/www/themes/_corporate/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/loader.gif b/usr/local/www/themes/_corporate/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/loader.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/loader_tab.gif b/usr/local/www/themes/_corporate/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/logon.png b/usr/local/www/themes/_corporate/images/misc/logon.png new file mode 100755 index 000000000..baf8a9d19 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/logon.png differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_0.gif b/usr/local/www/themes/_corporate/images/misc/plogo_0.gif new file mode 100755 index 000000000..160b56d54 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_0.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_1.gif b/usr/local/www/themes/_corporate/images/misc/plogo_1.gif new file mode 100755 index 000000000..50342d64a Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_1.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_10.gif b/usr/local/www/themes/_corporate/images/misc/plogo_10.gif new file mode 100755 index 000000000..06cba146e Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_10.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_2.gif b/usr/local/www/themes/_corporate/images/misc/plogo_2.gif new file mode 100755 index 000000000..9d102307f Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_2.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_3.gif b/usr/local/www/themes/_corporate/images/misc/plogo_3.gif new file mode 100755 index 000000000..1983f87ef Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_3.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_4.gif b/usr/local/www/themes/_corporate/images/misc/plogo_4.gif new file mode 100755 index 000000000..f7158bdf2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_4.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_5.gif b/usr/local/www/themes/_corporate/images/misc/plogo_5.gif new file mode 100755 index 000000000..c7af59324 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_5.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_6.gif b/usr/local/www/themes/_corporate/images/misc/plogo_6.gif new file mode 100755 index 000000000..310eb220d Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_6.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_7.gif b/usr/local/www/themes/_corporate/images/misc/plogo_7.gif new file mode 100755 index 000000000..06bd2e8b2 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_7.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_8.gif b/usr/local/www/themes/_corporate/images/misc/plogo_8.gif new file mode 100755 index 000000000..c6ef56456 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_8.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/plogo_9.gif b/usr/local/www/themes/_corporate/images/misc/plogo_9.gif new file mode 100755 index 000000000..4f0cd4da6 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/plogo_9.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/progress_bar.gif b/usr/local/www/themes/_corporate/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/tri_c.gif b/usr/local/www/themes/_corporate/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif b/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/tri_o.gif b/usr/local/www/themes/_corporate/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif b/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/_corporate/images/misc/widget_loader.gif b/usr/local/www/themes/_corporate/images/misc/widget_loader.gif new file mode 100755 index 000000000..fad101f42 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/_corporate/images/new_tab_menu.png b/usr/local/www/themes/_corporate/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/_corporate/images/status.png b/usr/local/www/themes/_corporate/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/status.png differ diff --git a/usr/local/www/themes/_corporate/images/transparent.gif b/usr/local/www/themes/_corporate/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/_corporate/images/transparent.gif differ diff --git a/usr/local/www/themes/_corporate/images/transparent_pixel.gif b/usr/local/www/themes/_corporate/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/_corporate/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/_corporate/javascript/ie7/blank.gif b/usr/local/www/themes/_corporate/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/_corporate/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js new file mode 100644 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js new file mode 100644 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js new file mode 100644 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js new file mode 100644 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js new file mode 100644 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js new file mode 100644 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css b/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css new file mode 100644 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js b/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js new file mode 100644 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/_corporate/loader.js b/usr/local/www/themes/_corporate/loader.js new file mode 100644 index 000000000..4512d5eb8 --- /dev/null +++ b/usr/local/www/themes/_corporate/loader.js @@ -0,0 +1,29 @@ +//'); +} + +document.write(''); + +//]]> diff --git a/usr/local/www/themes/_corporate/new_tab_menu.css b/usr/local/www/themes/_corporate/new_tab_menu.css new file mode 100644 index 000000000..aae94e341 --- /dev/null +++ b/usr/local/www/themes/_corporate/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(imagesimages/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/_corporate/new_tab_menu.png b/usr/local/www/themes/_corporate/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/_corporate/new_tab_menu.png differ diff --git a/usr/local/www/themes/_corporate/rrdcolors.inc.php b/usr/local/www/themes/_corporate/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/_corporate/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/all.css b/usr/local/www/themes/code-red/all.css new file mode 100644 index 000000000..81efac7db --- /dev/null +++ b/usr/local/www/themes/code-red/all.css @@ -0,0 +1,1300 @@ +/* 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; +} + +body { + margin: 0px auto; + background: url('images/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: 29px; + 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: 22px; + 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: 15px; + left: 210px; + font-size: 14px; + color: #990000; + 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: #990000; + text-align: right; + padding-right: 18px; +} +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: -5px; + 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: 82px; + color: #999999; + 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: -35px; + 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: 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: 120px; + 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/menubgr_footer.png") no-repeat; + background-position: bottom; + */ + padding: 0em 0 0.4em 0; + padding-top: 5px; + padding-bottom: 10px; +} +/* 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: 0px solid #990000; + width: 8.8em; + height: 1.6em; + line-height: 1.6em; +/* background-color: #990000; */ + background: url(images/menubgr.png) repeat-y; + z-index: 2; +/* color: #FFF; */ +} +#navigation ul li ul li:hover { +/* background-color: #666666; */ + background-image: url(images/menubgr_highlight.png); + background-repeat: repeat-y; +} + +#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: 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: #999999; + 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; +} + + +/* 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 { + background-color:#eee; + color:#666666; + font-weight: bold; + cursor: default; +} + +/*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/code-red/bottom-loader.js b/usr/local/www/themes/code-red/bottom-loader.js new file mode 100755 index 000000000..a21f775a4 --- /dev/null +++ b/usr/local/www/themes/code-red/bottom-loader.js @@ -0,0 +1,10 @@ +// diff --git a/usr/local/www/themes/code-red/favicon.ico b/usr/local/www/themes/code-red/favicon.ico new file mode 100755 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/code-red/favicon.ico differ diff --git a/usr/local/www/themes/code-red/graphlink.css b/usr/local/www/themes/code-red/graphlink.css new file mode 100755 index 000000000..13f65f0fb --- /dev/null +++ b/usr/local/www/themes/code-red/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/code-red/images/alert_bgr.png b/usr/local/www/themes/code-red/images/alert_bgr.png new file mode 100755 index 000000000..f84afd44c Binary files /dev/null and b/usr/local/www/themes/code-red/images/alert_bgr.png differ diff --git a/usr/local/www/themes/code-red/images/background.gif b/usr/local/www/themes/code-red/images/background.gif new file mode 100755 index 000000000..3f0dc770c Binary files /dev/null and b/usr/local/www/themes/code-red/images/background.gif differ diff --git a/usr/local/www/themes/code-red/images/background.png b/usr/local/www/themes/code-red/images/background.png new file mode 100755 index 000000000..e68893d7c Binary files /dev/null and b/usr/local/www/themes/code-red/images/background.png differ diff --git a/usr/local/www/themes/code-red/images/button_left.gif b/usr/local/www/themes/code-red/images/button_left.gif new file mode 100755 index 000000000..2e46d25e2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/button_left.gif differ diff --git a/usr/local/www/themes/code-red/images/button_mid.gif b/usr/local/www/themes/code-red/images/button_mid.gif new file mode 100755 index 000000000..4198d936c Binary files /dev/null and b/usr/local/www/themes/code-red/images/button_mid.gif differ diff --git a/usr/local/www/themes/code-red/images/button_right.gif b/usr/local/www/themes/code-red/images/button_right.gif new file mode 100755 index 000000000..0faaa67cb Binary files /dev/null and b/usr/local/www/themes/code-red/images/button_right.gif differ diff --git a/usr/local/www/themes/code-red/images/footer.png b/usr/local/www/themes/code-red/images/footer.png new file mode 100755 index 000000000..e609b9dcf Binary files /dev/null and b/usr/local/www/themes/code-red/images/footer.png differ diff --git a/usr/local/www/themes/code-red/images/header.png b/usr/local/www/themes/code-red/images/header.png new file mode 100755 index 000000000..4525e6145 Binary files /dev/null and b/usr/local/www/themes/code-red/images/header.png differ diff --git a/usr/local/www/themes/code-red/images/help.png b/usr/local/www/themes/code-red/images/help.png new file mode 100755 index 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/code-red/images/help.png differ diff --git a/usr/local/www/themes/code-red/images/horizontal.gif b/usr/local/www/themes/code-red/images/horizontal.gif new file mode 100755 index 000000000..a280dcbab Binary files /dev/null and b/usr/local/www/themes/code-red/images/horizontal.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/favicon.ico b/usr/local/www/themes/code-red/images/icons/favicon.ico new file mode 100755 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/favicon.ico differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_3g.gif b/usr/local/www/themes/code-red/images/icons/icon_3g.gif new file mode 100755 index 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_advanced.gif b/usr/local/www/themes/code-red/images/icons/icon_advanced.gif new file mode 100644 index 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_advanced.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif b/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif new file mode 100644 index 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_alert.gif b/usr/local/www/themes/code-red/images/icons/icon_alert.gif new file mode 100755 index 000000000..764694120 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_alert.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif new file mode 100755 index 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif new file mode 100755 index 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif new file mode 100755 index 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif new file mode 100755 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif new file mode 100755 index 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_block.gif b/usr/local/www/themes/code-red/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_block.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_block_add.gif b/usr/local/www/themes/code-red/images/icons/icon_block_add.gif new file mode 100755 index 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_block_add.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_block_d.gif b/usr/local/www/themes/code-red/images/icons/icon_block_d.gif new file mode 100755 index 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_block_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif b/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif new file mode 100755 index 000000000..91730584c Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_cal.gif b/usr/local/www/themes/code-red/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_cal.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif new file mode 100755 index 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_carp.gif b/usr/local/www/themes/code-red/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_carp.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif b/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif new file mode 100755 index 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_chain.png b/usr/local/www/themes/code-red/images/icons/icon_chain.png new file mode 100644 index 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_chain.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_check.gif b/usr/local/www/themes/code-red/images/icons/icon_check.gif new file mode 100755 index 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_check.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif b/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif new file mode 100755 index 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif b/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif new file mode 100755 index 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif b/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif new file mode 100755 index 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_close.gif b/usr/local/www/themes/code-red/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_close.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_configure.gif b/usr/local/www/themes/code-red/images/icons/icon_configure.gif new file mode 100755 index 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_down.gif b/usr/local/www/themes/code-red/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_down.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_down_d.gif b/usr/local/www/themes/code-red/images/icons/icon_down_d.gif new file mode 100755 index 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_e.gif b/usr/local/www/themes/code-red/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_e.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif new file mode 100755 index 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_error.gif b/usr/local/www/themes/code-red/images/icons/icon_error.gif new file mode 100755 index 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_error.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_exclam.gif b/usr/local/www/themes/code-red/images/icons/icon_exclam.gif new file mode 100755 index 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_de.png b/usr/local/www/themes/code-red/images/icons/icon_flag_de.png new file mode 100755 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_flag_de.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_en.png b/usr/local/www/themes/code-red/images/icons/icon_flag_en.png new file mode 100755 index 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_flag_en.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_es.png b/usr/local/www/themes/code-red/images/icons/icon_flag_es.png new file mode 100755 index 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png new file mode 100755 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png new file mode 100755 index 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png new file mode 100755 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png new file mode 100755 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png new file mode 100755 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png new file mode 100755 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png new file mode 100755 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png new file mode 100755 index 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png new file mode 100755 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png new file mode 100755 index 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png new file mode 100755 index 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png new file mode 100755 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png b/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png new file mode 100755 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif b/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_help.gif b/usr/local/www/themes/code-red/images/icons/icon_help.gif new file mode 100644 index 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_help.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif b/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif new file mode 100755 index 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif new file mode 100755 index 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif b/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif new file mode 100755 index 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_in.gif b/usr/local/www/themes/code-red/images/icons/icon_in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_in_d.gif b/usr/local/www/themes/code-red/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif b/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif new file mode 100755 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif b/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif new file mode 100755 index 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif b/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_left.gif b/usr/local/www/themes/code-red/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_left.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_left_d.gif b/usr/local/www/themes/code-red/images/icons/icon_left_d.gif new file mode 100755 index 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_left_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif new file mode 100755 index 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_log.gif b/usr/local/www/themes/code-red/images/icons/icon_log.gif new file mode 100755 index 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_log.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_log_d.gif b/usr/local/www/themes/code-red/images/icons/icon_log_d.gif new file mode 100755 index 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_log_s.gif b/usr/local/www/themes/code-red/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_log_s.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif b/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif new file mode 100755 index 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_logs.gif b/usr/local/www/themes/code-red/images/icons/icon_logs.gif new file mode 100644 index 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_match.gif b/usr/local/www/themes/code-red/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_match.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_match_d.gif b/usr/local/www/themes/code-red/images/icons/icon_match_d.gif new file mode 100644 index 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_minus.gif b/usr/local/www/themes/code-red/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_minus.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_open.gif b/usr/local/www/themes/code-red/images/icons/icon_open.gif new file mode 100755 index 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_other.gif b/usr/local/www/themes/code-red/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_other_d.gif b/usr/local/www/themes/code-red/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_out.gif b/usr/local/www/themes/code-red/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_out.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_out_d.gif b/usr/local/www/themes/code-red/images/icons/icon_out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_parp.gif b/usr/local/www/themes/code-red/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_parp.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif b/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif new file mode 100755 index 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_pass.gif b/usr/local/www/themes/code-red/images/icons/icon_pass.gif new file mode 100755 index 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_pass.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif b/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif new file mode 100755 index 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif b/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus.gif b/usr/local/www/themes/code-red/images/icons/icon_plus.gif new file mode 100755 index 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_plus.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif new file mode 100755 index 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif new file mode 100755 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif new file mode 100755 index 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif new file mode 100755 index 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif b/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif new file mode 100755 index 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif new file mode 100755 index 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reject.gif b/usr/local/www/themes/code-red/images/icons/icon_reject.gif new file mode 100755 index 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif b/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_right.gif b/usr/local/www/themes/code-red/images/icons/icon_right.gif new file mode 100755 index 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_right.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif b/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif new file mode 100755 index 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif new file mode 100755 index 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_running.gif b/usr/local/www/themes/code-red/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_running.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_start.gif b/usr/local/www/themes/code-red/images/icons/icon_service_start.gif new file mode 100755 index 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_start.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif b/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif new file mode 100755 index 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_status.gif b/usr/local/www/themes/code-red/images/icons/icon_service_status.gif new file mode 100644 index 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_status.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif b/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif new file mode 100755 index 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif b/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png b/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png new file mode 100755 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-group.png b/usr/local/www/themes/code-red/images/icons/icon_system-group.png new file mode 100755 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png b/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png new file mode 100755 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_system-user.png b/usr/local/www/themes/code-red/images/icons/icon_system-user.png new file mode 100755 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png new file mode 100755 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_system_logout.png b/usr/local/www/themes/code-red/images/icons/icon_system_logout.png new file mode 100755 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_trapped.gif b/usr/local/www/themes/code-red/images/icons/icon_trapped.gif new file mode 100755 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif b/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif b/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_up.gif b/usr/local/www/themes/code-red/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_up_d.gif b/usr/local/www/themes/code-red/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_wlan.gif b/usr/local/www/themes/code-red/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif b/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif b/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png new file mode 100755 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png b/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png new file mode 100755 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_x.gif b/usr/local/www/themes/code-red/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_x_d.gif b/usr/local/www/themes/code-red/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif b/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/icon_x_p.gif b/usr/local/www/themes/code-red/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/in.gif b/usr/local/www/themes/code-red/images/icons/in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/in.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/in_d.gif b/usr/local/www/themes/code-red/images/icons/in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/out.gif b/usr/local/www/themes/code-red/images/icons/out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/out.gif differ diff --git a/usr/local/www/themes/code-red/images/icons/out_d.gif b/usr/local/www/themes/code-red/images/icons/out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/code-red/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/code-red/images/log.png b/usr/local/www/themes/code-red/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/code-red/images/log.png differ diff --git a/usr/local/www/themes/code-red/images/logo.gif b/usr/local/www/themes/code-red/images/logo.gif new file mode 100755 index 000000000..3455d6b10 Binary files /dev/null and b/usr/local/www/themes/code-red/images/logo.gif differ diff --git a/usr/local/www/themes/code-red/images/logobig.jpg b/usr/local/www/themes/code-red/images/logobig.jpg new file mode 100755 index 000000000..62922ce27 Binary files /dev/null and b/usr/local/www/themes/code-red/images/logobig.jpg differ diff --git a/usr/local/www/themes/code-red/images/logon-background.gif b/usr/local/www/themes/code-red/images/logon-background.gif new file mode 100755 index 000000000..017610191 Binary files /dev/null and b/usr/local/www/themes/code-red/images/logon-background.gif differ diff --git a/usr/local/www/themes/code-red/images/menu_down.gif b/usr/local/www/themes/code-red/images/menu_down.gif new file mode 100755 index 000000000..137de8dd9 Binary files /dev/null and b/usr/local/www/themes/code-red/images/menu_down.gif differ diff --git a/usr/local/www/themes/code-red/images/menu_footer.gif b/usr/local/www/themes/code-red/images/menu_footer.gif new file mode 100755 index 000000000..d06faa403 Binary files /dev/null and b/usr/local/www/themes/code-red/images/menu_footer.gif differ diff --git a/usr/local/www/themes/code-red/images/menu_right.gif b/usr/local/www/themes/code-red/images/menu_right.gif new file mode 100755 index 000000000..881327cfc Binary files /dev/null and b/usr/local/www/themes/code-red/images/menu_right.gif differ diff --git a/usr/local/www/themes/code-red/images/menubgr.png b/usr/local/www/themes/code-red/images/menubgr.png new file mode 100755 index 000000000..45e0ec710 Binary files /dev/null and b/usr/local/www/themes/code-red/images/menubgr.png differ diff --git a/usr/local/www/themes/code-red/images/menubgr_footer.png b/usr/local/www/themes/code-red/images/menubgr_footer.png new file mode 100755 index 000000000..5d351e439 Binary files /dev/null and b/usr/local/www/themes/code-red/images/menubgr_footer.png differ diff --git a/usr/local/www/themes/code-red/images/menubgr_highlight.png b/usr/local/www/themes/code-red/images/menubgr_highlight.png new file mode 100755 index 000000000..f00582b53 Binary files /dev/null and b/usr/local/www/themes/code-red/images/menubgr_highlight.png differ diff --git a/usr/local/www/themes/code-red/images/metal_bgr.gif b/usr/local/www/themes/code-red/images/metal_bgr.gif new file mode 100755 index 000000000..a0ca6c85a Binary files /dev/null and b/usr/local/www/themes/code-red/images/metal_bgr.gif differ diff --git a/usr/local/www/themes/code-red/images/metal_bgr_red.gif b/usr/local/www/themes/code-red/images/metal_bgr_red.gif new file mode 100755 index 000000000..c4a1465de Binary files /dev/null and b/usr/local/www/themes/code-red/images/metal_bgr_red.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/background.gif b/usr/local/www/themes/code-red/images/misc/background.gif new file mode 100755 index 000000000..87cceb3ed Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/background.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/bar_blue.gif b/usr/local/www/themes/code-red/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/bar_gray.gif b/usr/local/www/themes/code-red/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/bar_left.gif b/usr/local/www/themes/code-red/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/bar_right.gif b/usr/local/www/themes/code-red/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png new file mode 100755 index 000000000..37db2fdcf Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png differ diff --git a/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png new file mode 100755 index 000000000..fba7af914 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png differ diff --git a/usr/local/www/themes/code-red/images/misc/button.gif b/usr/local/www/themes/code-red/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/button.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/graph.png b/usr/local/www/themes/code-red/images/misc/graph.png new file mode 100755 index 000000000..507ec75ea Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/graph.png differ diff --git a/usr/local/www/themes/code-red/images/misc/key_128.gif b/usr/local/www/themes/code-red/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/key_152.gif b/usr/local/www/themes/code-red/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/key_256.gif b/usr/local/www/themes/code-red/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/key_64.gif b/usr/local/www/themes/code-red/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/left_background.gif b/usr/local/www/themes/code-red/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/loader.gif b/usr/local/www/themes/code-red/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/loader.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/loader_all.gif b/usr/local/www/themes/code-red/images/misc/loader_all.gif new file mode 100755 index 000000000..cb6bc0ce1 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/loader_all.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/loader_filter.gif b/usr/local/www/themes/code-red/images/misc/loader_filter.gif new file mode 100755 index 000000000..b838b1736 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/loader_filter.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/loader_tab.gif b/usr/local/www/themes/code-red/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/logon.png b/usr/local/www/themes/code-red/images/misc/logon.png new file mode 100755 index 000000000..7921782db Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/logon.png differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_0.gif b/usr/local/www/themes/code-red/images/misc/plogo_0.gif new file mode 100755 index 000000000..160b56d54 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_0.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_1.gif b/usr/local/www/themes/code-red/images/misc/plogo_1.gif new file mode 100755 index 000000000..50342d64a Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_1.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_10.gif b/usr/local/www/themes/code-red/images/misc/plogo_10.gif new file mode 100755 index 000000000..06cba146e Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_10.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_2.gif b/usr/local/www/themes/code-red/images/misc/plogo_2.gif new file mode 100755 index 000000000..9d102307f Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_2.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_3.gif b/usr/local/www/themes/code-red/images/misc/plogo_3.gif new file mode 100755 index 000000000..1983f87ef Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_3.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_4.gif b/usr/local/www/themes/code-red/images/misc/plogo_4.gif new file mode 100755 index 000000000..f7158bdf2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_4.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_5.gif b/usr/local/www/themes/code-red/images/misc/plogo_5.gif new file mode 100755 index 000000000..c7af59324 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_5.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_6.gif b/usr/local/www/themes/code-red/images/misc/plogo_6.gif new file mode 100755 index 000000000..310eb220d Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_6.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_7.gif b/usr/local/www/themes/code-red/images/misc/plogo_7.gif new file mode 100755 index 000000000..06bd2e8b2 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_7.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_8.gif b/usr/local/www/themes/code-red/images/misc/plogo_8.gif new file mode 100755 index 000000000..c6ef56456 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_8.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/plogo_9.gif b/usr/local/www/themes/code-red/images/misc/plogo_9.gif new file mode 100755 index 000000000..4f0cd4da6 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/plogo_9.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/progress_bar.gif b/usr/local/www/themes/code-red/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/rrd_error.png b/usr/local/www/themes/code-red/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/code-red/images/misc/status_alerter.gif b/usr/local/www/themes/code-red/images/misc/status_alerter.gif new file mode 100755 index 000000000..7ff1e9512 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/status_alerter.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif b/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif new file mode 100755 index 000000000..2c3290808 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/status_left.gif b/usr/local/www/themes/code-red/images/misc/status_left.gif new file mode 100755 index 000000000..b5a29303b Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/status_left.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/status_page_loading.gif b/usr/local/www/themes/code-red/images/misc/status_page_loading.gif new file mode 100755 index 000000000..067ef18be Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/status_page_loading.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/status_reload_all.gif b/usr/local/www/themes/code-red/images/misc/status_reload_all.gif new file mode 100755 index 000000000..72de6bdff Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/status_reload_all.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif b/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif new file mode 100755 index 000000000..d72761ada Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/status_right.gif b/usr/local/www/themes/code-red/images/misc/status_right.gif new file mode 100755 index 000000000..bf66fdba5 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/status_right.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/tri_c.gif b/usr/local/www/themes/code-red/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/tri_c_black.gif b/usr/local/www/themes/code-red/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/tri_o.gif b/usr/local/www/themes/code-red/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/tri_o_black.gif b/usr/local/www/themes/code-red/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/code-red/images/misc/widget_loader.gif b/usr/local/www/themes/code-red/images/misc/widget_loader.gif new file mode 100755 index 000000000..ca35e2a18 Binary files /dev/null and b/usr/local/www/themes/code-red/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/code-red/images/new_tab_menu.png b/usr/local/www/themes/code-red/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/code-red/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/code-red/images/status.png b/usr/local/www/themes/code-red/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/code-red/images/status.png differ diff --git a/usr/local/www/themes/code-red/images/transparent.gif b/usr/local/www/themes/code-red/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/code-red/images/transparent.gif differ diff --git a/usr/local/www/themes/code-red/images/transparent_pixel.gif b/usr/local/www/themes/code-red/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/code-red/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/joincluster.gif b/usr/local/www/themes/code-red/images/wizards/initial/joincluster.gif new file mode 100755 index 000000000..a6f90a284 Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/joincluster.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/joincluster_mo.gif b/usr/local/www/themes/code-red/images/wizards/initial/joincluster_mo.gif new file mode 100755 index 000000000..3787d697e Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/joincluster_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/restore.gif b/usr/local/www/themes/code-red/images/wizards/initial/restore.gif new file mode 100755 index 000000000..eb8931f63 Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/restore.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/restore_mo.gif b/usr/local/www/themes/code-red/images/wizards/initial/restore_mo.gif new file mode 100755 index 000000000..2ee46c7b4 Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/restore_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/standalone.gif b/usr/local/www/themes/code-red/images/wizards/initial/standalone.gif new file mode 100755 index 000000000..aa035a47e Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/standalone.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/standalone_mo.gif b/usr/local/www/themes/code-red/images/wizards/initial/standalone_mo.gif new file mode 100755 index 000000000..c8066ef0a Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/standalone_mo.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/startnewcluster.gif b/usr/local/www/themes/code-red/images/wizards/initial/startnewcluster.gif new file mode 100755 index 000000000..dbe0ca2b8 Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/startnewcluster.gif differ diff --git a/usr/local/www/themes/code-red/images/wizards/initial/startnewcluster_mo.gif b/usr/local/www/themes/code-red/images/wizards/initial/startnewcluster_mo.gif new file mode 100755 index 000000000..83d980a7a Binary files /dev/null and b/usr/local/www/themes/code-red/images/wizards/initial/startnewcluster_mo.gif differ diff --git a/usr/local/www/themes/code-red/javascript/ie7/blank.gif b/usr/local/www/themes/code-red/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/code-red/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js new file mode 100755 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js new file mode 100755 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js new file mode 100755 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js new file mode 100755 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js new file mode 100755 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js new file mode 100755 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css b/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css new file mode 100755 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js b/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js new file mode 100755 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/code-red/javascript/transmenu-body.php b/usr/local/www/themes/code-red/javascript/transmenu-body.php new file mode 100755 index 000000000..ada3d0c60 --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/transmenu-body.php @@ -0,0 +1,51 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetBodyJS() { + global $rootmenu; + + if (isset($rootmenu)) { + return $rootmenu->getMenuJScript(); + } else if (empty($rootmenu)) { + return "alert('No rootmenu object found.');"; + } else { + return "alert('No JavaScript attached to rootmenu object.');"; + } +} + +?> diff --git a/usr/local/www/themes/code-red/javascript/transmenu-head.php b/usr/local/www/themes/code-red/javascript/transmenu-head.php new file mode 100755 index 000000000..6eea15d09 --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/transmenu-head.php @@ -0,0 +1,85 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetHeadJS() { + global $g, $rootmenu; + + $transmenu_stub =<<getChildren() as $component) { + $id = "mnua_" . str_replace(" ", "", strtolower($component->getID())); + + $childJScript .=<< diff --git a/usr/local/www/themes/code-red/javascript/transmenu.org b/usr/local/www/themes/code-red/javascript/transmenu.org new file mode 100755 index 000000000..6c9e353cd --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/transmenu.org @@ -0,0 +1,785 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * + * Customizable multi-level animated DHTML menus with transparency. + * + * Copyright 2003-2004, Aaron Boodman (www.youngpup.net) + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ================================================================================================= + * updates: + * 04.19.04 fixed cascade problem with menus nested greater than two levels. + * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu. + * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;) + * also made gecko check a little more strict by specifying build no. + * ============================================================================================== */ + + + +//================================================================================================== +// Configuration properties +//================================================================================================== +TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif +TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat +TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat +TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed) +TransMenu.menuPadding = 5; // padding between menu border and items grid +TransMenu.itemPadding = 3; // additional padding around each item +TransMenu.shadowSize = 2; // size of shadow under menu +TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge +TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS) +TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5 +TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS) +TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5 +TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu +TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu + + +//================================================================================================== +// Internal use properties +//================================================================================================== +TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4}; +TransMenu.direction = {down:1,right:2}; +TransMenu.registry = []; +TransMenu._maxZ = 100; + + + +//================================================================================================== +// Static methods +//================================================================================================== +// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0 +TransMenu.isSupported = function() { + var ua = navigator.userAgent.toLowerCase(); + var pf = navigator.platform.toLowerCase(); + var an = navigator.appName; + var r = false; + + if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0 + else if (an == "Microsoft Internet Explorer") { + if (document.getElementById) { // ie5.1+ mac,win + if (pf.indexOf("mac") == 0) { + r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1; + } + else r = true; + } + } + + return r; +} + +// call this in onload once menus have been created +TransMenu.initialize = function() { + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + menu.initialize(); + } +} + +// call this in document body to write out menu html +TransMenu.renderAll = function() { + var aMenuHtml = []; + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + aMenuHtml[i] = menu.toString(); + } + document.write(aMenuHtml.join("")); +} + +//================================================================================================== +// TransMenu constructor (only called internally) +//================================================================================================== +// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a +// reference to an HTML element, or a TransMenuItem from an existing menu. +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menu from actuator +// iTop : Top pixel offset of menu from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +// parentMenuSet : Menuset this menu will be added to. +//================================================================================================== +function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) { + // public methods + this.addItem = addItem; + this.addMenu = addMenu; + this.toString = toString; + this.initialize = initialize; + this.isOpen = false; + this.show = show; + this.hide = hide; + this.items = []; + + // events + this.onactivate = new Function(); // when the menu starts to slide open + this.ondeactivate = new Function(); // when the menu finishes sliding closed + this.onmouseover = new Function(); // when the menu has been moused over + this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future + this.ondequeue = new Function(); + + // initialization + this.index = TransMenu.registry.length; + TransMenu.registry[this.index] = this; + + var id = "TransMenu" + this.index; + var contentHeight = null; + var contentWidth = null; + var childMenuSet = null; + var animating = false; + var childMenus = []; + var slideAccel = -1; + var elmCache = null; + var ready = false; + var _this = this; + var a = null; + + var pos = iDirection == TransMenu.direction.down ? "top" : "left"; + var dim = null; + + // private and public method implimentations + function addItem(sText, sUrl) { + var item = new TransMenuItem(sText, sUrl, this); + item._index = this.items.length; + this.items[item._index] = item; + } + + function addMenu(oMenuItem) { + if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here"); + + if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight); + + var m = childMenuSet.addMenu(oMenuItem); + + childMenus[oMenuItem._index] = m; + m.onmouseover = child_mouseover; + m.ondeactivate = child_deactivate; + m.onqueue = child_queue; + m.ondequeue = child_dequeue; + + return m; + } + + function initialize() { + initCache(); + initEvents(); + initSize(); + ready = true; + } + + function show() { + //dbg_dump("show"); + if (ready) { + _this.isOpen = true; + animating = true; + setContainerPos(); + elmCache["clip"].style.visibility = "visible"; + elmCache["clip"].style.zIndex = TransMenu._maxZ++; + //dbg_dump("maxZ: " + TransMenu._maxZ); + slideStart(); + _this.onactivate(); + } + } + + function hide() { + if (ready) { + _this.isOpen = false; + animating = true; + + for (var i = 0, item = null; item = elmCache.item[i]; i++) + dehighlight(item); + + if (childMenuSet) childMenuSet.hide(); + + slideStart(); + _this.ondeactivate(); + } + } + + function setContainerPos() { + var sub = oActuator.constructor == TransMenuItem; + var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator; + var el = act; + + var x = 0; + var y = 0; + + + var minX = 0; + var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width); + var minY = 0; + var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height); + + // add up all offsets... subtract any scroll offset + while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) { + x += el.offsetLeft; + y += el.offsetTop; + + if (el.scrollLeft) x -= el.scrollLeft; + if (el.scrollTop) y -= el.scrollTop; + + el = el.offsetParent; + } + + if (oActuator.constructor == TransMenuItem) { + x += parseInt(el.parentNode.style.left); + y += parseInt(el.parentNode.style.top); + } + + switch (iReferencePoint) { + case TransMenu.reference.topLeft: + break; + case TransMenu.reference.topRight: + x += act.offsetWidth; + break; + case TransMenu.reference.bottomLeft: + y += act.offsetHeight; + break; + case TransMenu.reference.bottomRight: + x += act.offsetWidth; + y += act.offsetHeight; + break; + } + + x += iLeft; + y += iTop; + + x = Math.max(Math.min(x, maxX), minX); + y = Math.max(Math.min(y, maxY), minY); + + elmCache["clip"].style.left = x + "px"; + elmCache["clip"].style.top = y + "px"; + } + + function slideStart() { + var x0 = parseInt(elmCache["content"].style[pos]); + var x1 = _this.isOpen ? 0 : -dim; + + if (a != null) a.stop(); + a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel); + + a.onframe = slideFrame; + a.onend = slideEnd; + + a.start(); + } + + function slideFrame(x) { + elmCache["content"].style[pos] = x + "px"; + } + + function slideEnd() { + if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden"; + animating = false; + } + + function initSize() { + // everything is based off the size of the items table... + var ow = elmCache["items"].offsetWidth; + var oh = elmCache["items"].offsetHeight; + var ua = navigator.userAgent.toLowerCase(); + + // clipping container should be ow/oh + the size of the shadow + elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px"; + elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px"; + + // same with content... + elmCache["content"].style.width = ow + TransMenu.shadowSize + "px"; + elmCache["content"].style.height = oh + TransMenu.shadowSize + "px"; + + contentHeight = oh + TransMenu.shadowSize; + contentWidth = ow + TransMenu.shadowSize; + + dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth; + + // set initially closed + elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px"; + elmCache["clip"].style.visibility = "hidden"; + + // if *not* mac/ie 5 + if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) { + // set background div to offset size + elmCache["background"].style.width = ow + "px"; + elmCache["background"].style.height = oh + "px"; + elmCache["background"].style.backgroundColor = TransMenu.backgroundColor; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px"; + elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor; + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px"; + elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor; + } + // mac ie is a little different because we use a PNG for the transparency + else { + // set background div to offset size + elmCache["background"].firstChild.src = TransMenu.backgroundPng; + elmCache["background"].firstChild.width = ow; + elmCache["background"].firstChild.height = oh; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize; + elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize); + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize; + elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset; + } + } + + function initCache() { + var menu = document.getElementById(id); + var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing + + elmCache = {}; + elmCache["clip"] = menu; + elmCache["item"] = []; + + for (var i = 0, elm = null; elm = all[i]; i++) { + switch (elm.className) { + case "items": + case "content": + case "background": + case "shadowRight": + case "shadowBottom": + elmCache[elm.className] = elm; + break; + case "item": + elm._index = elmCache["item"].length; + elmCache["item"][elm._index] = elm; + break; + } + } + + // hack! + _this.elmCache = elmCache; + } + + function initEvents() { + // hook item mouseover + for (var i = 0, item = null; item = elmCache.item[i]; i++) { + item.onmouseover = item_mouseover; + item.onmouseout = item_mouseout; + item.onclick = item_click; + } + + // hook actuation + if (typeof oActuator.tagName != "undefined") { + oActuator.onmouseover = actuator_mouseover; + oActuator.onmouseout = actuator_mouseout; + } + + // hook menu mouseover + elmCache["content"].onmouseover = content_mouseover; + elmCache["content"].onmouseout = content_mouseout; + } + + function highlight(oRow) { + oRow.className = "item hover"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOn; + } + + function dehighlight(oRow) { + oRow.className = "item"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOff; + } + + function item_mouseover() { + if (!animating) { + highlight(this); + + if (childMenus[this._index]) + childMenuSet.showMenu(childMenus[this._index]); + else if (childMenuSet) childMenuSet.hide(); + } + } + + function item_mouseout() { + if (!animating) { + if (childMenus[this._index]) + childMenuSet.hideMenu(childMenus[this._index]); + else // otherwise child_deactivate will do this + dehighlight(this); + } + } + + function item_click() { + if (!animating) { + if (_this.items[this._index].url) + location.href = _this.items[this._index].url; + } + } + + function actuator_mouseover() { + parentMenuSet.showMenu(_this); + } + + function actuator_mouseout() { + parentMenuSet.hideMenu(_this); + } + + function content_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + _this.onmouseover(); + } + } + + function content_mouseout() { + if (!animating) { + parentMenuSet.hideMenu(_this); + } + } + + function child_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + } + } + + function child_deactivate() { + for (var i = 0; i < childMenus.length; i++) { + if (childMenus[i] == this) { + dehighlight(elmCache["item"][i]); + break; + } + } + } + + function child_queue() { + parentMenuSet.hideMenu(_this); + } + + function child_dequeue() { + parentMenuSet.showMenu(_this); + } + + function toString() { + var aHtml = []; + var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : ""); + + for (var i = 0, item = null; item = this.items[i]; i++) { + aHtml[i] = item.toString(childMenus[i]); + } + + return '

                            ' + + '
                            ' + + '' + + aHtml.join('') + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            '; + } +} + + +//================================================================================================== +// TransMenuSet +//================================================================================================== +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menus from actuator +// iTop : Top pixel offset of menus from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +//================================================================================================== +TransMenuSet.registry = []; + +function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) { + // public methods + this.addMenu = addMenu; + this.showMenu = showMenu; + this.hideMenu = hideMenu; + this.hide = hide; + this.hideCurrent = hideCurrent; + + // initialization + var menus = []; + var _this = this; + var current = null; + + this.index = TransMenuSet.registry.length; + TransMenuSet.registry[this.index] = this; + + // method implimentations... + 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) { + // close currently open menu + if (current != null) hide(current); + + // set current menu to this one + current = oMenu; + + // if this menu is closed, open it + oMenu.show(); + } + else { + // hide pending calls to close this menu + cancelHide(oMenu); + } + } + + function hideMenu(oMenu) { + //dbg_dump("hideMenu a " + oMenu.index); + if (current == oMenu && oMenu.isOpen) { + //dbg_dump("hideMenu b " + oMenu.index); + if (!oMenu.hideTimer) scheduleHide(oMenu); + } + } + + function scheduleHide(oMenu) { + //dbg_dump("scheduleHide " + oMenu.index); + oMenu.onqueue(); + oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay); + } + + function cancelHide(oMenu) { + //dbg_dump("cancelHide " + oMenu.index); + if (oMenu.hideTimer) { + oMenu.ondequeue(); + window.clearTimeout(oMenu.hideTimer); + oMenu.hideTimer = null; + } + } + + function hide(oMenu) { + if (!oMenu && current) oMenu = current; + + if (oMenu && current == oMenu && oMenu.isOpen) { + hideCurrent(); + } + } + + function hideCurrent() { + if (null != current) { + cancelHide(current); + current.hideTimer = null; + current.hide(); + current = null; + } + } +} + +//================================================================================================== +// TransMenuItem (internal) +// represents an item in a dropdown +//================================================================================================== +// sText : The item display text +// sUrl : URL to load when the item is clicked +// oParent : Menu this item is a part of +//================================================================================================== +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 + '' + + ''; + } +} + + + + + + +//===================================================================== +// Accel[erated] [an]imation object +// change a property of an object over time in an accelerated fashion +//===================================================================== +// obj : reference to the object whose property you'd like to animate +// prop : property you would like to change eg: "left" +// to : final value of prop +// time : time the animation should take to run +// zip : optional. specify the zippiness of the acceleration. pick a +// number between -1 and 1 where -1 is full decelerated, 1 is +// full accelerated, and 0 is linear (no acceleration). default +// is 0. +// unit : optional. specify the units for use with prop. default is +// "px". +//===================================================================== +// bezier functions lifted from the lib_animation.js file in the +// 13th Parallel API. www.13thparallel.org +//===================================================================== + +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(); +} + + + +//===================================================================== +// public methods +//===================================================================== + +// after you create an accelimation, you call this to start it-a runnin' +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); +} + +// and if you need to stop it early for some reason... +Accelimation.prototype.stop = function() { + Accelimation._remove(this); +} + + + +//===================================================================== +// private methods +//===================================================================== + +// paints one frame. gets called by Accelimation._paintAll. +Accelimation.prototype._paint = function(time) { + if (time < this.t1) { + var elapsed = time - this.t0; + this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2)); + } + else this._end(); +} + +// ends the animation +Accelimation.prototype._end = function() { + Accelimation._remove(this); + this.onframe(this.x1); + this.onend(); +} + + + + +//===================================================================== +// static methods (all private) +//===================================================================== + +// add a function to the list of ones to call periodically +Accelimation._add = function(o) { + var index = this.instances.length; + this.instances[index] = o; + // if this is the first one, start the engine + if (this.instances.length == 1) { + this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes); + } +} + +// remove a function from the list +Accelimation._remove = function(o) { + for (var i = 0; i < this.instances.length; i++) { + if (o == this.instances[i]) { + this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) ); + break; + } + } + // if that was the last one, stop the engine + if (this.instances.length == 0) { + window.clearInterval(this.timerID); + this.timerID = null; + } +} + +// "engine" - call each function in the list every so often +Accelimation._paintAll = function() { + var now = new Date().getTime(); + for (var i = 0; i < this.instances.length; i++) { + this.instances[i]._paint(now); + } +} + + +// Bezier functions: +Accelimation._B1 = function(t) { return t*t*t } +Accelimation._B2 = function(t) { return 3*t*t*(1-t) } +Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) } +Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) } + + +//Finds the coordinates of a point at a certain stage through a bezier curve +Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) { + return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent); +} + + +//===================================================================== +// static properties +//===================================================================== + +Accelimation.instances = []; +Accelimation.targetRes = 10; +Accelimation.timerID = null; + + +//===================================================================== +// IE win memory cleanup +//===================================================================== + +if (window.attachEvent) { + var cearElementProps = [ + 'data', + 'onmouseover', + 'onmouseout', + 'onmousedown', + 'onmouseup', + 'ondblclick', + 'onclick', + 'onselectstart', + 'oncontextmenu' + ]; + + window.attachEvent("onunload", function() { + var el; + for(var d = document.all.length;d--;){ + el = document.all[d]; + for(var c = cearElementProps.length;c--;){ + el[cearElementProps[c]] = null; + } + } + }); +} \ No newline at end of file diff --git a/usr/local/www/themes/code-red/javascript/transmenuC.js b/usr/local/www/themes/code-red/javascript/transmenuC.js new file mode 100755 index 000000000..88626c753 --- /dev/null +++ b/usr/local/www/themes/code-red/javascript/transmenuC.js @@ -0,0 +1,86 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * Customizable multi-level animated DHTML menus with transparency. + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ============================================================================================== */ +TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;} +else r=true;}} +return r;} +TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}} +TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();} +document.write(aMenuHtml.join(""));} +function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;} +function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;} +function initialize(){initCache();initEvents();initSize();ready=true;} +function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}} +function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}} +function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;} +if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);} +switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;} +x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";} +function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();} +function slideFrame(x){elmCache["content"].style[pos]=x+"px";} +function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;} +function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;} +else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}} +function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}} +_this.elmCache=elmCache;} +function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;} +if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;} +elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;} +function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;} +function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;} +function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}} +function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}} +function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}} +function actuator_mouseover(){parentMenuSet.showMenu(_this);} +function actuator_mouseout(){parentMenuSet.hideMenu(_this);} +function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}} +function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}} +function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}} +function child_deactivate(){for(var i=0;i'+'
                            '+''+aHtml.join('')+'
                            '+'
                            '+'
                            '+'
                            '+'

                            ';}} +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 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/themes/metallic/apple-touch-icon.png differ diff --git a/usr/local/www/themes/metallic/bottom-loader.js b/usr/local/www/themes/metallic/bottom-loader.js new file mode 100644 index 000000000..a21f775a4 --- /dev/null +++ b/usr/local/www/themes/metallic/bottom-loader.js @@ -0,0 +1,10 @@ +// 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 000000000..65498f1b0 Binary files /dev/null and b/usr/local/www/themes/metallic/images/alert_bgr.gif differ diff --git a/usr/local/www/themes/metallic/images/footer.gif b/usr/local/www/themes/metallic/images/footer.gif new file mode 100755 index 000000000..f7c2af79a Binary files /dev/null and b/usr/local/www/themes/metallic/images/footer.gif differ 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 000000000..0a4406856 Binary files /dev/null and b/usr/local/www/themes/metallic/images/header.gif differ 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 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/metallic/images/help.png differ diff --git a/usr/local/www/themes/metallic/images/horizontal.gif b/usr/local/www/themes/metallic/images/horizontal.gif new file mode 100755 index 000000000..a280dcbab Binary files /dev/null and b/usr/local/www/themes/metallic/images/horizontal.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/favicon.ico b/usr/local/www/themes/metallic/images/icons/favicon.ico new file mode 100755 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/favicon.ico differ 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 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif differ 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 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_advanced.gif differ 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 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_alert.gif b/usr/local/www/themes/metallic/images/icons/icon_alert.gif new file mode 100755 index 000000000..764694120 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_alert.gif differ 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 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif differ 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 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif differ 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 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif b/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif new file mode 100755 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif differ 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 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_block.gif b/usr/local/www/themes/metallic/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_block.gif differ 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 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_block_add.gif differ 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 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_block_d.gif differ 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 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_cal.gif b/usr/local/www/themes/metallic/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_cal.gif differ 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 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_carp.gif b/usr/local/www/themes/metallic/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_carp.gif differ 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 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif differ 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 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_chain.png differ 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 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_check.gif differ 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 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif differ 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 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif differ 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 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_close.gif b/usr/local/www/themes/metallic/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_close.gif differ 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 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_down.gif b/usr/local/www/themes/metallic/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_down.gif differ 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 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_e.gif b/usr/local/www/themes/metallic/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_e.gif differ 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 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif differ 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 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_error.gif differ 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 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_de.png b/usr/local/www/themes/metallic/images/icons/icon_flag_de.png new file mode 100755 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_flag_de.png differ 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 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_flag_en.png differ 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 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png new file mode 100755 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png differ 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 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png new file mode 100755 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png new file mode 100755 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png new file mode 100755 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png new file mode 100755 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png new file mode 100755 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png differ 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 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png new file mode 100755 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png differ 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 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png differ 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 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png new file mode 100755 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png b/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png new file mode 100755 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif b/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif differ 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 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_help.gif differ 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 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif differ 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 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif differ 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 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif differ 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 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_in_d.gif b/usr/local/www/themes/metallic/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif b/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif new file mode 100755 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif differ 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 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif b/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_left.gif b/usr/local/www/themes/metallic/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_left.gif differ 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 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_left_d.gif differ 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 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif differ 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 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_log.gif differ 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 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_log_s.gif b/usr/local/www/themes/metallic/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_log_s.gif differ 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 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif differ 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 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_match.gif b/usr/local/www/themes/metallic/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_match.gif differ 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 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_minus.gif b/usr/local/www/themes/metallic/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_minus.gif differ 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 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_other.gif b/usr/local/www/themes/metallic/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_other_d.gif b/usr/local/www/themes/metallic/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_out.gif b/usr/local/www/themes/metallic/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_out.gif differ 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 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_parp.gif b/usr/local/www/themes/metallic/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_parp.gif differ 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 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif differ 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 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_pass.gif differ 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 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif b/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif differ 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 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_plus.gif differ 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 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif new file mode 100755 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif differ 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 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif differ 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 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif differ 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 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif differ 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 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif differ 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 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif differ 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 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif differ 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 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif differ 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 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif differ 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 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif b/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif differ 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 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_right.gif differ 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 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif differ 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 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_running.gif b/usr/local/www/themes/metallic/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_running.gif differ 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 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_start.gif differ 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 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif differ 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 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_status.gif differ 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 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif b/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png b/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png new file mode 100755 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-group.png b/usr/local/www/themes/metallic/images/icons/icon_system-group.png new file mode 100755 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png b/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png new file mode 100755 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_system-user.png b/usr/local/www/themes/metallic/images/icons/icon_system-user.png new file mode 100755 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png new file mode 100755 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_system_logout.png b/usr/local/www/themes/metallic/images/icons/icon_system_logout.png new file mode 100755 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_trapped.gif b/usr/local/www/themes/metallic/images/icons/icon_trapped.gif new file mode 100755 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif b/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif b/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_up.gif b/usr/local/www/themes/metallic/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_up_d.gif b/usr/local/www/themes/metallic/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_wlan.gif b/usr/local/www/themes/metallic/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif b/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif b/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png new file mode 100755 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png b/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png new file mode 100755 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_x.gif b/usr/local/www/themes/metallic/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_x_d.gif b/usr/local/www/themes/metallic/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif b/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/icon_x_p.gif b/usr/local/www/themes/metallic/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/in.gif b/usr/local/www/themes/metallic/images/icons/in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/in.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/in_d.gif b/usr/local/www/themes/metallic/images/icons/in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/out.gif b/usr/local/www/themes/metallic/images/icons/out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/out.gif differ diff --git a/usr/local/www/themes/metallic/images/icons/out_d.gif b/usr/local/www/themes/metallic/images/icons/out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/metallic/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/metallic/images/log.png b/usr/local/www/themes/metallic/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/metallic/images/log.png differ diff --git a/usr/local/www/themes/metallic/images/logo.gif b/usr/local/www/themes/metallic/images/logo.gif new file mode 100755 index 000000000..08638ff12 Binary files /dev/null and b/usr/local/www/themes/metallic/images/logo.gif differ diff --git a/usr/local/www/themes/metallic/images/logobig.jpg b/usr/local/www/themes/metallic/images/logobig.jpg new file mode 100755 index 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/themes/metallic/images/logobig.jpg differ diff --git a/usr/local/www/themes/metallic/images/menu_down.gif b/usr/local/www/themes/metallic/images/menu_down.gif new file mode 100755 index 000000000..137de8dd9 Binary files /dev/null and b/usr/local/www/themes/metallic/images/menu_down.gif differ diff --git a/usr/local/www/themes/metallic/images/menu_footer.gif b/usr/local/www/themes/metallic/images/menu_footer.gif new file mode 100755 index 000000000..d06faa403 Binary files /dev/null and b/usr/local/www/themes/metallic/images/menu_footer.gif differ diff --git a/usr/local/www/themes/metallic/images/menu_right.gif b/usr/local/www/themes/metallic/images/menu_right.gif new file mode 100755 index 000000000..881327cfc Binary files /dev/null and b/usr/local/www/themes/metallic/images/menu_right.gif differ diff --git a/usr/local/www/themes/metallic/images/metal_bgr.gif b/usr/local/www/themes/metallic/images/metal_bgr.gif new file mode 100755 index 000000000..a0ca6c85a Binary files /dev/null and b/usr/local/www/themes/metallic/images/metal_bgr.gif differ diff --git a/usr/local/www/themes/metallic/images/metal_bgr_red.gif b/usr/local/www/themes/metallic/images/metal_bgr_red.gif new file mode 100755 index 000000000..c4a1465de Binary files /dev/null and b/usr/local/www/themes/metallic/images/metal_bgr_red.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/bar_blue.gif b/usr/local/www/themes/metallic/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/bar_gray.gif b/usr/local/www/themes/metallic/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/bar_left.gif b/usr/local/www/themes/metallic/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/bar_right.gif b/usr/local/www/themes/metallic/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png new file mode 100755 index 000000000..37db2fdcf Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png differ diff --git a/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png new file mode 100755 index 000000000..fba7af914 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png differ diff --git a/usr/local/www/themes/metallic/images/misc/button.gif b/usr/local/www/themes/metallic/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/button.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/graph.png b/usr/local/www/themes/metallic/images/misc/graph.png new file mode 100755 index 000000000..507ec75ea Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/graph.png differ diff --git a/usr/local/www/themes/metallic/images/misc/key_128.gif b/usr/local/www/themes/metallic/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/key_152.gif b/usr/local/www/themes/metallic/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/key_256.gif b/usr/local/www/themes/metallic/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/key_64.gif b/usr/local/www/themes/metallic/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/left_background.gif b/usr/local/www/themes/metallic/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/loader.gif b/usr/local/www/themes/metallic/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/loader.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/loader_all.gif b/usr/local/www/themes/metallic/images/misc/loader_all.gif new file mode 100755 index 000000000..cb6bc0ce1 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/loader_all.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/loader_filter.gif b/usr/local/www/themes/metallic/images/misc/loader_filter.gif new file mode 100755 index 000000000..b838b1736 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/loader_filter.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/loader_tab.gif b/usr/local/www/themes/metallic/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/logon.png b/usr/local/www/themes/metallic/images/misc/logon.png new file mode 100755 index 000000000..baf8a9d19 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/logon.png differ diff --git a/usr/local/www/themes/metallic/images/misc/progress_bar.gif b/usr/local/www/themes/metallic/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/rrd_error.png b/usr/local/www/themes/metallic/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/metallic/images/misc/status_alerter.gif b/usr/local/www/themes/metallic/images/misc/status_alerter.gif new file mode 100755 index 000000000..7ff1e9512 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/status_alerter.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif b/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif new file mode 100755 index 000000000..2c3290808 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/status_left.gif b/usr/local/www/themes/metallic/images/misc/status_left.gif new file mode 100755 index 000000000..b5a29303b Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/status_left.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/status_page_loading.gif b/usr/local/www/themes/metallic/images/misc/status_page_loading.gif new file mode 100755 index 000000000..067ef18be Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/status_page_loading.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/status_reload_all.gif b/usr/local/www/themes/metallic/images/misc/status_reload_all.gif new file mode 100755 index 000000000..72de6bdff Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/status_reload_all.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif b/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif new file mode 100755 index 000000000..d72761ada Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/status_right.gif b/usr/local/www/themes/metallic/images/misc/status_right.gif new file mode 100755 index 000000000..bf66fdba5 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/status_right.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/tri_c.gif b/usr/local/www/themes/metallic/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/tri_c_black.gif b/usr/local/www/themes/metallic/images/misc/tri_c_black.gif new file mode 100755 index 000000000..3d33d49e7 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/tri_o.gif b/usr/local/www/themes/metallic/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/tri_o_black.gif b/usr/local/www/themes/metallic/images/misc/tri_o_black.gif new file mode 100755 index 000000000..4ed30d107 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/metallic/images/misc/widget_loader.gif b/usr/local/www/themes/metallic/images/misc/widget_loader.gif new file mode 100755 index 000000000..fad101f42 Binary files /dev/null and b/usr/local/www/themes/metallic/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/metallic/images/new_tab_menu.png b/usr/local/www/themes/metallic/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/metallic/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/metallic/images/status.png b/usr/local/www/themes/metallic/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/metallic/images/status.png differ diff --git a/usr/local/www/themes/metallic/images/transparent.gif b/usr/local/www/themes/metallic/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/metallic/images/transparent.gif differ diff --git a/usr/local/www/themes/metallic/images/transparent_pixel.gif b/usr/local/www/themes/metallic/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/metallic/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/joincluster.gif b/usr/local/www/themes/metallic/images/wizards/initial/joincluster.gif new file mode 100755 index 000000000..a6f90a284 Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/joincluster.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/joincluster_mo.gif b/usr/local/www/themes/metallic/images/wizards/initial/joincluster_mo.gif new file mode 100755 index 000000000..3787d697e Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/joincluster_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/restore.gif b/usr/local/www/themes/metallic/images/wizards/initial/restore.gif new file mode 100755 index 000000000..eb8931f63 Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/restore.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/restore_mo.gif b/usr/local/www/themes/metallic/images/wizards/initial/restore_mo.gif new file mode 100755 index 000000000..2ee46c7b4 Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/restore_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/standalone.gif b/usr/local/www/themes/metallic/images/wizards/initial/standalone.gif new file mode 100755 index 000000000..aa035a47e Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/standalone.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/standalone_mo.gif b/usr/local/www/themes/metallic/images/wizards/initial/standalone_mo.gif new file mode 100755 index 000000000..c8066ef0a Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/standalone_mo.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/startnewcluster.gif b/usr/local/www/themes/metallic/images/wizards/initial/startnewcluster.gif new file mode 100755 index 000000000..dbe0ca2b8 Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/startnewcluster.gif differ diff --git a/usr/local/www/themes/metallic/images/wizards/initial/startnewcluster_mo.gif b/usr/local/www/themes/metallic/images/wizards/initial/startnewcluster_mo.gif new file mode 100755 index 000000000..83d980a7a Binary files /dev/null and b/usr/local/www/themes/metallic/images/wizards/initial/startnewcluster_mo.gif differ diff --git a/usr/local/www/themes/metallic/javascript/ie7/blank.gif b/usr/local/www/themes/metallic/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/metallic/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js new file mode 100644 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js new file mode 100644 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js new file mode 100644 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js new file mode 100644 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js new file mode 100644 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js new file mode 100644 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css b/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css new file mode 100644 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js b/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js new file mode 100644 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/metallic/loader.js b/usr/local/www/themes/metallic/loader.js new file mode 100644 index 000000000..9b435d512 --- /dev/null +++ b/usr/local/www/themes/metallic/loader.js @@ -0,0 +1,29 @@ +//'); +} + +document.write(''); + +//]]> diff --git a/usr/local/www/themes/metallic/login.css b/usr/local/www/themes/metallic/login.css new file mode 100644 index 000000000..f8abdfcb2 --- /dev/null +++ b/usr/local/www/themes/metallic/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/metallic/new_tab_menu.css b/usr/local/www/themes/metallic/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/metallic/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/metallic/no_big_logo b/usr/local/www/themes/metallic/no_big_logo new file mode 100644 index 000000000..6e5c70d7a --- /dev/null +++ b/usr/local/www/themes/metallic/no_big_logo @@ -0,0 +1 @@ +NO! DONT! \ No newline at end of file diff --git a/usr/local/www/themes/metallic/rrdcolors.inc.php b/usr/local/www/themes/metallic/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/metallic/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/all.css b/usr/local/www/themes/nervecenter/all.css new file mode 100644 index 000000000..d66e36c4b --- /dev/null +++ b/usr/local/www/themes/nervecenter/all.css @@ -0,0 +1,1300 @@ +/* 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; +} + +.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; +} + +body { + margin: 0px auto; + background: url('images/background.gif') 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; +} + +/* style of disabled formelements */ +#wrap div {margin:1em 0} +[disabled] { + color:#666666; + background:#eeeeee; +} + +/* 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; + 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: 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 { + 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: 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 #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: 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/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-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; + 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/nervecenter/apple-touch-icon.png b/usr/local/www/themes/nervecenter/apple-touch-icon.png new file mode 100755 index 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/themes/nervecenter/apple-touch-icon.png differ diff --git a/usr/local/www/themes/nervecenter/bottom-loader.js b/usr/local/www/themes/nervecenter/bottom-loader.js new file mode 100644 index 000000000..a21f775a4 --- /dev/null +++ b/usr/local/www/themes/nervecenter/bottom-loader.js @@ -0,0 +1,10 @@ +// diff --git a/usr/local/www/themes/nervecenter/favicon.ico b/usr/local/www/themes/nervecenter/favicon.ico new file mode 100644 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/nervecenter/favicon.ico differ diff --git a/usr/local/www/themes/nervecenter/graphlink.css b/usr/local/www/themes/nervecenter/graphlink.css new file mode 100644 index 000000000..13f65f0fb --- /dev/null +++ b/usr/local/www/themes/nervecenter/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/nervecenter/images/alert_bgr.png b/usr/local/www/themes/nervecenter/images/alert_bgr.png new file mode 100755 index 000000000..39901be8d Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/alert_bgr.png differ diff --git a/usr/local/www/themes/nervecenter/images/background.gif b/usr/local/www/themes/nervecenter/images/background.gif new file mode 100755 index 000000000..bdfa5b35b Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/background.gif differ diff --git a/usr/local/www/themes/nervecenter/images/background.png b/usr/local/www/themes/nervecenter/images/background.png new file mode 100755 index 000000000..e68893d7c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/background.png differ diff --git a/usr/local/www/themes/nervecenter/images/footer.png b/usr/local/www/themes/nervecenter/images/footer.png new file mode 100755 index 000000000..90b10227c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/footer.png differ diff --git a/usr/local/www/themes/nervecenter/images/header.png b/usr/local/www/themes/nervecenter/images/header.png new file mode 100755 index 000000000..3b38584bf Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/header.png differ diff --git a/usr/local/www/themes/nervecenter/images/help.png b/usr/local/www/themes/nervecenter/images/help.png new file mode 100755 index 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/help.png differ diff --git a/usr/local/www/themes/nervecenter/images/horizontal.gif b/usr/local/www/themes/nervecenter/images/horizontal.gif new file mode 100755 index 000000000..a280dcbab Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/horizontal.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/favicon.ico b/usr/local/www/themes/nervecenter/images/icons/favicon.ico new file mode 100644 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/favicon.ico differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif b/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif new file mode 100755 index 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif b/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif new file mode 100755 index 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif b/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif new file mode 100755 index 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif new file mode 100755 index 000000000..764694120 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif new file mode 100755 index 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif new file mode 100755 index 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif new file mode 100755 index 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif new file mode 100755 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif new file mode 100755 index 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_block.gif b/usr/local/www/themes/nervecenter/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_block.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif b/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif new file mode 100755 index 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif new file mode 100755 index 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif b/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif new file mode 100755 index 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif b/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif new file mode 100755 index 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif b/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif new file mode 100755 index 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_chain.png b/usr/local/www/themes/nervecenter/images/icons/icon_chain.png new file mode 100644 index 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_chain.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_check.gif b/usr/local/www/themes/nervecenter/images/icons/icon_check.gif new file mode 100755 index 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_check.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif b/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif new file mode 100755 index 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif b/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif new file mode 100755 index 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif b/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif new file mode 100755 index 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_close.gif b/usr/local/www/themes/nervecenter/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_close.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif b/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif new file mode 100755 index 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_down.gif b/usr/local/www/themes/nervecenter/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_down.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif new file mode 100755 index 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_e.gif b/usr/local/www/themes/nervecenter/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_e.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif new file mode 100755 index 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_error.gif b/usr/local/www/themes/nervecenter/images/icons/icon_error.gif new file mode 100755 index 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_error.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif b/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif new file mode 100755 index 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png new file mode 100755 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png new file mode 100755 index 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png new file mode 100755 index 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png new file mode 100755 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png new file mode 100755 index 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png new file mode 100755 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png new file mode 100755 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png new file mode 100755 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png new file mode 100755 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png new file mode 100755 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png new file mode 100755 index 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png new file mode 100755 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png new file mode 100755 index 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png new file mode 100755 index 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png new file mode 100755 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png new file mode 100755 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif b/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_help.gif b/usr/local/www/themes/nervecenter/images/icons/icon_help.gif new file mode 100644 index 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_help.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif new file mode 100755 index 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif new file mode 100755 index 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif b/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif new file mode 100755 index 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_in.gif b/usr/local/www/themes/nervecenter/images/icons/icon_in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif b/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif new file mode 100755 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif b/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif new file mode 100755 index 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif b/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_left.gif b/usr/local/www/themes/nervecenter/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_left.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif new file mode 100755 index 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif new file mode 100755 index 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log.gif new file mode 100755 index 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_log.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif new file mode 100755 index 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif new file mode 100755 index 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif b/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif new file mode 100644 index 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_match.gif b/usr/local/www/themes/nervecenter/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_match.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif new file mode 100644 index 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif b/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_open.gif b/usr/local/www/themes/nervecenter/images/icons/icon_open.gif new file mode 100755 index 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_other.gif b/usr/local/www/themes/nervecenter/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_out.gif b/usr/local/www/themes/nervecenter/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_out.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif b/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif new file mode 100755 index 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif b/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif new file mode 100755 index 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif b/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif new file mode 100755 index 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif new file mode 100755 index 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif new file mode 100755 index 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif new file mode 100755 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif new file mode 100755 index 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif new file mode 100755 index 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif new file mode 100755 index 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif new file mode 100755 index 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif new file mode 100755 index 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_right.gif b/usr/local/www/themes/nervecenter/images/icons/icon_right.gif new file mode 100755 index 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_right.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif new file mode 100755 index 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif new file mode 100755 index 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif new file mode 100755 index 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif new file mode 100755 index 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif new file mode 100644 index 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif new file mode 100755 index 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif b/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png new file mode 100755 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png new file mode 100755 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png new file mode 100755 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png b/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png new file mode 100755 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png new file mode 100755 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png b/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png new file mode 100755 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif b/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif new file mode 100755 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_up.gif b/usr/local/www/themes/nervecenter/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif b/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif b/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png new file mode 100755 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png b/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png new file mode 100755 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif b/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/in.gif b/usr/local/www/themes/nervecenter/images/icons/in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/in.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/in_d.gif b/usr/local/www/themes/nervecenter/images/icons/in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/out.gif b/usr/local/www/themes/nervecenter/images/icons/out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/out.gif differ diff --git a/usr/local/www/themes/nervecenter/images/icons/out_d.gif b/usr/local/www/themes/nervecenter/images/icons/out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/nervecenter/images/log.png b/usr/local/www/themes/nervecenter/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/log.png differ diff --git a/usr/local/www/themes/nervecenter/images/logo.gif b/usr/local/www/themes/nervecenter/images/logo.gif new file mode 100755 index 000000000..a71ce5a92 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/logo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/logobig.jpg b/usr/local/www/themes/nervecenter/images/logobig.jpg new file mode 100755 index 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/logobig.jpg differ diff --git a/usr/local/www/themes/nervecenter/images/menu_down.gif b/usr/local/www/themes/nervecenter/images/menu_down.gif new file mode 100755 index 000000000..137de8dd9 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/menu_down.gif differ diff --git a/usr/local/www/themes/nervecenter/images/menu_footer.gif b/usr/local/www/themes/nervecenter/images/menu_footer.gif new file mode 100755 index 000000000..d06faa403 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/menu_footer.gif differ diff --git a/usr/local/www/themes/nervecenter/images/menu_right.gif b/usr/local/www/themes/nervecenter/images/menu_right.gif new file mode 100755 index 000000000..881327cfc Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/menu_right.gif differ diff --git a/usr/local/www/themes/nervecenter/images/metal_bgr.gif b/usr/local/www/themes/nervecenter/images/metal_bgr.gif new file mode 100755 index 000000000..a0ca6c85a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/metal_bgr.gif differ diff --git a/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif b/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif new file mode 100755 index 000000000..c4a1465de Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif b/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif b/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_left.gif b/usr/local/www/themes/nervecenter/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/bar_right.gif b/usr/local/www/themes/nervecenter/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png new file mode 100755 index 000000000..37db2fdcf Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png differ diff --git a/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png new file mode 100755 index 000000000..fba7af914 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png differ diff --git a/usr/local/www/themes/nervecenter/images/misc/button.gif b/usr/local/www/themes/nervecenter/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/button.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/graph.png b/usr/local/www/themes/nervecenter/images/misc/graph.png new file mode 100755 index 000000000..507ec75ea Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/graph.png differ diff --git a/usr/local/www/themes/nervecenter/images/misc/key_128.gif b/usr/local/www/themes/nervecenter/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/key_152.gif b/usr/local/www/themes/nervecenter/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/key_256.gif b/usr/local/www/themes/nervecenter/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/key_64.gif b/usr/local/www/themes/nervecenter/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/left_background.gif b/usr/local/www/themes/nervecenter/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/loader.gif b/usr/local/www/themes/nervecenter/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/loader.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/loader_all.gif b/usr/local/www/themes/nervecenter/images/misc/loader_all.gif new file mode 100755 index 000000000..cb6bc0ce1 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/loader_all.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif b/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif new file mode 100755 index 000000000..b838b1736 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif b/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/logon.png b/usr/local/www/themes/nervecenter/images/misc/logon.png new file mode 100755 index 000000000..ec644ed4e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/logon.png differ diff --git a/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif b/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/rrd_error.png b/usr/local/www/themes/nervecenter/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif b/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif new file mode 100755 index 000000000..7ff1e9512 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif b/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif new file mode 100755 index 000000000..2c3290808 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/status_left.gif b/usr/local/www/themes/nervecenter/images/misc/status_left.gif new file mode 100755 index 000000000..b5a29303b Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/status_left.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif b/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif new file mode 100755 index 000000000..067ef18be Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif b/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif new file mode 100755 index 000000000..72de6bdff Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif b/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif new file mode 100755 index 000000000..d72761ada Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/status_right.gif b/usr/local/www/themes/nervecenter/images/misc/status_right.gif new file mode 100755 index 000000000..bf66fdba5 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/status_right.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_c.gif b/usr/local/www/themes/nervecenter/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif b/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_o.gif b/usr/local/www/themes/nervecenter/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif b/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif b/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif new file mode 100755 index 000000000..ca35e2a18 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/nervecenter/images/new_tab_menu.png b/usr/local/www/themes/nervecenter/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/nervecenter/images/status.png b/usr/local/www/themes/nervecenter/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/status.png differ diff --git a/usr/local/www/themes/nervecenter/images/transparent.gif b/usr/local/www/themes/nervecenter/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/transparent.gif differ diff --git a/usr/local/www/themes/nervecenter/images/transparent_pixel.gif b/usr/local/www/themes/nervecenter/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/joincluster.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/joincluster.gif new file mode 100755 index 000000000..a6f90a284 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/joincluster.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/joincluster_mo.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/joincluster_mo.gif new file mode 100755 index 000000000..3787d697e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/joincluster_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/restore.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/restore.gif new file mode 100755 index 000000000..eb8931f63 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/restore.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/restore_mo.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/restore_mo.gif new file mode 100755 index 000000000..2ee46c7b4 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/restore_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/standalone.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/standalone.gif new file mode 100755 index 000000000..aa035a47e Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/standalone.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/standalone_mo.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/standalone_mo.gif new file mode 100755 index 000000000..c8066ef0a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/standalone_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster.gif new file mode 100755 index 000000000..dbe0ca2b8 Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster.gif differ diff --git a/usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster_mo.gif b/usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster_mo.gif new file mode 100755 index 000000000..83d980a7a Binary files /dev/null and b/usr/local/www/themes/nervecenter/images/wizards/initial/startnewcluster_mo.gif differ diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif b/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js new file mode 100644 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js new file mode 100644 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js new file mode 100644 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js new file mode 100644 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js new file mode 100644 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js new file mode 100644 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css new file mode 100644 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js new file mode 100644 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/nervecenter/javascript/transmenu-body.php b/usr/local/www/themes/nervecenter/javascript/transmenu-body.php new file mode 100644 index 000000000..ada3d0c60 --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/transmenu-body.php @@ -0,0 +1,51 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetBodyJS() { + global $rootmenu; + + if (isset($rootmenu)) { + return $rootmenu->getMenuJScript(); + } else if (empty($rootmenu)) { + return "alert('No rootmenu object found.');"; + } else { + return "alert('No JavaScript attached to rootmenu object.');"; + } +} + +?> diff --git a/usr/local/www/themes/nervecenter/javascript/transmenu-head.php b/usr/local/www/themes/nervecenter/javascript/transmenu-head.php new file mode 100644 index 000000000..6eea15d09 --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/transmenu-head.php @@ -0,0 +1,85 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetHeadJS() { + global $g, $rootmenu; + + $transmenu_stub =<<getChildren() as $component) { + $id = "mnua_" . str_replace(" ", "", strtolower($component->getID())); + + $childJScript .=<< diff --git a/usr/local/www/themes/nervecenter/javascript/transmenu.org b/usr/local/www/themes/nervecenter/javascript/transmenu.org new file mode 100644 index 000000000..6c9e353cd --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/transmenu.org @@ -0,0 +1,785 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * + * Customizable multi-level animated DHTML menus with transparency. + * + * Copyright 2003-2004, Aaron Boodman (www.youngpup.net) + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ================================================================================================= + * updates: + * 04.19.04 fixed cascade problem with menus nested greater than two levels. + * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu. + * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;) + * also made gecko check a little more strict by specifying build no. + * ============================================================================================== */ + + + +//================================================================================================== +// Configuration properties +//================================================================================================== +TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif +TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat +TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat +TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed) +TransMenu.menuPadding = 5; // padding between menu border and items grid +TransMenu.itemPadding = 3; // additional padding around each item +TransMenu.shadowSize = 2; // size of shadow under menu +TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge +TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS) +TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5 +TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS) +TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5 +TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu +TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu + + +//================================================================================================== +// Internal use properties +//================================================================================================== +TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4}; +TransMenu.direction = {down:1,right:2}; +TransMenu.registry = []; +TransMenu._maxZ = 100; + + + +//================================================================================================== +// Static methods +//================================================================================================== +// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0 +TransMenu.isSupported = function() { + var ua = navigator.userAgent.toLowerCase(); + var pf = navigator.platform.toLowerCase(); + var an = navigator.appName; + var r = false; + + if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0 + else if (an == "Microsoft Internet Explorer") { + if (document.getElementById) { // ie5.1+ mac,win + if (pf.indexOf("mac") == 0) { + r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1; + } + else r = true; + } + } + + return r; +} + +// call this in onload once menus have been created +TransMenu.initialize = function() { + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + menu.initialize(); + } +} + +// call this in document body to write out menu html +TransMenu.renderAll = function() { + var aMenuHtml = []; + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + aMenuHtml[i] = menu.toString(); + } + document.write(aMenuHtml.join("")); +} + +//================================================================================================== +// TransMenu constructor (only called internally) +//================================================================================================== +// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a +// reference to an HTML element, or a TransMenuItem from an existing menu. +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menu from actuator +// iTop : Top pixel offset of menu from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +// parentMenuSet : Menuset this menu will be added to. +//================================================================================================== +function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) { + // public methods + this.addItem = addItem; + this.addMenu = addMenu; + this.toString = toString; + this.initialize = initialize; + this.isOpen = false; + this.show = show; + this.hide = hide; + this.items = []; + + // events + this.onactivate = new Function(); // when the menu starts to slide open + this.ondeactivate = new Function(); // when the menu finishes sliding closed + this.onmouseover = new Function(); // when the menu has been moused over + this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future + this.ondequeue = new Function(); + + // initialization + this.index = TransMenu.registry.length; + TransMenu.registry[this.index] = this; + + var id = "TransMenu" + this.index; + var contentHeight = null; + var contentWidth = null; + var childMenuSet = null; + var animating = false; + var childMenus = []; + var slideAccel = -1; + var elmCache = null; + var ready = false; + var _this = this; + var a = null; + + var pos = iDirection == TransMenu.direction.down ? "top" : "left"; + var dim = null; + + // private and public method implimentations + function addItem(sText, sUrl) { + var item = new TransMenuItem(sText, sUrl, this); + item._index = this.items.length; + this.items[item._index] = item; + } + + function addMenu(oMenuItem) { + if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here"); + + if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight); + + var m = childMenuSet.addMenu(oMenuItem); + + childMenus[oMenuItem._index] = m; + m.onmouseover = child_mouseover; + m.ondeactivate = child_deactivate; + m.onqueue = child_queue; + m.ondequeue = child_dequeue; + + return m; + } + + function initialize() { + initCache(); + initEvents(); + initSize(); + ready = true; + } + + function show() { + //dbg_dump("show"); + if (ready) { + _this.isOpen = true; + animating = true; + setContainerPos(); + elmCache["clip"].style.visibility = "visible"; + elmCache["clip"].style.zIndex = TransMenu._maxZ++; + //dbg_dump("maxZ: " + TransMenu._maxZ); + slideStart(); + _this.onactivate(); + } + } + + function hide() { + if (ready) { + _this.isOpen = false; + animating = true; + + for (var i = 0, item = null; item = elmCache.item[i]; i++) + dehighlight(item); + + if (childMenuSet) childMenuSet.hide(); + + slideStart(); + _this.ondeactivate(); + } + } + + function setContainerPos() { + var sub = oActuator.constructor == TransMenuItem; + var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator; + var el = act; + + var x = 0; + var y = 0; + + + var minX = 0; + var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width); + var minY = 0; + var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height); + + // add up all offsets... subtract any scroll offset + while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) { + x += el.offsetLeft; + y += el.offsetTop; + + if (el.scrollLeft) x -= el.scrollLeft; + if (el.scrollTop) y -= el.scrollTop; + + el = el.offsetParent; + } + + if (oActuator.constructor == TransMenuItem) { + x += parseInt(el.parentNode.style.left); + y += parseInt(el.parentNode.style.top); + } + + switch (iReferencePoint) { + case TransMenu.reference.topLeft: + break; + case TransMenu.reference.topRight: + x += act.offsetWidth; + break; + case TransMenu.reference.bottomLeft: + y += act.offsetHeight; + break; + case TransMenu.reference.bottomRight: + x += act.offsetWidth; + y += act.offsetHeight; + break; + } + + x += iLeft; + y += iTop; + + x = Math.max(Math.min(x, maxX), minX); + y = Math.max(Math.min(y, maxY), minY); + + elmCache["clip"].style.left = x + "px"; + elmCache["clip"].style.top = y + "px"; + } + + function slideStart() { + var x0 = parseInt(elmCache["content"].style[pos]); + var x1 = _this.isOpen ? 0 : -dim; + + if (a != null) a.stop(); + a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel); + + a.onframe = slideFrame; + a.onend = slideEnd; + + a.start(); + } + + function slideFrame(x) { + elmCache["content"].style[pos] = x + "px"; + } + + function slideEnd() { + if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden"; + animating = false; + } + + function initSize() { + // everything is based off the size of the items table... + var ow = elmCache["items"].offsetWidth; + var oh = elmCache["items"].offsetHeight; + var ua = navigator.userAgent.toLowerCase(); + + // clipping container should be ow/oh + the size of the shadow + elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px"; + elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px"; + + // same with content... + elmCache["content"].style.width = ow + TransMenu.shadowSize + "px"; + elmCache["content"].style.height = oh + TransMenu.shadowSize + "px"; + + contentHeight = oh + TransMenu.shadowSize; + contentWidth = ow + TransMenu.shadowSize; + + dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth; + + // set initially closed + elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px"; + elmCache["clip"].style.visibility = "hidden"; + + // if *not* mac/ie 5 + if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) { + // set background div to offset size + elmCache["background"].style.width = ow + "px"; + elmCache["background"].style.height = oh + "px"; + elmCache["background"].style.backgroundColor = TransMenu.backgroundColor; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px"; + elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor; + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px"; + elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor; + } + // mac ie is a little different because we use a PNG for the transparency + else { + // set background div to offset size + elmCache["background"].firstChild.src = TransMenu.backgroundPng; + elmCache["background"].firstChild.width = ow; + elmCache["background"].firstChild.height = oh; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize; + elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize); + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize; + elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset; + } + } + + function initCache() { + var menu = document.getElementById(id); + var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing + + elmCache = {}; + elmCache["clip"] = menu; + elmCache["item"] = []; + + for (var i = 0, elm = null; elm = all[i]; i++) { + switch (elm.className) { + case "items": + case "content": + case "background": + case "shadowRight": + case "shadowBottom": + elmCache[elm.className] = elm; + break; + case "item": + elm._index = elmCache["item"].length; + elmCache["item"][elm._index] = elm; + break; + } + } + + // hack! + _this.elmCache = elmCache; + } + + function initEvents() { + // hook item mouseover + for (var i = 0, item = null; item = elmCache.item[i]; i++) { + item.onmouseover = item_mouseover; + item.onmouseout = item_mouseout; + item.onclick = item_click; + } + + // hook actuation + if (typeof oActuator.tagName != "undefined") { + oActuator.onmouseover = actuator_mouseover; + oActuator.onmouseout = actuator_mouseout; + } + + // hook menu mouseover + elmCache["content"].onmouseover = content_mouseover; + elmCache["content"].onmouseout = content_mouseout; + } + + function highlight(oRow) { + oRow.className = "item hover"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOn; + } + + function dehighlight(oRow) { + oRow.className = "item"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOff; + } + + function item_mouseover() { + if (!animating) { + highlight(this); + + if (childMenus[this._index]) + childMenuSet.showMenu(childMenus[this._index]); + else if (childMenuSet) childMenuSet.hide(); + } + } + + function item_mouseout() { + if (!animating) { + if (childMenus[this._index]) + childMenuSet.hideMenu(childMenus[this._index]); + else // otherwise child_deactivate will do this + dehighlight(this); + } + } + + function item_click() { + if (!animating) { + if (_this.items[this._index].url) + location.href = _this.items[this._index].url; + } + } + + function actuator_mouseover() { + parentMenuSet.showMenu(_this); + } + + function actuator_mouseout() { + parentMenuSet.hideMenu(_this); + } + + function content_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + _this.onmouseover(); + } + } + + function content_mouseout() { + if (!animating) { + parentMenuSet.hideMenu(_this); + } + } + + function child_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + } + } + + function child_deactivate() { + for (var i = 0; i < childMenus.length; i++) { + if (childMenus[i] == this) { + dehighlight(elmCache["item"][i]); + break; + } + } + } + + function child_queue() { + parentMenuSet.hideMenu(_this); + } + + function child_dequeue() { + parentMenuSet.showMenu(_this); + } + + function toString() { + var aHtml = []; + var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : ""); + + for (var i = 0, item = null; item = this.items[i]; i++) { + aHtml[i] = item.toString(childMenus[i]); + } + + return '
                            ' + + '
                            ' + + '' + + aHtml.join('') + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            '; + } +} + + +//================================================================================================== +// TransMenuSet +//================================================================================================== +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menus from actuator +// iTop : Top pixel offset of menus from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +//================================================================================================== +TransMenuSet.registry = []; + +function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) { + // public methods + this.addMenu = addMenu; + this.showMenu = showMenu; + this.hideMenu = hideMenu; + this.hide = hide; + this.hideCurrent = hideCurrent; + + // initialization + var menus = []; + var _this = this; + var current = null; + + this.index = TransMenuSet.registry.length; + TransMenuSet.registry[this.index] = this; + + // method implimentations... + 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) { + // close currently open menu + if (current != null) hide(current); + + // set current menu to this one + current = oMenu; + + // if this menu is closed, open it + oMenu.show(); + } + else { + // hide pending calls to close this menu + cancelHide(oMenu); + } + } + + function hideMenu(oMenu) { + //dbg_dump("hideMenu a " + oMenu.index); + if (current == oMenu && oMenu.isOpen) { + //dbg_dump("hideMenu b " + oMenu.index); + if (!oMenu.hideTimer) scheduleHide(oMenu); + } + } + + function scheduleHide(oMenu) { + //dbg_dump("scheduleHide " + oMenu.index); + oMenu.onqueue(); + oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay); + } + + function cancelHide(oMenu) { + //dbg_dump("cancelHide " + oMenu.index); + if (oMenu.hideTimer) { + oMenu.ondequeue(); + window.clearTimeout(oMenu.hideTimer); + oMenu.hideTimer = null; + } + } + + function hide(oMenu) { + if (!oMenu && current) oMenu = current; + + if (oMenu && current == oMenu && oMenu.isOpen) { + hideCurrent(); + } + } + + function hideCurrent() { + if (null != current) { + cancelHide(current); + current.hideTimer = null; + current.hide(); + current = null; + } + } +} + +//================================================================================================== +// TransMenuItem (internal) +// represents an item in a dropdown +//================================================================================================== +// sText : The item display text +// sUrl : URL to load when the item is clicked +// oParent : Menu this item is a part of +//================================================================================================== +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 + '' + + ''; + } +} + + + + + + +//===================================================================== +// Accel[erated] [an]imation object +// change a property of an object over time in an accelerated fashion +//===================================================================== +// obj : reference to the object whose property you'd like to animate +// prop : property you would like to change eg: "left" +// to : final value of prop +// time : time the animation should take to run +// zip : optional. specify the zippiness of the acceleration. pick a +// number between -1 and 1 where -1 is full decelerated, 1 is +// full accelerated, and 0 is linear (no acceleration). default +// is 0. +// unit : optional. specify the units for use with prop. default is +// "px". +//===================================================================== +// bezier functions lifted from the lib_animation.js file in the +// 13th Parallel API. www.13thparallel.org +//===================================================================== + +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(); +} + + + +//===================================================================== +// public methods +//===================================================================== + +// after you create an accelimation, you call this to start it-a runnin' +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); +} + +// and if you need to stop it early for some reason... +Accelimation.prototype.stop = function() { + Accelimation._remove(this); +} + + + +//===================================================================== +// private methods +//===================================================================== + +// paints one frame. gets called by Accelimation._paintAll. +Accelimation.prototype._paint = function(time) { + if (time < this.t1) { + var elapsed = time - this.t0; + this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2)); + } + else this._end(); +} + +// ends the animation +Accelimation.prototype._end = function() { + Accelimation._remove(this); + this.onframe(this.x1); + this.onend(); +} + + + + +//===================================================================== +// static methods (all private) +//===================================================================== + +// add a function to the list of ones to call periodically +Accelimation._add = function(o) { + var index = this.instances.length; + this.instances[index] = o; + // if this is the first one, start the engine + if (this.instances.length == 1) { + this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes); + } +} + +// remove a function from the list +Accelimation._remove = function(o) { + for (var i = 0; i < this.instances.length; i++) { + if (o == this.instances[i]) { + this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) ); + break; + } + } + // if that was the last one, stop the engine + if (this.instances.length == 0) { + window.clearInterval(this.timerID); + this.timerID = null; + } +} + +// "engine" - call each function in the list every so often +Accelimation._paintAll = function() { + var now = new Date().getTime(); + for (var i = 0; i < this.instances.length; i++) { + this.instances[i]._paint(now); + } +} + + +// Bezier functions: +Accelimation._B1 = function(t) { return t*t*t } +Accelimation._B2 = function(t) { return 3*t*t*(1-t) } +Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) } +Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) } + + +//Finds the coordinates of a point at a certain stage through a bezier curve +Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) { + return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent); +} + + +//===================================================================== +// static properties +//===================================================================== + +Accelimation.instances = []; +Accelimation.targetRes = 10; +Accelimation.timerID = null; + + +//===================================================================== +// IE win memory cleanup +//===================================================================== + +if (window.attachEvent) { + var cearElementProps = [ + 'data', + 'onmouseover', + 'onmouseout', + 'onmousedown', + 'onmouseup', + 'ondblclick', + 'onclick', + 'onselectstart', + 'oncontextmenu' + ]; + + window.attachEvent("onunload", function() { + var el; + for(var d = document.all.length;d--;){ + el = document.all[d]; + for(var c = cearElementProps.length;c--;){ + el[cearElementProps[c]] = null; + } + } + }); +} \ No newline at end of file diff --git a/usr/local/www/themes/nervecenter/javascript/transmenuC.js b/usr/local/www/themes/nervecenter/javascript/transmenuC.js new file mode 100644 index 000000000..88626c753 --- /dev/null +++ b/usr/local/www/themes/nervecenter/javascript/transmenuC.js @@ -0,0 +1,86 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * Customizable multi-level animated DHTML menus with transparency. + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ============================================================================================== */ +TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;} +else r=true;}} +return r;} +TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}} +TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();} +document.write(aMenuHtml.join(""));} +function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;} +function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;} +function initialize(){initCache();initEvents();initSize();ready=true;} +function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}} +function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}} +function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;} +if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);} +switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;} +x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";} +function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();} +function slideFrame(x){elmCache["content"].style[pos]=x+"px";} +function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;} +function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;} +else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}} +function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}} +_this.elmCache=elmCache;} +function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;} +if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;} +elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;} +function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;} +function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;} +function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}} +function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}} +function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}} +function actuator_mouseover(){parentMenuSet.showMenu(_this);} +function actuator_mouseout(){parentMenuSet.hideMenu(_this);} +function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}} +function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}} +function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}} +function child_deactivate(){for(var i=0;i'+'
                            '+''+aHtml.join('')+'
                            '+'
                            '+'
                            '+'
                            '+'

                            ';}} +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 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/bottom-loader.js b/usr/local/www/themes/pfsense-dropdown/bottom-loader.js new file mode 100644 index 000000000..fad206e1a --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/bottom-loader.js @@ -0,0 +1,11 @@ +// 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 000000000..2a5c000f8 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif differ 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 000000000..02eca2b68 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif differ 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 000000000..6f29ec9cd Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/header.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/help.png b/usr/local/www/themes/pfsense-dropdown/images/help.png new file mode 100755 index 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/help.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico b/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico new file mode 100644 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico differ 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 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif differ 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 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif differ 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 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif new file mode 100755 index 000000000..2f6935526 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif differ 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 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif differ 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 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif differ 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 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif new file mode 100644 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif differ 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 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif differ 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 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif differ 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 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif differ 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 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif differ 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 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif differ 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 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif differ 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 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png differ 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 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif differ 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 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif differ 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 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif differ 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 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif differ 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 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif differ 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 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif differ 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 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif differ 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 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif differ 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 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png new file mode 100644 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png differ 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 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png differ 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 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png new file mode 100644 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png differ 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 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png new file mode 100644 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png new file mode 100644 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png new file mode 100644 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png new file mode 100644 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png new file mode 100644 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png differ 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 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png new file mode 100644 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png differ 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 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png differ 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 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png new file mode 100644 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png new file mode 100644 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif differ 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 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif differ 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 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif differ 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 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif differ 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 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif differ 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 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif new file mode 100644 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif differ 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 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif differ 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 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif differ 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 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif differ 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 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif differ 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 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif differ 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 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif differ 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 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif differ 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 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif differ 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 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif differ 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 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif differ 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 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif differ 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 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif differ 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 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif differ 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 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif differ 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 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif new file mode 100644 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif differ 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 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif differ 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 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif differ 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 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif differ 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 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif differ 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 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif differ 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 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif differ 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 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif differ 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 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif differ 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 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif differ 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 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif differ 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 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif differ 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 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif differ 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 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif differ 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 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif differ 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 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif differ 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 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png new file mode 100644 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png new file mode 100644 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png new file mode 100644 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png new file mode 100644 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png new file mode 100644 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png new file mode 100644 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif new file mode 100644 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..c77a978c4 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png new file mode 100644 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png new file mode 100644 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif new file mode 100644 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif new file mode 100644 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif new file mode 100644 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif b/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif new file mode 100644 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/log.png b/usr/local/www/themes/pfsense-dropdown/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/log.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/logo.gif b/usr/local/www/themes/pfsense-dropdown/images/logo.gif new file mode 100755 index 000000000..553cbd5c1 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/logo.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg b/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg new file mode 100755 index 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/menu.gif b/usr/local/www/themes/pfsense-dropdown/images/menu.gif new file mode 100755 index 000000000..726921085 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/menu.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png b/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png new file mode 100755 index 000000000..baf8a9d19 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png b/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif new file mode 100755 index 000000000..fad101f42 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png b/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/status.png b/usr/local/www/themes/pfsense-dropdown/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/status.png differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/transparent.gif b/usr/local/www/themes/pfsense-dropdown/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/transparent.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif b/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js new file mode 100644 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js new file mode 100644 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js new file mode 100644 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js new file mode 100644 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js new file mode 100644 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js new file mode 100644 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css new file mode 100644 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js new file mode 100644 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense-dropdown/loader.js b/usr/local/www/themes/pfsense-dropdown/loader.js new file mode 100644 index 000000000..e8612dbf8 --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/loader.js @@ -0,0 +1,29 @@ +//'); +} + +document.write(''); + +//]]> diff --git a/usr/local/www/themes/pfsense-dropdown/login.css b/usr/local/www/themes/pfsense-dropdown/login.css new file mode 100644 index 000000000..f8abdfcb2 --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/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-dropdown/new_tab_menu.css b/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/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-dropdown/rrdcolors.inc.php b/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/pfsense-dropdown/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/all.css b/usr/local/www/themes/pfsense/all.css new file mode 100644 index 000000000..f14e71026 --- /dev/null +++ b/usr/local/www/themes/pfsense/all.css @@ -0,0 +1,1035 @@ +/* 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; +} + +.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: 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: #ffffff; +} + +/* ID Based CSS Definitions */ + +#notices { + width: 795px; + background-color: #E1E4B8; + border: 1px solid #000000; + padding: 0px; + margin-bottom: 5px; +} +#notices ul { + margin: 0px; + padding: 5px; + padding-top: 3px; + list-style: none; +} + +#header { + height: 70px; + width: 900px; +} +#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; + float: right; + top: -9px; + 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: 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: 900px; +} + +#footer { + position: relative; + top: 10px; + padding: 0px; + margin: 6px; + width: 900px; + background-color: #990000; + text-align: center; + color: #ffffff; + font-size: 0.75em; + clear: both; + margin-bottom: 20px; +} +#footer p { + padding: 0px; + margin: 0px; +} + +#left { + width: 150px; + float: left; +} +#right { + /*margin-left: 171px;*/ + margin-left: 170px; + margin-top: 5px; + width: 720px; +} + + + +#navigation { + position: relative; + background-color: #000000; + top: 0px; + left: 5px; + width: 157px; + padding-top: 6px; + margin-left: 1px; + color: #fff; + padding-bottom: 6px; + padding-right: 0px; +} + +#navigation ul { + margin: 0px; + padding: 0px; + width: 100%; +} + +#navigation ul li { + display: block; + padding-left: 10px; +} + +#navigation ul li div { + margin-top: 2px; +} + +#navigation ul li div { + font-weight: bold; +} + +#navigation ul li div .small, +#navigation ul li div .small:hover { + font-weight: normal; + font-size: 0.79em; +} + +#navigation ul li a { + padding-left: 0.5em; + padding-right: 0.5em; + padding-top: 0.2em; + padding-bottom: 0.2em; + height: 1.2em; + line-height: 1.2em; + color: #fff; + text-decoration: none; + width: 61px; + font-size: 0.9em; + text-align: center; +} + +#navigation ul li a:hover { + color: #fff; + text-decoration: underline; + font-size: 0.9em; +} + + + +/* 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} + +/* 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; +} + +/* loginscreen items follow */ + +#login { +/* background: #cccccc; */ + background-color: #ffffff; + border-left: 4px dotted #990000; +/* border: 0px solid #990000; */ + margin: 5em auto; + padding: 0em; +/* width: 300px; */ + width: 300px; + height: 300px; +/* filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; */ +} + +#login h1 { + background: url(images/logo.gif) no-repeat top left; +/* background: #ffffff; */ + margin-top: 0; + display: block; + text-indent: -1000px; + height: 300px; + 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, #password2 { + font-size: small; + width: 60%; + padding-left: 19px; + 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: 120px; +} + +/* loginerror box follows */ + +#login #inputerrors { + background-color: transparent; + border: 0px solid #666666; + margin: 5em auto; + vertical-align: middle; + padding: 0em; + width: 300px; + height: 50px; + position: relative; + left: 0px; + top: -117px; +} + +/* Sortable tables */ +table.sortable thead { + cursor: default; + background-color: #EEEEEE; + 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/apple-touch-icon.png b/usr/local/www/themes/pfsense/apple-touch-icon.png new file mode 100755 index 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/themes/pfsense/apple-touch-icon.png differ diff --git a/usr/local/www/themes/pfsense/bottom-loader.js b/usr/local/www/themes/pfsense/bottom-loader.js new file mode 100644 index 000000000..82517665b --- /dev/null +++ b/usr/local/www/themes/pfsense/bottom-loader.js @@ -0,0 +1,12 @@ +// diff --git a/usr/local/www/themes/pfsense/images/alert_bgr.gif b/usr/local/www/themes/pfsense/images/alert_bgr.gif new file mode 100755 index 000000000..2a5c000f8 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/alert_bgr.gif differ diff --git a/usr/local/www/themes/pfsense/images/header-alert.gif b/usr/local/www/themes/pfsense/images/header-alert.gif new file mode 100755 index 000000000..02eca2b68 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/header-alert.gif differ diff --git a/usr/local/www/themes/pfsense/images/header.gif b/usr/local/www/themes/pfsense/images/header.gif new file mode 100755 index 000000000..01cfcefdd Binary files /dev/null and b/usr/local/www/themes/pfsense/images/header.gif differ diff --git a/usr/local/www/themes/pfsense/images/help.png b/usr/local/www/themes/pfsense/images/help.png new file mode 100755 index 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/pfsense/images/help.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/favicon.ico b/usr/local/www/themes/pfsense/images/icons/favicon.ico new file mode 100644 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/favicon.ico differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense/images/icons/icon_3g.gif new file mode 100755 index 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif new file mode 100755 index 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif new file mode 100755 index 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense/images/icons/icon_alert.gif new file mode 100755 index 000000000..2f6935526 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_alert.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif new file mode 100644 index 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif new file mode 100644 index 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif new file mode 100644 index 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif new file mode 100644 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif new file mode 100644 index 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_block.gif b/usr/local/www/themes/pfsense/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_block.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif new file mode 100755 index 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif new file mode 100755 index 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif new file mode 100755 index 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_cal.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif new file mode 100755 index 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_carp.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif new file mode 100755 index 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_chain.png b/usr/local/www/themes/pfsense/images/icons/icon_chain.png new file mode 100644 index 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_chain.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_check.gif b/usr/local/www/themes/pfsense/images/icons/icon_check.gif new file mode 100755 index 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_check.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif new file mode 100755 index 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif new file mode 100755 index 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif new file mode 100755 index 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_close.gif b/usr/local/www/themes/pfsense/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_close.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense/images/icons/icon_configure.gif new file mode 100755 index 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_down.gif b/usr/local/www/themes/pfsense/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_down.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif new file mode 100755 index 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_e.gif b/usr/local/www/themes/pfsense/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_e.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif new file mode 100755 index 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_error.gif b/usr/local/www/themes/pfsense/images/icons/icon_error.gif new file mode 100755 index 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_error.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif new file mode 100755 index 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png new file mode 100644 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png new file mode 100644 index 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png new file mode 100644 index 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png new file mode 100644 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png new file mode 100644 index 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png new file mode 100644 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png new file mode 100644 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png new file mode 100644 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png new file mode 100644 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png new file mode 100644 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png new file mode 100644 index 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png new file mode 100644 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png new file mode 100644 index 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png new file mode 100644 index 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png new file mode 100644 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png new file mode 100644 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_help.gif b/usr/local/www/themes/pfsense/images/icons/icon_help.gif new file mode 100644 index 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_help.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif new file mode 100644 index 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif new file mode 100644 index 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif new file mode 100755 index 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_in.gif b/usr/local/www/themes/pfsense/images/icons/icon_in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif new file mode 100755 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif new file mode 100755 index 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_left.gif b/usr/local/www/themes/pfsense/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_left.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif new file mode 100755 index 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif new file mode 100755 index 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log.gif b/usr/local/www/themes/pfsense/images/icons/icon_log.gif new file mode 100755 index 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_log.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif new file mode 100755 index 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif new file mode 100755 index 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense/images/icons/icon_logs.gif new file mode 100644 index 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_match.gif b/usr/local/www/themes/pfsense/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_match.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif new file mode 100644 index 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_minus.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_open.gif b/usr/local/www/themes/pfsense/images/icons/icon_open.gif new file mode 100755 index 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_other.gif b/usr/local/www/themes/pfsense/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_out.gif b/usr/local/www/themes/pfsense/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_out.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_parp.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif new file mode 100755 index 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense/images/icons/icon_pass.gif new file mode 100755 index 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_pass.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif new file mode 100755 index 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus.gif new file mode 100755 index 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_plus.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif new file mode 100644 index 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif new file mode 100644 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif new file mode 100755 index 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif new file mode 100755 index 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif new file mode 100644 index 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif new file mode 100755 index 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense/images/icons/icon_reject.gif new file mode 100755 index 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_right.gif b/usr/local/www/themes/pfsense/images/icons/icon_right.gif new file mode 100755 index 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_right.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif new file mode 100755 index 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif new file mode 100755 index 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif new file mode 100755 index 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif new file mode 100755 index 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif new file mode 100644 index 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif new file mode 100755 index 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png new file mode 100644 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense/images/icons/icon_system-group.png new file mode 100644 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png new file mode 100644 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense/images/icons/icon_system-user.png new file mode 100644 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png new file mode 100644 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png new file mode 100644 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif new file mode 100644 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_up.gif b/usr/local/www/themes/pfsense/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png new file mode 100644 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png new file mode 100644 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x.gif b/usr/local/www/themes/pfsense/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/in.gif b/usr/local/www/themes/pfsense/images/icons/in.gif new file mode 100644 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/in.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/in_d.gif b/usr/local/www/themes/pfsense/images/icons/in_d.gif new file mode 100644 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/out.gif b/usr/local/www/themes/pfsense/images/icons/out.gif new file mode 100644 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/out.gif differ diff --git a/usr/local/www/themes/pfsense/images/icons/out_d.gif b/usr/local/www/themes/pfsense/images/icons/out_d.gif new file mode 100644 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/pfsense/images/log.png b/usr/local/www/themes/pfsense/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/log.png differ diff --git a/usr/local/www/themes/pfsense/images/logo.gif b/usr/local/www/themes/pfsense/images/logo.gif new file mode 100755 index 000000000..553cbd5c1 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/logo.gif differ diff --git a/usr/local/www/themes/pfsense/images/logobig.jpg b/usr/local/www/themes/pfsense/images/logobig.jpg new file mode 100755 index 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/logobig.jpg differ diff --git a/usr/local/www/themes/pfsense/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/bar_left.gif b/usr/local/www/themes/pfsense/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/bar_right.gif b/usr/local/www/themes/pfsense/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/button.gif b/usr/local/www/themes/pfsense/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/button.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/key_128.gif b/usr/local/www/themes/pfsense/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/key_152.gif b/usr/local/www/themes/pfsense/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/key_256.gif b/usr/local/www/themes/pfsense/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/key_64.gif b/usr/local/www/themes/pfsense/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/left_background.gif b/usr/local/www/themes/pfsense/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/loader.gif b/usr/local/www/themes/pfsense/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/loader.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/logon.png b/usr/local/www/themes/pfsense/images/misc/logon.png new file mode 100755 index 000000000..baf8a9d19 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/logon.png differ diff --git a/usr/local/www/themes/pfsense/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/rrd_error.png b/usr/local/www/themes/pfsense/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/pfsense/images/misc/tri_c.gif b/usr/local/www/themes/pfsense/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/tri_o.gif b/usr/local/www/themes/pfsense/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/pfsense/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense/images/misc/widget_loader.gif new file mode 100755 index 000000000..fad101f42 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/pfsense/images/new_tab_menu.png b/usr/local/www/themes/pfsense/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/pfsense/images/status.png b/usr/local/www/themes/pfsense/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/status.png differ diff --git a/usr/local/www/themes/pfsense/images/transparent.gif b/usr/local/www/themes/pfsense/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/pfsense/images/transparent.gif differ diff --git a/usr/local/www/themes/pfsense/images/transparent_pixel.gif b/usr/local/www/themes/pfsense/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/pfsense/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/pfsense/javascript/niftyjsCode.js b/usr/local/www/themes/pfsense/javascript/niftyjsCode.js new file mode 100644 index 000000000..75ef8b00f --- /dev/null +++ b/usr/local/www/themes/pfsense/javascript/niftyjsCode.js @@ -0,0 +1,174 @@ +function NiftyCheck(){ +if(!document.getElementById || !document.createElement) + return(false); +isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName); +if(Array.prototype.push==null){Array.prototype.push=function(){ + this[this.length]=arguments[0]; return(this.length);};} +return(true); +} + +function Rounded(selector,wich,bk,color,opt){ +var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false; + +if(color=="transparent"){ + cn=cn+"x"; + ecolor=bk; + bk="transparent"; + } +else if(opt && opt.indexOf("border")>=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense/loader.js b/usr/local/www/themes/pfsense/loader.js new file mode 100644 index 000000000..2fc9b78eb --- /dev/null +++ b/usr/local/www/themes/pfsense/loader.js @@ -0,0 +1,30 @@ +//'); +} + +document.write(''); + +//]]> diff --git a/usr/local/www/themes/pfsense/login.css b/usr/local/www/themes/pfsense/login.css new file mode 100644 index 000000000..f8abdfcb2 --- /dev/null +++ b/usr/local/www/themes/pfsense/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/new_tab_menu.css b/usr/local/www/themes/pfsense/new_tab_menu.css new file mode 100644 index 000000000..04c4cf2ea --- /dev/null +++ b/usr/local/www/themes/pfsense/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/rrdcolors.inc.php b/usr/local/www/themes/pfsense/rrdcolors.inc.php new file mode 100644 index 000000000..52337b9ed --- /dev/null +++ b/usr/local/www/themes/pfsense/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/all.css b/usr/local/www/themes/pfsense_ng/all.css new file mode 100644 index 000000000..9bb4b56c2 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/all.css @@ -0,0 +1,1414 @@ +/* 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; +} + +body { + margin: 0px auto; + align: left; + background: url('images/background.jpg') no-repeat; + background-position : left 0px; + background-attachment: fixed; + background-color: #7f7f7f; +} +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; +} + +/* ID Based CSS Definitions */ +/* margin: 0px auto makes the content centered, margin 0px 0px makes it aligned to the left */ +#wrapper { + width: 810px; + margin: 0px 0px; +/* left: 0px; */ +} + +#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; +} +#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 { + position: relative; + top: 0px; + left: 75px; + margin-top: 0px; + margin-left: 0px; + padding-top: 50px; + padding-left: 20px; + width: 840px; + background-color: #ffffff; + background: url('images/horizontal.png') repeat-y; +} + + +/* try to abuse left as a fadeout at the end of the page */ +#left { + width: 810px; + height: 1px; +} + +#right { + position: relative; + top: -10px; + left: 0px; + width: 770px; + margin-top: 0px; + margin-left: 5px; + margin-right: 5px; + padding-top: 20px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 90px; + min-height: 400px; + +} + +#footer { + position: relative; +/* margin-bottom: 5px; */ + background: url('images/footer.png') no-repeat; +/* top: -100px; */ + bottom: 0px; + left: 75px; +/* width: 1210px; */ + width: 840px; + height: 60px; + color: #000000; + text-align: center; + font-size: 0.9em; + padding-top: 10px; + padding-left: 10px; + clear: both; +} +#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/apple-touch-icon.png b/usr/local/www/themes/pfsense_ng/apple-touch-icon.png new file mode 100755 index 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/apple-touch-icon.png differ diff --git a/usr/local/www/themes/pfsense_ng/bottom-loader.js b/usr/local/www/themes/pfsense_ng/bottom-loader.js new file mode 100644 index 000000000..a21f775a4 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/bottom-loader.js @@ -0,0 +1,10 @@ +// diff --git a/usr/local/www/themes/pfsense_ng/favicon.ico b/usr/local/www/themes/pfsense_ng/favicon.ico new file mode 100644 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/favicon.ico differ diff --git a/usr/local/www/themes/pfsense_ng/graphlink.css b/usr/local/www/themes/pfsense_ng/graphlink.css new file mode 100644 index 000000000..521059e4a --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/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/images/alert_bgr.png b/usr/local/www/themes/pfsense_ng/images/alert_bgr.png new file mode 100755 index 000000000..5a8ac81b7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/alert_bgr.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/alerter.png b/usr/local/www/themes/pfsense_ng/images/alerter.png new file mode 100755 index 000000000..e026bfeb5 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/alerter.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/background.jpg b/usr/local/www/themes/pfsense_ng/images/background.jpg new file mode 100755 index 000000000..ebdff470c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/background.jpg differ diff --git a/usr/local/www/themes/pfsense_ng/images/footer.png b/usr/local/www/themes/pfsense_ng/images/footer.png new file mode 100755 index 000000000..b10002b0e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/footer.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/header.png b/usr/local/www/themes/pfsense_ng/images/header.png new file mode 100755 index 000000000..6f8128ca7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/header.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/help.png b/usr/local/www/themes/pfsense_ng/images/help.png new file mode 100755 index 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/help.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/horizontal.png b/usr/local/www/themes/pfsense_ng/images/horizontal.png new file mode 100755 index 000000000..f098bb375 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/horizontal.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/hostname.png b/usr/local/www/themes/pfsense_ng/images/hostname.png new file mode 100755 index 000000000..cd79f5cf2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/hostname.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico b/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico new file mode 100644 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif new file mode 100755 index 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif new file mode 100755 index 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif new file mode 100755 index 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif new file mode 100755 index 000000000..764694120 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif new file mode 100755 index 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif new file mode 100755 index 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif new file mode 100755 index 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif new file mode 100755 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif new file mode 100755 index 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif new file mode 100755 index 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif new file mode 100755 index 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif new file mode 100755 index 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif new file mode 100755 index 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif new file mode 100755 index 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png new file mode 100755 index 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif new file mode 100755 index 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif new file mode 100755 index 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif new file mode 100755 index 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif new file mode 100755 index 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif new file mode 100755 index 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif new file mode 100755 index 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif new file mode 100755 index 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif new file mode 100755 index 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif new file mode 100755 index 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png new file mode 100755 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png new file mode 100755 index 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png new file mode 100755 index 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png new file mode 100755 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png new file mode 100755 index 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png new file mode 100755 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png new file mode 100755 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png new file mode 100755 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png new file mode 100755 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png new file mode 100755 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png new file mode 100755 index 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png new file mode 100755 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png new file mode 100755 index 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png new file mode 100755 index 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png new file mode 100755 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png new file mode 100755 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif new file mode 100644 index 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif new file mode 100755 index 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif new file mode 100755 index 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif new file mode 100755 index 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif new file mode 100755 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif new file mode 100755 index 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif new file mode 100755 index 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif new file mode 100755 index 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif new file mode 100755 index 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif new file mode 100755 index 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif new file mode 100755 index 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif new file mode 100644 index 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif new file mode 100644 index 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif new file mode 100755 index 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif new file mode 100755 index 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif new file mode 100755 index 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif new file mode 100755 index 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif new file mode 100755 index 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif new file mode 100755 index 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif new file mode 100755 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif new file mode 100755 index 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif new file mode 100755 index 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif new file mode 100755 index 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif new file mode 100755 index 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif new file mode 100755 index 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif new file mode 100755 index 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif new file mode 100755 index 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif new file mode 100755 index 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif new file mode 100755 index 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif new file mode 100755 index 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif new file mode 100755 index 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif new file mode 100755 index 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif new file mode 100755 index 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif new file mode 100755 index 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif new file mode 100644 index 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif new file mode 100755 index 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png new file mode 100755 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png new file mode 100755 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png new file mode 100755 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png new file mode 100755 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png new file mode 100755 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png new file mode 100755 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif new file mode 100755 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png new file mode 100755 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png new file mode 100755 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/in.gif b/usr/local/www/themes/pfsense_ng/images/icons/in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/in.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/out.gif b/usr/local/www/themes/pfsense_ng/images/icons/out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/out.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif b/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/log.png b/usr/local/www/themes/pfsense_ng/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/log.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/logo.gif b/usr/local/www/themes/pfsense_ng/images/logo.gif new file mode 100755 index 000000000..e5da95c15 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/logo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/logobig.jpg b/usr/local/www/themes/pfsense_ng/images/logobig.jpg new file mode 100755 index 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/logobig.jpg differ diff --git a/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif b/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif new file mode 100755 index 000000000..e59432a5f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif b/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif new file mode 100755 index 000000000..14298a123 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif b/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif new file mode 100755 index 000000000..6e9747801 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/menu-dot.gif b/usr/local/www/themes/pfsense_ng/images/menu-dot.gif new file mode 100755 index 000000000..c76609b7d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/menu-dot.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/menu_footer.gif b/usr/local/www/themes/pfsense_ng/images/menu_footer.gif new file mode 100755 index 000000000..d06faa403 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/menu_footer.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/menu_right.gif b/usr/local/www/themes/pfsense_ng/images/menu_right.gif new file mode 100755 index 000000000..881327cfc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/menu_right.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/menubgr.png b/usr/local/www/themes/pfsense_ng/images/menubgr.png new file mode 100755 index 000000000..45e0ec710 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/menubgr.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png b/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png new file mode 100755 index 000000000..fdff49fc2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png b/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png new file mode 100755 index 000000000..05f48322c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif b/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png new file mode 100755 index 000000000..37db2fdcf Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png new file mode 100755 index 000000000..fba7af914 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/button.gif b/usr/local/www/themes/pfsense_ng/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/button.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/graph.png b/usr/local/www/themes/pfsense_ng/images/misc/graph.png new file mode 100755 index 000000000..507ec75ea Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/graph.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif b/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif b/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/loader.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif new file mode 100755 index 000000000..cb6bc0ce1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif new file mode 100755 index 000000000..b838b1736 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/logon.png b/usr/local/www/themes/pfsense_ng/images/misc/logon.png new file mode 100755 index 000000000..98aa37a33 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/logon.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png b/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif new file mode 100755 index 000000000..7ff1e9512 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif new file mode 100755 index 000000000..2c3290808 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif new file mode 100755 index 000000000..b5a29303b Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif new file mode 100755 index 000000000..067ef18be Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif new file mode 100755 index 000000000..72de6bdff Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif new file mode 100755 index 000000000..d72761ada Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif b/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif new file mode 100755 index 000000000..bf66fdba5 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif new file mode 100755 index 000000000..ca35e2a18 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png b/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/status.png b/usr/local/www/themes/pfsense_ng/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/status.png differ diff --git a/usr/local/www/themes/pfsense_ng/images/transparent.gif b/usr/local/www/themes/pfsense_ng/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/transparent.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif b/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster.gif new file mode 100755 index 000000000..a6f90a284 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster_mo.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster_mo.gif new file mode 100755 index 000000000..3787d697e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/joincluster_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/restore.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/restore.gif new file mode 100755 index 000000000..eb8931f63 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/restore.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/restore_mo.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/restore_mo.gif new file mode 100755 index 000000000..2ee46c7b4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/restore_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone.gif new file mode 100755 index 000000000..aa035a47e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone_mo.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone_mo.gif new file mode 100755 index 000000000..c8066ef0a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/standalone_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster.gif new file mode 100755 index 000000000..dbe0ca2b8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster.gif differ diff --git a/usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster_mo.gif b/usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster_mo.gif new file mode 100755 index 000000000..83d980a7a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/images/wizards/initial/startnewcluster_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif b/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js new file mode 100644 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js new file mode 100644 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js new file mode 100644 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js new file mode 100644 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js new file mode 100644 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js new file mode 100644 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css new file mode 100644 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js new file mode 100644 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php b/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php new file mode 100644 index 000000000..76b936f19 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php @@ -0,0 +1,51 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetBodyJS() { + global $rootmenu; + + if (isset($rootmenu)) { + return $rootmenu->getMenuJScript(); + } else if (empty($rootmenu)) { + return "alert('No rootmenu object found.');"; + } else { + return "alert('No JavaScript attached to rootmenu object.');"; + } +} + +?> diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php b/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php new file mode 100644 index 000000000..bd44dccbb --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php @@ -0,0 +1,85 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetHeadJS() { + global $g, $rootmenu; + + $transmenu_stub =<<getChildren() as $component) { + $id = "mnua_" . str_replace(" ", "", strtolower($component->getID())); + + $childJScript .=<< diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenu.org b/usr/local/www/themes/pfsense_ng/javascript/transmenu.org new file mode 100644 index 000000000..6c9e353cd --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/transmenu.org @@ -0,0 +1,785 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * + * Customizable multi-level animated DHTML menus with transparency. + * + * Copyright 2003-2004, Aaron Boodman (www.youngpup.net) + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ================================================================================================= + * updates: + * 04.19.04 fixed cascade problem with menus nested greater than two levels. + * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu. + * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;) + * also made gecko check a little more strict by specifying build no. + * ============================================================================================== */ + + + +//================================================================================================== +// Configuration properties +//================================================================================================== +TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif +TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat +TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat +TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed) +TransMenu.menuPadding = 5; // padding between menu border and items grid +TransMenu.itemPadding = 3; // additional padding around each item +TransMenu.shadowSize = 2; // size of shadow under menu +TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge +TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS) +TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5 +TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS) +TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5 +TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu +TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu + + +//================================================================================================== +// Internal use properties +//================================================================================================== +TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4}; +TransMenu.direction = {down:1,right:2}; +TransMenu.registry = []; +TransMenu._maxZ = 100; + + + +//================================================================================================== +// Static methods +//================================================================================================== +// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0 +TransMenu.isSupported = function() { + var ua = navigator.userAgent.toLowerCase(); + var pf = navigator.platform.toLowerCase(); + var an = navigator.appName; + var r = false; + + if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0 + else if (an == "Microsoft Internet Explorer") { + if (document.getElementById) { // ie5.1+ mac,win + if (pf.indexOf("mac") == 0) { + r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1; + } + else r = true; + } + } + + return r; +} + +// call this in onload once menus have been created +TransMenu.initialize = function() { + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + menu.initialize(); + } +} + +// call this in document body to write out menu html +TransMenu.renderAll = function() { + var aMenuHtml = []; + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + aMenuHtml[i] = menu.toString(); + } + document.write(aMenuHtml.join("")); +} + +//================================================================================================== +// TransMenu constructor (only called internally) +//================================================================================================== +// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a +// reference to an HTML element, or a TransMenuItem from an existing menu. +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menu from actuator +// iTop : Top pixel offset of menu from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +// parentMenuSet : Menuset this menu will be added to. +//================================================================================================== +function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) { + // public methods + this.addItem = addItem; + this.addMenu = addMenu; + this.toString = toString; + this.initialize = initialize; + this.isOpen = false; + this.show = show; + this.hide = hide; + this.items = []; + + // events + this.onactivate = new Function(); // when the menu starts to slide open + this.ondeactivate = new Function(); // when the menu finishes sliding closed + this.onmouseover = new Function(); // when the menu has been moused over + this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future + this.ondequeue = new Function(); + + // initialization + this.index = TransMenu.registry.length; + TransMenu.registry[this.index] = this; + + var id = "TransMenu" + this.index; + var contentHeight = null; + var contentWidth = null; + var childMenuSet = null; + var animating = false; + var childMenus = []; + var slideAccel = -1; + var elmCache = null; + var ready = false; + var _this = this; + var a = null; + + var pos = iDirection == TransMenu.direction.down ? "top" : "left"; + var dim = null; + + // private and public method implimentations + function addItem(sText, sUrl) { + var item = new TransMenuItem(sText, sUrl, this); + item._index = this.items.length; + this.items[item._index] = item; + } + + function addMenu(oMenuItem) { + if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here"); + + if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight); + + var m = childMenuSet.addMenu(oMenuItem); + + childMenus[oMenuItem._index] = m; + m.onmouseover = child_mouseover; + m.ondeactivate = child_deactivate; + m.onqueue = child_queue; + m.ondequeue = child_dequeue; + + return m; + } + + function initialize() { + initCache(); + initEvents(); + initSize(); + ready = true; + } + + function show() { + //dbg_dump("show"); + if (ready) { + _this.isOpen = true; + animating = true; + setContainerPos(); + elmCache["clip"].style.visibility = "visible"; + elmCache["clip"].style.zIndex = TransMenu._maxZ++; + //dbg_dump("maxZ: " + TransMenu._maxZ); + slideStart(); + _this.onactivate(); + } + } + + function hide() { + if (ready) { + _this.isOpen = false; + animating = true; + + for (var i = 0, item = null; item = elmCache.item[i]; i++) + dehighlight(item); + + if (childMenuSet) childMenuSet.hide(); + + slideStart(); + _this.ondeactivate(); + } + } + + function setContainerPos() { + var sub = oActuator.constructor == TransMenuItem; + var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator; + var el = act; + + var x = 0; + var y = 0; + + + var minX = 0; + var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width); + var minY = 0; + var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height); + + // add up all offsets... subtract any scroll offset + while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) { + x += el.offsetLeft; + y += el.offsetTop; + + if (el.scrollLeft) x -= el.scrollLeft; + if (el.scrollTop) y -= el.scrollTop; + + el = el.offsetParent; + } + + if (oActuator.constructor == TransMenuItem) { + x += parseInt(el.parentNode.style.left); + y += parseInt(el.parentNode.style.top); + } + + switch (iReferencePoint) { + case TransMenu.reference.topLeft: + break; + case TransMenu.reference.topRight: + x += act.offsetWidth; + break; + case TransMenu.reference.bottomLeft: + y += act.offsetHeight; + break; + case TransMenu.reference.bottomRight: + x += act.offsetWidth; + y += act.offsetHeight; + break; + } + + x += iLeft; + y += iTop; + + x = Math.max(Math.min(x, maxX), minX); + y = Math.max(Math.min(y, maxY), minY); + + elmCache["clip"].style.left = x + "px"; + elmCache["clip"].style.top = y + "px"; + } + + function slideStart() { + var x0 = parseInt(elmCache["content"].style[pos]); + var x1 = _this.isOpen ? 0 : -dim; + + if (a != null) a.stop(); + a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel); + + a.onframe = slideFrame; + a.onend = slideEnd; + + a.start(); + } + + function slideFrame(x) { + elmCache["content"].style[pos] = x + "px"; + } + + function slideEnd() { + if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden"; + animating = false; + } + + function initSize() { + // everything is based off the size of the items table... + var ow = elmCache["items"].offsetWidth; + var oh = elmCache["items"].offsetHeight; + var ua = navigator.userAgent.toLowerCase(); + + // clipping container should be ow/oh + the size of the shadow + elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px"; + elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px"; + + // same with content... + elmCache["content"].style.width = ow + TransMenu.shadowSize + "px"; + elmCache["content"].style.height = oh + TransMenu.shadowSize + "px"; + + contentHeight = oh + TransMenu.shadowSize; + contentWidth = ow + TransMenu.shadowSize; + + dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth; + + // set initially closed + elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px"; + elmCache["clip"].style.visibility = "hidden"; + + // if *not* mac/ie 5 + if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) { + // set background div to offset size + elmCache["background"].style.width = ow + "px"; + elmCache["background"].style.height = oh + "px"; + elmCache["background"].style.backgroundColor = TransMenu.backgroundColor; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px"; + elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor; + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px"; + elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor; + } + // mac ie is a little different because we use a PNG for the transparency + else { + // set background div to offset size + elmCache["background"].firstChild.src = TransMenu.backgroundPng; + elmCache["background"].firstChild.width = ow; + elmCache["background"].firstChild.height = oh; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize; + elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize); + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize; + elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset; + } + } + + function initCache() { + var menu = document.getElementById(id); + var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing + + elmCache = {}; + elmCache["clip"] = menu; + elmCache["item"] = []; + + for (var i = 0, elm = null; elm = all[i]; i++) { + switch (elm.className) { + case "items": + case "content": + case "background": + case "shadowRight": + case "shadowBottom": + elmCache[elm.className] = elm; + break; + case "item": + elm._index = elmCache["item"].length; + elmCache["item"][elm._index] = elm; + break; + } + } + + // hack! + _this.elmCache = elmCache; + } + + function initEvents() { + // hook item mouseover + for (var i = 0, item = null; item = elmCache.item[i]; i++) { + item.onmouseover = item_mouseover; + item.onmouseout = item_mouseout; + item.onclick = item_click; + } + + // hook actuation + if (typeof oActuator.tagName != "undefined") { + oActuator.onmouseover = actuator_mouseover; + oActuator.onmouseout = actuator_mouseout; + } + + // hook menu mouseover + elmCache["content"].onmouseover = content_mouseover; + elmCache["content"].onmouseout = content_mouseout; + } + + function highlight(oRow) { + oRow.className = "item hover"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOn; + } + + function dehighlight(oRow) { + oRow.className = "item"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOff; + } + + function item_mouseover() { + if (!animating) { + highlight(this); + + if (childMenus[this._index]) + childMenuSet.showMenu(childMenus[this._index]); + else if (childMenuSet) childMenuSet.hide(); + } + } + + function item_mouseout() { + if (!animating) { + if (childMenus[this._index]) + childMenuSet.hideMenu(childMenus[this._index]); + else // otherwise child_deactivate will do this + dehighlight(this); + } + } + + function item_click() { + if (!animating) { + if (_this.items[this._index].url) + location.href = _this.items[this._index].url; + } + } + + function actuator_mouseover() { + parentMenuSet.showMenu(_this); + } + + function actuator_mouseout() { + parentMenuSet.hideMenu(_this); + } + + function content_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + _this.onmouseover(); + } + } + + function content_mouseout() { + if (!animating) { + parentMenuSet.hideMenu(_this); + } + } + + function child_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + } + } + + function child_deactivate() { + for (var i = 0; i < childMenus.length; i++) { + if (childMenus[i] == this) { + dehighlight(elmCache["item"][i]); + break; + } + } + } + + function child_queue() { + parentMenuSet.hideMenu(_this); + } + + function child_dequeue() { + parentMenuSet.showMenu(_this); + } + + function toString() { + var aHtml = []; + var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : ""); + + for (var i = 0, item = null; item = this.items[i]; i++) { + aHtml[i] = item.toString(childMenus[i]); + } + + return '
                            ' + + '
                            ' + + '' + + aHtml.join('') + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            '; + } +} + + +//================================================================================================== +// TransMenuSet +//================================================================================================== +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menus from actuator +// iTop : Top pixel offset of menus from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +//================================================================================================== +TransMenuSet.registry = []; + +function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) { + // public methods + this.addMenu = addMenu; + this.showMenu = showMenu; + this.hideMenu = hideMenu; + this.hide = hide; + this.hideCurrent = hideCurrent; + + // initialization + var menus = []; + var _this = this; + var current = null; + + this.index = TransMenuSet.registry.length; + TransMenuSet.registry[this.index] = this; + + // method implimentations... + 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) { + // close currently open menu + if (current != null) hide(current); + + // set current menu to this one + current = oMenu; + + // if this menu is closed, open it + oMenu.show(); + } + else { + // hide pending calls to close this menu + cancelHide(oMenu); + } + } + + function hideMenu(oMenu) { + //dbg_dump("hideMenu a " + oMenu.index); + if (current == oMenu && oMenu.isOpen) { + //dbg_dump("hideMenu b " + oMenu.index); + if (!oMenu.hideTimer) scheduleHide(oMenu); + } + } + + function scheduleHide(oMenu) { + //dbg_dump("scheduleHide " + oMenu.index); + oMenu.onqueue(); + oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay); + } + + function cancelHide(oMenu) { + //dbg_dump("cancelHide " + oMenu.index); + if (oMenu.hideTimer) { + oMenu.ondequeue(); + window.clearTimeout(oMenu.hideTimer); + oMenu.hideTimer = null; + } + } + + function hide(oMenu) { + if (!oMenu && current) oMenu = current; + + if (oMenu && current == oMenu && oMenu.isOpen) { + hideCurrent(); + } + } + + function hideCurrent() { + if (null != current) { + cancelHide(current); + current.hideTimer = null; + current.hide(); + current = null; + } + } +} + +//================================================================================================== +// TransMenuItem (internal) +// represents an item in a dropdown +//================================================================================================== +// sText : The item display text +// sUrl : URL to load when the item is clicked +// oParent : Menu this item is a part of +//================================================================================================== +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 + '' + + ''; + } +} + + + + + + +//===================================================================== +// Accel[erated] [an]imation object +// change a property of an object over time in an accelerated fashion +//===================================================================== +// obj : reference to the object whose property you'd like to animate +// prop : property you would like to change eg: "left" +// to : final value of prop +// time : time the animation should take to run +// zip : optional. specify the zippiness of the acceleration. pick a +// number between -1 and 1 where -1 is full decelerated, 1 is +// full accelerated, and 0 is linear (no acceleration). default +// is 0. +// unit : optional. specify the units for use with prop. default is +// "px". +//===================================================================== +// bezier functions lifted from the lib_animation.js file in the +// 13th Parallel API. www.13thparallel.org +//===================================================================== + +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(); +} + + + +//===================================================================== +// public methods +//===================================================================== + +// after you create an accelimation, you call this to start it-a runnin' +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); +} + +// and if you need to stop it early for some reason... +Accelimation.prototype.stop = function() { + Accelimation._remove(this); +} + + + +//===================================================================== +// private methods +//===================================================================== + +// paints one frame. gets called by Accelimation._paintAll. +Accelimation.prototype._paint = function(time) { + if (time < this.t1) { + var elapsed = time - this.t0; + this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2)); + } + else this._end(); +} + +// ends the animation +Accelimation.prototype._end = function() { + Accelimation._remove(this); + this.onframe(this.x1); + this.onend(); +} + + + + +//===================================================================== +// static methods (all private) +//===================================================================== + +// add a function to the list of ones to call periodically +Accelimation._add = function(o) { + var index = this.instances.length; + this.instances[index] = o; + // if this is the first one, start the engine + if (this.instances.length == 1) { + this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes); + } +} + +// remove a function from the list +Accelimation._remove = function(o) { + for (var i = 0; i < this.instances.length; i++) { + if (o == this.instances[i]) { + this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) ); + break; + } + } + // if that was the last one, stop the engine + if (this.instances.length == 0) { + window.clearInterval(this.timerID); + this.timerID = null; + } +} + +// "engine" - call each function in the list every so often +Accelimation._paintAll = function() { + var now = new Date().getTime(); + for (var i = 0; i < this.instances.length; i++) { + this.instances[i]._paint(now); + } +} + + +// Bezier functions: +Accelimation._B1 = function(t) { return t*t*t } +Accelimation._B2 = function(t) { return 3*t*t*(1-t) } +Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) } +Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) } + + +//Finds the coordinates of a point at a certain stage through a bezier curve +Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) { + return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent); +} + + +//===================================================================== +// static properties +//===================================================================== + +Accelimation.instances = []; +Accelimation.targetRes = 10; +Accelimation.timerID = null; + + +//===================================================================== +// IE win memory cleanup +//===================================================================== + +if (window.attachEvent) { + var cearElementProps = [ + 'data', + 'onmouseover', + 'onmouseout', + 'onmousedown', + 'onmouseup', + 'ondblclick', + 'onclick', + 'onselectstart', + 'oncontextmenu' + ]; + + window.attachEvent("onunload", function() { + var el; + for(var d = document.all.length;d--;){ + el = document.all[d]; + for(var c = cearElementProps.length;c--;){ + el[cearElementProps[c]] = null; + } + } + }); +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js b/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js new file mode 100644 index 000000000..88626c753 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js @@ -0,0 +1,86 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * Customizable multi-level animated DHTML menus with transparency. + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ============================================================================================== */ +TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;} +else r=true;}} +return r;} +TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}} +TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();} +document.write(aMenuHtml.join(""));} +function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;} +function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;} +function initialize(){initCache();initEvents();initSize();ready=true;} +function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}} +function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}} +function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;} +if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);} +switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;} +x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";} +function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();} +function slideFrame(x){elmCache["content"].style[pos]=x+"px";} +function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;} +function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;} +else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}} +function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}} +_this.elmCache=elmCache;} +function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;} +if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;} +elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;} +function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;} +function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;} +function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}} +function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}} +function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}} +function actuator_mouseover(){parentMenuSet.showMenu(_this);} +function actuator_mouseout(){parentMenuSet.hideMenu(_this);} +function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}} +function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}} +function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}} +function child_deactivate(){for(var i=0;i'+'
                            '+''+aHtml.join('')+'
                            '+'
                            '+'
                            '+'
                            '+'
                            ';}} +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 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js b/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js new file mode 100644 index 000000000..a21f775a4 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js @@ -0,0 +1,10 @@ +// 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 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/favicon.ico differ 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 000000000..5a8ac81b7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/alerter.png b/usr/local/www/themes/pfsense_ng_fs/images/alerter.png new file mode 100755 index 000000000..e026bfeb5 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/alerter.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/background.jpg b/usr/local/www/themes/pfsense_ng_fs/images/background.jpg new file mode 100755 index 000000000..ebdff470c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/background.jpg differ 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 000000000..b10002b0e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/footer.png differ 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 000000000..6f8128ca7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/header.png differ 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 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/help.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png b/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png new file mode 100755 index 000000000..f098bb375 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/hostname.png b/usr/local/www/themes/pfsense_ng_fs/images/hostname.png new file mode 100755 index 000000000..cd79f5cf2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/hostname.png differ 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 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico differ 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 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif differ 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 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif differ 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 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif new file mode 100755 index 000000000..764694120 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif differ 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 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif differ 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 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif differ 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 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif new file mode 100755 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif differ 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 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif differ 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 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif differ 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 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif differ 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 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif differ 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 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif differ 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 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif differ 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 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png differ 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 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif differ 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 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif differ 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 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif differ 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 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif differ 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 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif differ 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 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif differ 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 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif differ 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 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif differ 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 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png new file mode 100755 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png differ 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 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png differ 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 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png new file mode 100755 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png differ 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 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png new file mode 100755 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png new file mode 100755 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png new file mode 100755 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png new file mode 100755 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png new file mode 100755 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png differ 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 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png new file mode 100755 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png differ 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 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png differ 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 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png new file mode 100755 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png new file mode 100755 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif differ 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 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif differ 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 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif differ 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 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif differ 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 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif differ 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 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif new file mode 100755 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif differ 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 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif differ 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 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif differ 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 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif differ 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 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif differ 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 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif differ 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 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif differ 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 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif differ 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 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif differ 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 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif differ 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 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif differ 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 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif differ 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 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif differ 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 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif differ 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 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif differ 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 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif new file mode 100755 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif differ 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 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif differ 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 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif differ 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 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif differ 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 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif differ 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 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif differ 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 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif differ 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 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif differ 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 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif differ 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 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif differ 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 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif differ 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 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif differ 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 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif differ 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 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif differ 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 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif differ 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 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif differ 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 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png new file mode 100755 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png new file mode 100755 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png new file mode 100755 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png new file mode 100755 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png new file mode 100755 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png new file mode 100755 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif new file mode 100755 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png new file mode 100755 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png new file mode 100755 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif b/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/log.png b/usr/local/www/themes/pfsense_ng_fs/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/log.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/logo.gif b/usr/local/www/themes/pfsense_ng_fs/images/logo.gif new file mode 100755 index 000000000..e5da95c15 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/logo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg b/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg new file mode 100755 index 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif b/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif new file mode 100755 index 000000000..e59432a5f Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif b/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif new file mode 100755 index 000000000..14298a123 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif b/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif new file mode 100755 index 000000000..6e9747801 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif b/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif new file mode 100755 index 000000000..c76609b7d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif b/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif new file mode 100755 index 000000000..d06faa403 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif new file mode 100755 index 000000000..881327cfc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png b/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png new file mode 100755 index 000000000..45e0ec710 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png b/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png new file mode 100755 index 000000000..fdff49fc2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png b/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png new file mode 100755 index 000000000..05f48322c Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png new file mode 100755 index 000000000..37db2fdcf Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png new file mode 100755 index 000000000..fba7af914 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png new file mode 100755 index 000000000..507ec75ea Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif new file mode 100755 index 000000000..529d827dc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif new file mode 100755 index 000000000..5d10ac3aa Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif new file mode 100755 index 000000000..cb6bc0ce1 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif new file mode 100755 index 000000000..b838b1736 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif new file mode 100755 index 000000000..05bb04cb7 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png new file mode 100755 index 000000000..98aa37a33 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png b/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif new file mode 100755 index 000000000..7ff1e9512 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif new file mode 100755 index 000000000..2c3290808 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif new file mode 100755 index 000000000..b5a29303b Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif new file mode 100755 index 000000000..067ef18be Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif new file mode 100755 index 000000000..72de6bdff Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif new file mode 100755 index 000000000..d72761ada Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif new file mode 100755 index 000000000..bf66fdba5 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif b/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif new file mode 100755 index 000000000..ca35e2a18 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png b/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/status.png b/usr/local/www/themes/pfsense_ng_fs/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/status.png differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif b/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif b/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster.gif new file mode 100755 index 000000000..a6f90a284 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster_mo.gif new file mode 100755 index 000000000..3787d697e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/joincluster_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore.gif new file mode 100755 index 000000000..eb8931f63 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore_mo.gif new file mode 100755 index 000000000..2ee46c7b4 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/restore_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone.gif new file mode 100755 index 000000000..aa035a47e Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone_mo.gif new file mode 100755 index 000000000..c8066ef0a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/standalone_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster.gif new file mode 100755 index 000000000..dbe0ca2b8 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster_mo.gif b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster_mo.gif new file mode 100755 index 000000000..83d980a7a Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/images/wizards/initial/startnewcluster_mo.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js new file mode 100644 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js new file mode 100644 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js new file mode 100644 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js new file mode 100644 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js new file mode 100644 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js new file mode 100644 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css new file mode 100644 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js new file mode 100644 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php new file mode 100644 index 000000000..76b936f19 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php @@ -0,0 +1,51 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetBodyJS() { + global $rootmenu; + + if (isset($rootmenu)) { + return $rootmenu->getMenuJScript(); + } else if (empty($rootmenu)) { + return "alert('No rootmenu object found.');"; + } else { + return "alert('No JavaScript attached to rootmenu object.');"; + } +} + +?> diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php new file mode 100644 index 000000000..bd44dccbb --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php @@ -0,0 +1,85 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetHeadJS() { + global $g, $rootmenu; + + $transmenu_stub =<<getChildren() as $component) { + $id = "mnua_" . str_replace(" ", "", strtolower($component->getID())); + + $childJScript .=<< diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org new file mode 100644 index 000000000..6c9e353cd --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org @@ -0,0 +1,785 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * + * Customizable multi-level animated DHTML menus with transparency. + * + * Copyright 2003-2004, Aaron Boodman (www.youngpup.net) + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ================================================================================================= + * updates: + * 04.19.04 fixed cascade problem with menus nested greater than two levels. + * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu. + * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;) + * also made gecko check a little more strict by specifying build no. + * ============================================================================================== */ + + + +//================================================================================================== +// Configuration properties +//================================================================================================== +TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif +TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat +TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat +TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed) +TransMenu.menuPadding = 5; // padding between menu border and items grid +TransMenu.itemPadding = 3; // additional padding around each item +TransMenu.shadowSize = 2; // size of shadow under menu +TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge +TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS) +TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5 +TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS) +TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5 +TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu +TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu + + +//================================================================================================== +// Internal use properties +//================================================================================================== +TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4}; +TransMenu.direction = {down:1,right:2}; +TransMenu.registry = []; +TransMenu._maxZ = 100; + + + +//================================================================================================== +// Static methods +//================================================================================================== +// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0 +TransMenu.isSupported = function() { + var ua = navigator.userAgent.toLowerCase(); + var pf = navigator.platform.toLowerCase(); + var an = navigator.appName; + var r = false; + + if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0 + else if (an == "Microsoft Internet Explorer") { + if (document.getElementById) { // ie5.1+ mac,win + if (pf.indexOf("mac") == 0) { + r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1; + } + else r = true; + } + } + + return r; +} + +// call this in onload once menus have been created +TransMenu.initialize = function() { + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + menu.initialize(); + } +} + +// call this in document body to write out menu html +TransMenu.renderAll = function() { + var aMenuHtml = []; + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + aMenuHtml[i] = menu.toString(); + } + document.write(aMenuHtml.join("")); +} + +//================================================================================================== +// TransMenu constructor (only called internally) +//================================================================================================== +// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a +// reference to an HTML element, or a TransMenuItem from an existing menu. +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menu from actuator +// iTop : Top pixel offset of menu from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +// parentMenuSet : Menuset this menu will be added to. +//================================================================================================== +function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) { + // public methods + this.addItem = addItem; + this.addMenu = addMenu; + this.toString = toString; + this.initialize = initialize; + this.isOpen = false; + this.show = show; + this.hide = hide; + this.items = []; + + // events + this.onactivate = new Function(); // when the menu starts to slide open + this.ondeactivate = new Function(); // when the menu finishes sliding closed + this.onmouseover = new Function(); // when the menu has been moused over + this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future + this.ondequeue = new Function(); + + // initialization + this.index = TransMenu.registry.length; + TransMenu.registry[this.index] = this; + + var id = "TransMenu" + this.index; + var contentHeight = null; + var contentWidth = null; + var childMenuSet = null; + var animating = false; + var childMenus = []; + var slideAccel = -1; + var elmCache = null; + var ready = false; + var _this = this; + var a = null; + + var pos = iDirection == TransMenu.direction.down ? "top" : "left"; + var dim = null; + + // private and public method implimentations + function addItem(sText, sUrl) { + var item = new TransMenuItem(sText, sUrl, this); + item._index = this.items.length; + this.items[item._index] = item; + } + + function addMenu(oMenuItem) { + if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here"); + + if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight); + + var m = childMenuSet.addMenu(oMenuItem); + + childMenus[oMenuItem._index] = m; + m.onmouseover = child_mouseover; + m.ondeactivate = child_deactivate; + m.onqueue = child_queue; + m.ondequeue = child_dequeue; + + return m; + } + + function initialize() { + initCache(); + initEvents(); + initSize(); + ready = true; + } + + function show() { + //dbg_dump("show"); + if (ready) { + _this.isOpen = true; + animating = true; + setContainerPos(); + elmCache["clip"].style.visibility = "visible"; + elmCache["clip"].style.zIndex = TransMenu._maxZ++; + //dbg_dump("maxZ: " + TransMenu._maxZ); + slideStart(); + _this.onactivate(); + } + } + + function hide() { + if (ready) { + _this.isOpen = false; + animating = true; + + for (var i = 0, item = null; item = elmCache.item[i]; i++) + dehighlight(item); + + if (childMenuSet) childMenuSet.hide(); + + slideStart(); + _this.ondeactivate(); + } + } + + function setContainerPos() { + var sub = oActuator.constructor == TransMenuItem; + var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator; + var el = act; + + var x = 0; + var y = 0; + + + var minX = 0; + var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width); + var minY = 0; + var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height); + + // add up all offsets... subtract any scroll offset + while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) { + x += el.offsetLeft; + y += el.offsetTop; + + if (el.scrollLeft) x -= el.scrollLeft; + if (el.scrollTop) y -= el.scrollTop; + + el = el.offsetParent; + } + + if (oActuator.constructor == TransMenuItem) { + x += parseInt(el.parentNode.style.left); + y += parseInt(el.parentNode.style.top); + } + + switch (iReferencePoint) { + case TransMenu.reference.topLeft: + break; + case TransMenu.reference.topRight: + x += act.offsetWidth; + break; + case TransMenu.reference.bottomLeft: + y += act.offsetHeight; + break; + case TransMenu.reference.bottomRight: + x += act.offsetWidth; + y += act.offsetHeight; + break; + } + + x += iLeft; + y += iTop; + + x = Math.max(Math.min(x, maxX), minX); + y = Math.max(Math.min(y, maxY), minY); + + elmCache["clip"].style.left = x + "px"; + elmCache["clip"].style.top = y + "px"; + } + + function slideStart() { + var x0 = parseInt(elmCache["content"].style[pos]); + var x1 = _this.isOpen ? 0 : -dim; + + if (a != null) a.stop(); + a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel); + + a.onframe = slideFrame; + a.onend = slideEnd; + + a.start(); + } + + function slideFrame(x) { + elmCache["content"].style[pos] = x + "px"; + } + + function slideEnd() { + if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden"; + animating = false; + } + + function initSize() { + // everything is based off the size of the items table... + var ow = elmCache["items"].offsetWidth; + var oh = elmCache["items"].offsetHeight; + var ua = navigator.userAgent.toLowerCase(); + + // clipping container should be ow/oh + the size of the shadow + elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px"; + elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px"; + + // same with content... + elmCache["content"].style.width = ow + TransMenu.shadowSize + "px"; + elmCache["content"].style.height = oh + TransMenu.shadowSize + "px"; + + contentHeight = oh + TransMenu.shadowSize; + contentWidth = ow + TransMenu.shadowSize; + + dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth; + + // set initially closed + elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px"; + elmCache["clip"].style.visibility = "hidden"; + + // if *not* mac/ie 5 + if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) { + // set background div to offset size + elmCache["background"].style.width = ow + "px"; + elmCache["background"].style.height = oh + "px"; + elmCache["background"].style.backgroundColor = TransMenu.backgroundColor; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px"; + elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor; + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px"; + elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor; + } + // mac ie is a little different because we use a PNG for the transparency + else { + // set background div to offset size + elmCache["background"].firstChild.src = TransMenu.backgroundPng; + elmCache["background"].firstChild.width = ow; + elmCache["background"].firstChild.height = oh; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize; + elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize); + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize; + elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset; + } + } + + function initCache() { + var menu = document.getElementById(id); + var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing + + elmCache = {}; + elmCache["clip"] = menu; + elmCache["item"] = []; + + for (var i = 0, elm = null; elm = all[i]; i++) { + switch (elm.className) { + case "items": + case "content": + case "background": + case "shadowRight": + case "shadowBottom": + elmCache[elm.className] = elm; + break; + case "item": + elm._index = elmCache["item"].length; + elmCache["item"][elm._index] = elm; + break; + } + } + + // hack! + _this.elmCache = elmCache; + } + + function initEvents() { + // hook item mouseover + for (var i = 0, item = null; item = elmCache.item[i]; i++) { + item.onmouseover = item_mouseover; + item.onmouseout = item_mouseout; + item.onclick = item_click; + } + + // hook actuation + if (typeof oActuator.tagName != "undefined") { + oActuator.onmouseover = actuator_mouseover; + oActuator.onmouseout = actuator_mouseout; + } + + // hook menu mouseover + elmCache["content"].onmouseover = content_mouseover; + elmCache["content"].onmouseout = content_mouseout; + } + + function highlight(oRow) { + oRow.className = "item hover"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOn; + } + + function dehighlight(oRow) { + oRow.className = "item"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOff; + } + + function item_mouseover() { + if (!animating) { + highlight(this); + + if (childMenus[this._index]) + childMenuSet.showMenu(childMenus[this._index]); + else if (childMenuSet) childMenuSet.hide(); + } + } + + function item_mouseout() { + if (!animating) { + if (childMenus[this._index]) + childMenuSet.hideMenu(childMenus[this._index]); + else // otherwise child_deactivate will do this + dehighlight(this); + } + } + + function item_click() { + if (!animating) { + if (_this.items[this._index].url) + location.href = _this.items[this._index].url; + } + } + + function actuator_mouseover() { + parentMenuSet.showMenu(_this); + } + + function actuator_mouseout() { + parentMenuSet.hideMenu(_this); + } + + function content_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + _this.onmouseover(); + } + } + + function content_mouseout() { + if (!animating) { + parentMenuSet.hideMenu(_this); + } + } + + function child_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + } + } + + function child_deactivate() { + for (var i = 0; i < childMenus.length; i++) { + if (childMenus[i] == this) { + dehighlight(elmCache["item"][i]); + break; + } + } + } + + function child_queue() { + parentMenuSet.hideMenu(_this); + } + + function child_dequeue() { + parentMenuSet.showMenu(_this); + } + + function toString() { + var aHtml = []; + var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : ""); + + for (var i = 0, item = null; item = this.items[i]; i++) { + aHtml[i] = item.toString(childMenus[i]); + } + + return '
                            ' + + '
                            ' + + '' + + aHtml.join('') + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            '; + } +} + + +//================================================================================================== +// TransMenuSet +//================================================================================================== +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menus from actuator +// iTop : Top pixel offset of menus from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +//================================================================================================== +TransMenuSet.registry = []; + +function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) { + // public methods + this.addMenu = addMenu; + this.showMenu = showMenu; + this.hideMenu = hideMenu; + this.hide = hide; + this.hideCurrent = hideCurrent; + + // initialization + var menus = []; + var _this = this; + var current = null; + + this.index = TransMenuSet.registry.length; + TransMenuSet.registry[this.index] = this; + + // method implimentations... + 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) { + // close currently open menu + if (current != null) hide(current); + + // set current menu to this one + current = oMenu; + + // if this menu is closed, open it + oMenu.show(); + } + else { + // hide pending calls to close this menu + cancelHide(oMenu); + } + } + + function hideMenu(oMenu) { + //dbg_dump("hideMenu a " + oMenu.index); + if (current == oMenu && oMenu.isOpen) { + //dbg_dump("hideMenu b " + oMenu.index); + if (!oMenu.hideTimer) scheduleHide(oMenu); + } + } + + function scheduleHide(oMenu) { + //dbg_dump("scheduleHide " + oMenu.index); + oMenu.onqueue(); + oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay); + } + + function cancelHide(oMenu) { + //dbg_dump("cancelHide " + oMenu.index); + if (oMenu.hideTimer) { + oMenu.ondequeue(); + window.clearTimeout(oMenu.hideTimer); + oMenu.hideTimer = null; + } + } + + function hide(oMenu) { + if (!oMenu && current) oMenu = current; + + if (oMenu && current == oMenu && oMenu.isOpen) { + hideCurrent(); + } + } + + function hideCurrent() { + if (null != current) { + cancelHide(current); + current.hideTimer = null; + current.hide(); + current = null; + } + } +} + +//================================================================================================== +// TransMenuItem (internal) +// represents an item in a dropdown +//================================================================================================== +// sText : The item display text +// sUrl : URL to load when the item is clicked +// oParent : Menu this item is a part of +//================================================================================================== +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 + '' + + ''; + } +} + + + + + + +//===================================================================== +// Accel[erated] [an]imation object +// change a property of an object over time in an accelerated fashion +//===================================================================== +// obj : reference to the object whose property you'd like to animate +// prop : property you would like to change eg: "left" +// to : final value of prop +// time : time the animation should take to run +// zip : optional. specify the zippiness of the acceleration. pick a +// number between -1 and 1 where -1 is full decelerated, 1 is +// full accelerated, and 0 is linear (no acceleration). default +// is 0. +// unit : optional. specify the units for use with prop. default is +// "px". +//===================================================================== +// bezier functions lifted from the lib_animation.js file in the +// 13th Parallel API. www.13thparallel.org +//===================================================================== + +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(); +} + + + +//===================================================================== +// public methods +//===================================================================== + +// after you create an accelimation, you call this to start it-a runnin' +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); +} + +// and if you need to stop it early for some reason... +Accelimation.prototype.stop = function() { + Accelimation._remove(this); +} + + + +//===================================================================== +// private methods +//===================================================================== + +// paints one frame. gets called by Accelimation._paintAll. +Accelimation.prototype._paint = function(time) { + if (time < this.t1) { + var elapsed = time - this.t0; + this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2)); + } + else this._end(); +} + +// ends the animation +Accelimation.prototype._end = function() { + Accelimation._remove(this); + this.onframe(this.x1); + this.onend(); +} + + + + +//===================================================================== +// static methods (all private) +//===================================================================== + +// add a function to the list of ones to call periodically +Accelimation._add = function(o) { + var index = this.instances.length; + this.instances[index] = o; + // if this is the first one, start the engine + if (this.instances.length == 1) { + this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes); + } +} + +// remove a function from the list +Accelimation._remove = function(o) { + for (var i = 0; i < this.instances.length; i++) { + if (o == this.instances[i]) { + this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) ); + break; + } + } + // if that was the last one, stop the engine + if (this.instances.length == 0) { + window.clearInterval(this.timerID); + this.timerID = null; + } +} + +// "engine" - call each function in the list every so often +Accelimation._paintAll = function() { + var now = new Date().getTime(); + for (var i = 0; i < this.instances.length; i++) { + this.instances[i]._paint(now); + } +} + + +// Bezier functions: +Accelimation._B1 = function(t) { return t*t*t } +Accelimation._B2 = function(t) { return 3*t*t*(1-t) } +Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) } +Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) } + + +//Finds the coordinates of a point at a certain stage through a bezier curve +Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) { + return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent); +} + + +//===================================================================== +// static properties +//===================================================================== + +Accelimation.instances = []; +Accelimation.targetRes = 10; +Accelimation.timerID = null; + + +//===================================================================== +// IE win memory cleanup +//===================================================================== + +if (window.attachEvent) { + var cearElementProps = [ + 'data', + 'onmouseover', + 'onmouseout', + 'onmousedown', + 'onmouseup', + 'ondblclick', + 'onclick', + 'onselectstart', + 'oncontextmenu' + ]; + + window.attachEvent("onunload", function() { + var el; + for(var d = document.all.length;d--;){ + el = document.all[d]; + for(var c = cearElementProps.length;c--;){ + el[cearElementProps[c]] = null; + } + } + }); +} \ No newline at end of file diff --git a/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js new file mode 100644 index 000000000..88626c753 --- /dev/null +++ b/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js @@ -0,0 +1,86 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * Customizable multi-level animated DHTML menus with transparency. + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ============================================================================================== */ +TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;} +else r=true;}} +return r;} +TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}} +TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();} +document.write(aMenuHtml.join(""));} +function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;} +function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;} +function initialize(){initCache();initEvents();initSize();ready=true;} +function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}} +function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}} +function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;} +if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);} +switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;} +x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";} +function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();} +function slideFrame(x){elmCache["content"].style[pos]=x+"px";} +function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;} +function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;} +else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}} +function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}} +_this.elmCache=elmCache;} +function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;} +if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;} +elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;} +function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;} +function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;} +function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}} +function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}} +function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}} +function actuator_mouseover(){parentMenuSet.showMenu(_this);} +function actuator_mouseout(){parentMenuSet.hideMenu(_this);} +function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}} +function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}} +function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}} +function child_deactivate(){for(var i=0;i'+'
                            '+''+aHtml.join('')+'
                            '+'
                            '+'
                            '+'
                            '+'
                            ';}} +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 000000000..7a4b9759d Binary files /dev/null and b/usr/local/www/themes/the_wall/apple-touch-icon.png differ diff --git a/usr/local/www/themes/the_wall/bottom-loader.js b/usr/local/www/themes/the_wall/bottom-loader.js new file mode 100644 index 000000000..a21f775a4 --- /dev/null +++ b/usr/local/www/themes/the_wall/bottom-loader.js @@ -0,0 +1,10 @@ +// 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 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/the_wall/favicon.ico differ 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 000000000..b186db0fc Binary files /dev/null and b/usr/local/www/themes/the_wall/images/alert_bgr.png differ 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 000000000..cdd1df619 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/background.jpg differ 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 000000000..399e0ffce Binary files /dev/null and b/usr/local/www/themes/the_wall/images/footer.png differ diff --git a/usr/local/www/themes/the_wall/images/header.png b/usr/local/www/themes/the_wall/images/header.png new file mode 100755 index 000000000..25b813c28 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/header.png differ diff --git a/usr/local/www/themes/the_wall/images/help.png b/usr/local/www/themes/the_wall/images/help.png new file mode 100755 index 000000000..1de05e3ef Binary files /dev/null and b/usr/local/www/themes/the_wall/images/help.png differ diff --git a/usr/local/www/themes/the_wall/images/horizontal.gif b/usr/local/www/themes/the_wall/images/horizontal.gif new file mode 100755 index 000000000..a280dcbab Binary files /dev/null and b/usr/local/www/themes/the_wall/images/horizontal.gif differ diff --git a/usr/local/www/themes/the_wall/images/horizontal.png b/usr/local/www/themes/the_wall/images/horizontal.png new file mode 100755 index 000000000..e774028a2 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/horizontal.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/favicon.ico b/usr/local/www/themes/the_wall/images/icons/favicon.ico new file mode 100644 index 000000000..3440bf24d Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/favicon.ico differ 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 000000000..46ccb92da Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_3g.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif b/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif new file mode 100755 index 000000000..cf983e4eb Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif differ 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 000000000..3ede1fffb Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif differ 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 000000000..b23354909 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alert.gif b/usr/local/www/themes/the_wall/images/icons/icon_alert.gif new file mode 100755 index 000000000..764694120 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_alert.gif differ 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 000000000..ad43e1799 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif differ 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 000000000..abd1b8b34 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif differ 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 000000000..4acf2aa10 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif b/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif new file mode 100755 index 000000000..660571eb2 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif differ 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 000000000..55c1c4ad2 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_block.gif b/usr/local/www/themes/the_wall/images/icons/icon_block.gif new file mode 100755 index 000000000..670c9681c Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_block.gif differ 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 000000000..eb726d6da Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif differ 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 000000000..e6345fe89 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif differ 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 000000000..a071c66d7 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_cal.gif b/usr/local/www/themes/the_wall/images/icons/icon_cal.gif new file mode 100755 index 000000000..a9c7c8763 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_cal.gif differ 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 000000000..1647e2f4f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_carp.gif b/usr/local/www/themes/the_wall/images/icons/icon_carp.gif new file mode 100755 index 000000000..9454a82ee Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_carp.gif differ 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 000000000..2ba8db211 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif differ 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 000000000..12db07ad0 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_chain.png differ 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 000000000..393674d42 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_check.gif differ 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 000000000..e171ba883 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif differ 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 000000000..00c865a19 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif differ 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 000000000..7b412eed1 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_close.gif b/usr/local/www/themes/the_wall/images/icons/icon_close.gif new file mode 100755 index 000000000..e0f86a76a Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_close.gif differ 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 000000000..7182e0daf Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_configure.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_down.gif b/usr/local/www/themes/the_wall/images/icons/icon_down.gif new file mode 100755 index 000000000..b71a9c541 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_down.gif differ 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 000000000..70a7473c3 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif new file mode 100755 index 000000000..584587a14 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_e.gif b/usr/local/www/themes/the_wall/images/icons/icon_e.gif new file mode 100755 index 000000000..29508006f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_e.gif differ 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 000000000..9ba5738fd Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif differ 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 000000000..e0fa6597a Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_error.gif differ 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 000000000..36c2ec7b0 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png new file mode 100755 index 000000000..069cbbe19 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png differ 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 000000000..bd7f9a5e1 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png differ 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 000000000..434776ca9 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png b/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png new file mode 100755 index 000000000..f7863497e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png differ 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 000000000..48a34b666 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png new file mode 100755 index 000000000..48a9ed2d2 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png new file mode 100755 index 000000000..7d929c006 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png new file mode 100755 index 000000000..867ef2c8f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png new file mode 100755 index 000000000..f667cfc26 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png new file mode 100755 index 000000000..d2d454834 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png differ 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 000000000..06b53a113 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png new file mode 100755 index 000000000..33de926bd Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png differ 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 000000000..aa8300ab8 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png differ 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 000000000..1857d0e60 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png new file mode 100755 index 000000000..cf56792b1 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png new file mode 100755 index 000000000..e00eebeac Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif b/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif new file mode 100755 index 000000000..52c18accc Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif differ 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 000000000..84c84dbff Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_help.gif differ 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 000000000..0c569a793 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif differ 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 000000000..faa84d403 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif differ 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 000000000..d11a5f00c Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif differ 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 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_in.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif b/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif new file mode 100755 index 000000000..cd3a5329c Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif differ 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 000000000..062665510 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif b/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif new file mode 100755 index 000000000..144951300 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_left.gif b/usr/local/www/themes/the_wall/images/icons/icon_left.gif new file mode 100755 index 000000000..8effefea1 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_left.gif differ 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 000000000..c77801454 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif differ 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 000000000..84c6fa270 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif differ 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 000000000..4a1983ae9 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_log.gif differ 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 000000000..d31bd9b64 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif b/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif new file mode 100755 index 000000000..f9fda338e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif differ 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 000000000..fb2c05fcd Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif differ 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 000000000..afe0104bd Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_logs.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_match.gif b/usr/local/www/themes/the_wall/images/icons/icon_match.gif new file mode 100644 index 000000000..215571f77 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_match.gif differ 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 000000000..6e4c3645b Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_minus.gif b/usr/local/www/themes/the_wall/images/icons/icon_minus.gif new file mode 100755 index 000000000..417544f89 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_minus.gif differ 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 000000000..ac3da1476 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_open.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_other.gif b/usr/local/www/themes/the_wall/images/icons/icon_other.gif new file mode 100755 index 000000000..e6f780f9e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_other.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif new file mode 100755 index 000000000..b08d970f0 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_out.gif b/usr/local/www/themes/the_wall/images/icons/icon_out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_out.gif differ 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 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_parp.gif b/usr/local/www/themes/the_wall/images/icons/icon_parp.gif new file mode 100755 index 000000000..96acaf3ea Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_parp.gif differ 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 000000000..7d7d00e06 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif differ 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 000000000..fe1bb0da0 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_pass.gif differ 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 000000000..f7f4c2007 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif new file mode 100755 index 000000000..6adc431c2 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif differ 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 000000000..2a94eeb93 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_plus.gif differ 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 000000000..8dcd7c006 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif new file mode 100755 index 000000000..0c7984928 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif differ 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 000000000..ebc745718 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif differ 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 000000000..1c7ca0835 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif differ 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 000000000..eb41284aa Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif new file mode 100755 index 000000000..d78b867a4 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif new file mode 100755 index 000000000..13658f772 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif new file mode 100755 index 000000000..90b576e90 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif differ 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 000000000..9aebb032d Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif differ 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 000000000..4ab4992a1 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif differ 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 000000000..7025d20ea Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif differ 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 000000000..4542432ec Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif new file mode 100755 index 000000000..8d3a68d8a Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif differ 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 000000000..15e0aed9a Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif differ 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 000000000..5565cd67d Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reject.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif new file mode 100755 index 000000000..6c09fae2f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif differ 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 000000000..fdf2d8b80 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_right.gif differ 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 000000000..e49fbd73c Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif differ 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 000000000..a5d6d7c99 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif new file mode 100644 index 000000000..543fd56b4 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif differ 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 000000000..09bb58fd4 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif differ 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 000000000..f58f11114 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif differ 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 000000000..a93bcfb14 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif differ 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 000000000..922addc5c Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif new file mode 100755 index 000000000..b4cfdeacc Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif b/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif new file mode 100644 index 000000000..f93a25d20 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif new file mode 100755 index 000000000..a092b4096 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif new file mode 100755 index 000000000..ecdb58f69 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif new file mode 100755 index 000000000..c00e2084c Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png b/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png new file mode 100755 index 000000000..d7b964de9 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-group.png b/usr/local/www/themes/the_wall/images/icons/icon_system-group.png new file mode 100755 index 000000000..1c974f20a Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_system-group.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png b/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png new file mode 100755 index 000000000..2f6047d6b Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system-user.png b/usr/local/www/themes/the_wall/images/icons/icon_system-user.png new file mode 100755 index 000000000..ef8215609 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_system-user.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png b/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png new file mode 100755 index 000000000..30f306df6 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png b/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png new file mode 100755 index 000000000..9bbb6c7f8 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif b/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif new file mode 100755 index 000000000..ffeb2cd88 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif new file mode 100755 index 000000000..6d46aaf84 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif b/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif new file mode 100755 index 000000000..e15ab6c9d Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif new file mode 100755 index 000000000..f776281f2 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_up.gif b/usr/local/www/themes/the_wall/images/icons/icon_up.gif new file mode 100755 index 000000000..883c5a29e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_up.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif new file mode 100755 index 000000000..0ddcce281 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif new file mode 100755 index 000000000..9f869a451 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif b/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif new file mode 100755 index 000000000..1f0addc2e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif new file mode 100755 index 000000000..35bf5806f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif b/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif new file mode 100755 index 000000000..2d22182ec Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png b/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png new file mode 100755 index 000000000..21cb27d48 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png b/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png new file mode 100755 index 000000000..ab8294632 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x.gif b/usr/local/www/themes/the_wall/images/icons/icon_x.gif new file mode 100755 index 000000000..24e4d4929 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_x.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif b/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif new file mode 100755 index 000000000..d2bfbc8ba Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif b/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif new file mode 100755 index 000000000..da7b57c8f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif b/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif new file mode 100755 index 000000000..8828fa6ca Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/in.gif b/usr/local/www/themes/the_wall/images/icons/in.gif new file mode 100755 index 000000000..f1da7718f Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/in.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/in_d.gif b/usr/local/www/themes/the_wall/images/icons/in_d.gif new file mode 100755 index 000000000..18e26be34 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/in_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/out.gif b/usr/local/www/themes/the_wall/images/icons/out.gif new file mode 100755 index 000000000..1a1d1d5b8 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/out.gif differ diff --git a/usr/local/www/themes/the_wall/images/icons/out_d.gif b/usr/local/www/themes/the_wall/images/icons/out_d.gif new file mode 100755 index 000000000..879f1dac3 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/icons/out_d.gif differ diff --git a/usr/local/www/themes/the_wall/images/log.png b/usr/local/www/themes/the_wall/images/log.png new file mode 100755 index 000000000..762ba8037 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/log.png differ diff --git a/usr/local/www/themes/the_wall/images/logo.gif b/usr/local/www/themes/the_wall/images/logo.gif new file mode 100755 index 000000000..a71ce5a92 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/logo.gif differ diff --git a/usr/local/www/themes/the_wall/images/logobig.jpg b/usr/local/www/themes/the_wall/images/logobig.jpg new file mode 100755 index 000000000..2ef196da6 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/logobig.jpg differ diff --git a/usr/local/www/themes/the_wall/images/menu_down.gif b/usr/local/www/themes/the_wall/images/menu_down.gif new file mode 100755 index 000000000..137de8dd9 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/menu_down.gif differ diff --git a/usr/local/www/themes/the_wall/images/menu_right.gif b/usr/local/www/themes/the_wall/images/menu_right.gif new file mode 100755 index 000000000..881327cfc Binary files /dev/null and b/usr/local/www/themes/the_wall/images/menu_right.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/bar_blue.gif b/usr/local/www/themes/the_wall/images/misc/bar_blue.gif new file mode 100755 index 000000000..741186abc Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/bar_blue.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/bar_gray.gif b/usr/local/www/themes/the_wall/images/misc/bar_gray.gif new file mode 100755 index 000000000..e86e245be Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/bar_gray.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/bar_left.gif b/usr/local/www/themes/the_wall/images/misc/bar_left.gif new file mode 100755 index 000000000..af751fad0 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/bar_left.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/bar_right.gif b/usr/local/www/themes/the_wall/images/misc/bar_right.gif new file mode 100755 index 000000000..ff12d9efc Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/bar_right.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png b/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png new file mode 100755 index 000000000..37db2fdcf Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png differ diff --git a/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png b/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png new file mode 100755 index 000000000..fba7af914 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png differ diff --git a/usr/local/www/themes/the_wall/images/misc/button.gif b/usr/local/www/themes/the_wall/images/misc/button.gif new file mode 100755 index 000000000..e85dbb382 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/button.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/graph.png b/usr/local/www/themes/the_wall/images/misc/graph.png new file mode 100755 index 000000000..507ec75ea Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/graph.png differ diff --git a/usr/local/www/themes/the_wall/images/misc/key_128.gif b/usr/local/www/themes/the_wall/images/misc/key_128.gif new file mode 100755 index 000000000..ea5ae34b6 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/key_128.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/key_152.gif b/usr/local/www/themes/the_wall/images/misc/key_152.gif new file mode 100755 index 000000000..6c7fc03b4 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/key_152.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/key_256.gif b/usr/local/www/themes/the_wall/images/misc/key_256.gif new file mode 100755 index 000000000..3e1c377f2 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/key_256.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/key_64.gif b/usr/local/www/themes/the_wall/images/misc/key_64.gif new file mode 100755 index 000000000..87892bd4d Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/key_64.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/loader.gif b/usr/local/www/themes/the_wall/images/misc/loader.gif new file mode 100755 index 000000000..a98cf7827 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/loader.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/loader_all.gif b/usr/local/www/themes/the_wall/images/misc/loader_all.gif new file mode 100755 index 000000000..cb6bc0ce1 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/loader_all.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/loader_filter.gif b/usr/local/www/themes/the_wall/images/misc/loader_filter.gif new file mode 100755 index 000000000..b838b1736 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/loader_filter.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/loader_tab.gif b/usr/local/www/themes/the_wall/images/misc/loader_tab.gif new file mode 100755 index 000000000..a98cf7827 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/loader_tab.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/logon.png b/usr/local/www/themes/the_wall/images/misc/logon.png new file mode 100755 index 000000000..acd388b9c Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/logon.png differ diff --git a/usr/local/www/themes/the_wall/images/misc/progress_bar.gif b/usr/local/www/themes/the_wall/images/misc/progress_bar.gif new file mode 100755 index 000000000..3b4aa52e8 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/progress_bar.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/rrd_error.png b/usr/local/www/themes/the_wall/images/misc/rrd_error.png new file mode 100755 index 000000000..a79ecf398 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/rrd_error.png differ diff --git a/usr/local/www/themes/the_wall/images/misc/status_alerter.gif b/usr/local/www/themes/the_wall/images/misc/status_alerter.gif new file mode 100755 index 000000000..7ff1e9512 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/status_alerter.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif b/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif new file mode 100755 index 000000000..2c3290808 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/status_left.gif b/usr/local/www/themes/the_wall/images/misc/status_left.gif new file mode 100755 index 000000000..b5a29303b Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/status_left.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif b/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif new file mode 100755 index 000000000..067ef18be Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif b/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif new file mode 100755 index 000000000..72de6bdff Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif b/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif new file mode 100755 index 000000000..d72761ada Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/status_right.gif b/usr/local/www/themes/the_wall/images/misc/status_right.gif new file mode 100755 index 000000000..bf66fdba5 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/status_right.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/tri_c.gif b/usr/local/www/themes/the_wall/images/misc/tri_c.gif new file mode 100755 index 000000000..317b75828 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/tri_c.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif b/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif new file mode 100755 index 000000000..309846eba Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/tri_o.gif b/usr/local/www/themes/the_wall/images/misc/tri_o.gif new file mode 100755 index 000000000..eb95c3250 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/tri_o.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif b/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif new file mode 100755 index 000000000..f818f3b4e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/widget_loader.gif b/usr/local/www/themes/the_wall/images/misc/widget_loader.gif new file mode 100755 index 000000000..ca35e2a18 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/widget_loader.gif differ diff --git a/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif b/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif new file mode 100755 index 000000000..fad101f42 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif differ diff --git a/usr/local/www/themes/the_wall/images/new_tab_menu.png b/usr/local/www/themes/the_wall/images/new_tab_menu.png new file mode 100755 index 000000000..4bdfcef08 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/new_tab_menu.png differ diff --git a/usr/local/www/themes/the_wall/images/status.png b/usr/local/www/themes/the_wall/images/status.png new file mode 100755 index 000000000..a3e368e75 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/status.png differ diff --git a/usr/local/www/themes/the_wall/images/transparent.gif b/usr/local/www/themes/the_wall/images/transparent.gif new file mode 100755 index 000000000..89c5530dc Binary files /dev/null and b/usr/local/www/themes/the_wall/images/transparent.gif differ diff --git a/usr/local/www/themes/the_wall/images/transparent_pixel.gif b/usr/local/www/themes/the_wall/images/transparent_pixel.gif new file mode 100755 index 000000000..35d42e808 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/transparent_pixel.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/joincluster.gif b/usr/local/www/themes/the_wall/images/wizards/initial/joincluster.gif new file mode 100755 index 000000000..a6f90a284 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/joincluster.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/joincluster_mo.gif b/usr/local/www/themes/the_wall/images/wizards/initial/joincluster_mo.gif new file mode 100755 index 000000000..3787d697e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/joincluster_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/restore.gif b/usr/local/www/themes/the_wall/images/wizards/initial/restore.gif new file mode 100755 index 000000000..eb8931f63 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/restore.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/restore_mo.gif b/usr/local/www/themes/the_wall/images/wizards/initial/restore_mo.gif new file mode 100755 index 000000000..2ee46c7b4 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/restore_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/standalone.gif b/usr/local/www/themes/the_wall/images/wizards/initial/standalone.gif new file mode 100755 index 000000000..aa035a47e Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/standalone.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/standalone_mo.gif b/usr/local/www/themes/the_wall/images/wizards/initial/standalone_mo.gif new file mode 100755 index 000000000..c8066ef0a Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/standalone_mo.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster.gif b/usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster.gif new file mode 100755 index 000000000..dbe0ca2b8 Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster.gif differ diff --git a/usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster_mo.gif b/usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster_mo.gif new file mode 100755 index 000000000..83d980a7a Binary files /dev/null and b/usr/local/www/themes/the_wall/images/wizards/initial/startnewcluster_mo.gif differ diff --git a/usr/local/www/themes/the_wall/javascript/ie7/blank.gif b/usr/local/www/themes/the_wall/javascript/ie7/blank.gif new file mode 100755 index 000000000..a4fe2e629 Binary files /dev/null and b/usr/local/www/themes/the_wall/javascript/ie7/blank.gif differ diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js new file mode 100644 index 000000000..45543f66d --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)}); diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js new file mode 100644 index 000000000..b11e2b15b --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js new file mode 100644 index 000000000..4406d7a6b --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString}); diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js new file mode 100644 index 000000000..7121c8e3b --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i"){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Í.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Å=¤Ñ.Å.¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Å<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Í!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ýi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Á(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Å<5.5)¢¬(ã(¥­,¹));if(«.¢Í==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Á=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Á.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Å<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ü==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Å<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+¥Á,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Á,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Á=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=¥Á)Á+=µ[j];Á=Á.»(0,-1);ò+=¥Ä+Á+¥Á}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Á);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Á){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Á);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Á){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Á))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=¥Í){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[¥Ï]==¥Ì)},¥Í:£(¡){¤ ¢£(¡.©[¥Ï]==¥Í)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:¥Ð+(·(¢¾,¬.»(1,-1))-1)+¥Ð}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ý,Ô){¡.£±(Ý,Ô);·(¢¼,¢¡)};£ £°(¡,Ý,Ô){ÿ{¡.£û(Ý,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Å<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(¥){¤(¢».±(¥))?¥:¥Ð+¥+¥Ð};£ £÷(¥){¤(¢».±(¥))?¥.»(1,-1):¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Í.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.Ì)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,Ì;Ê((Ì=¡.Ì)&&Ì.¢µ!=£©){¡.¢á.¢Ú(Ì);¢¸.¢Ï(Ì)}if(Ì)¡.¢á.¢Ú(Ì)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Å>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(¥Ý,£(¡){if(!¡.£§){¢ Ò=¢¶(¥Þ,¡)[0];if(Ò){if(!Ò.id)Ò.id=Ò.ü;¡.£§=Ò.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.¥=(¬)?¬[1]:¥¨}if(¡.Ý==¥ã){ö(¡,¥ä,£(){¡.°.¢Ý=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ý)&&!¡[i].ý&&!¡[i].°.¢Ý){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ý==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].¥+¥Ð,1);¡[i].¥=¡[i].°.¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ð=¤ò;¢ ¢ÿ=(Å<6)?¤ógi:¤ôgi;¢ ¢ö=(Å<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.Î)Ã.Î.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Í.Ü==¥í||¡.©.Ü==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ å(¢ó){å=£(¡,¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!¥)¥=¡.©.¨;¡.°.¿=(¢û.±(¥))?£Þ.ú(0,ê(¡,¥)):¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,å);¢ ê=(è)?£(¡,¥){¤ ç(¡,¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,¥){¤ ç(¡,¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ý)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ï++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;å(¡);é(¡);¢®(¡)};¼.Ï=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ð.Ï=0;Ñ.Ú(¥ó+¢¯,Ð);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ð&&¨>=ê(¡,¡.©.Ð))¡.°.¨=ê(¡,¡.©.Ð);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ü==¥ô||¡.©.Ü==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ï++]=¡;é(¡);¢Ò(¡)}};Ø.Ï=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ Î=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=Î.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ï;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ð.Ï;i++){¢ ¡=Ð[i];¢ ¿=(¡.°.¨==¡.©.Ð);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ï;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,¥){if(¢Ð.±(¥))¤ ¢­(¥);if(¢ñ.±(¥))¤ ¢­(£Ù(¥)/100*¾(¡).Ä);¢ Î=(¡.£Ø)?¡:¡.Î;Î.¢Ï(Ã);Ã.Í.¨=¥;¤ Ã.¢Ñ};£ ÷(¡,¥){if(¢­(¥)>0)¤ ç(¡,¥);if(¢Ð.±(¥))¤ ¢­(¥);¡.Î.¢Ï(Ã);Ã.Í.Â=¥;¤ Ã.£×}};¢¬(¢Î(å).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));å();£Î(×)});¢«=×;if(«.¢Í==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Í==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤Ð (\\d\\.\\d)`¤Ï`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Í>`$1`$2`Í`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ü\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Á,x-¢Á,¢Á,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Á`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ü:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>``£¨`£é://£è.w3.£ç/1999/£æ`£å`Ò,¢ß,£ä`£¥` £¥`£¤,Ò`£¢`¢Ü`£ã`«.ì.`.°.¢Ý=Þ`£â`£à`.ý=Þ`.¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ð`£Ï`£Í`¢Ì [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js new file mode 100644 index 000000000..88c764fe9 --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}(); diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js new file mode 100644 index 000000000..7b8f2cf5f --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}}); diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css b/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css new file mode 100644 index 000000000..47c7edd2a --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css @@ -0,0 +1,43 @@ +body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} +body {margin: 8px; background: #333;} +h1 {margin: 0;} +h1 a:hover {background-color: transparent;} +h2 {font-size: 1.75em;} +h3 {font-size: 1.1em;} +a:active {color: #ff0000;} +a:link {color: #0a6cce;} +a:visited {color: #0a6cce;} +code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; + padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} +code.box {display: block; padding: 10px; margin: 0.5em 0;} +ul {list-style-type: square;} +dd {margin: .2em 0 .5em 1em;} +dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} +dl.library dd {font-style: italic; margin-left: 3em;} +dt {font-weight: bold;} +dt.pack {color: brown;} +a img {border-style: none;} +hr {height: 1px; color: #000; border-style: solid;} +hr.short {height: 2px; width: 100px;} +div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} +hr {border-bottom-width: 0px;} +div.header hr {color: #0a6cce; background-color: #0a6cce;} +div.content {min-height: 100px;} +div.footer hr {color: #898e79; background-color: #898e79; } +div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} +a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} +div.footer a:hover {background-color: transparent; text-decoration: none;} +div.header .menu {text-align: right;} +div.footer {font-size: x-small; margin-top: 8px;} +div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} +#license {margin-top: 5px; font-size: xx-small;} +table {border-top: 1px solid #000; border-left: 1px solid #000;} +th {background-color: #fff; text-align: left;} +th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} +th.small {width: 100px;} +th.medium {width: 200px;} +th.large {width: 270px;} +th.x-large {width: 408px;} +table.fixed {table-layout: fixed;} +span.comment {color: #666;} + diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js new file mode 100644 index 000000000..73e99acfb --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js @@ -0,0 +1,3 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +eval(function(A,r,s,e,n,a,l){s=function(e){return((e=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.Ì.¦²=¦ë};¤.È=¢(){¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)¥;if(¢í)Ü(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Á){if(¤é.µ(¾))¾=(Á||¦ô)+¾;¥ ¾};¢ £¹(¾,Á){¾=¢À(¾,Á);¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Á=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Á){¢Æ{¾=¢À(¾,Á);£½.¦¡(¦÷,¾,ë);£½.¥þ();¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);¥ ¦ô}};£ ¸=¢(£¼,£·){¥ £¼.¸(£·)};£ £´=¢(£¼){¥ £¼.£´()};if(á<5.5)Ü(ê(¦ù,Á));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.Î=Ö;£ ¨={};¢ ¤á(¿,Á){£ Ô=¢À(¿.¾,Á);if(¨[Ô])¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Á),£¹(¿.¾,Á));¥ ¨[Ô]};£ ¢ã=¢(¿){¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Á){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Á))}¨+=((¿.¾)?¤á(¿,Á):£´(£é))}¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].Î)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ý(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Í=ü(ô[i][0]);®(£ j=0;j<¢Í.¯;j++)ô[i][1](¢Í[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Á;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ý(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ð=¦ô;Ý(j<´.¯){¢³=´[j++];±=´[j++];¢Ð+=¢³+±;É=¦ô;if(´[j]==§±){Ý(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ð+=§±+É+§®}­=(£æ&&¢è[¢Ð])?¢è[¢Ð]:£å(­,¢³,±,É);if(£æ)¢è[¢Ð]=­}§=§.¥è(­)}¥ §};¢ ¤Ý(´){if(¤Ü.µ(´))´=§²+´;¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ý))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢Ï in ¤){if(¢Ï!=§¹&&¢Ï!=§º){if(¤[¢Ï].¯>1)¢Ï+=§»;¸(È,¢Ï)}}¥ È.¢Ü(§­)},§¹:¢(¡){¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ï,Ê){if(Ê&&¡.Ê!=Ê)¥ ë;¥(Ï==§³)?¢Î(¡):(¢±)?(¡.Ï==Ï.¤Ç()):(¡.Ï==Ï)};£ £µ=[];¢ ¢ö(£¶){¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){¥ ¨.¬(¦Ãg,¢(§){¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){¥ ¨.¬(¦Ág,§¾).¬(¦Çg,¢(§,¤×){¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ý(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){¥ ¡.Í}:¢(¡){¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ð(¡))}};¢ ¤Ô(¡){Ý(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ï(Ï){£ ¡=².£Û(Ï||§À);¡.Ì.¨=§Á;¥ ¡};¢ ¢Î(¢é){¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ï!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ý(¡&&(¡=¡.¥Ý)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¢þ(¡){Ý(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;¥ ¡};¢ ¤Ð(¡){¡=¡.¤¹;¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ï=§Æ+¡.Ï+§Ç,õ;Ý((õ=¡.õ)&&õ.£¯!=¤Ï){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Í=ü(è[i][0]);®(£ j=0;j<¢Í.¯;j++)è[i][1](¢Í[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Í){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Í=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Í]});¤.æ(§Î,¢(¡){if(¡.Ï==§Ï){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ð){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ï==§Ï&&¡[i].Õ==§Ð){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ý=¦Í;£ ¢¾=(á<6)?¦Îgi:¦Ïgi;£ ¤Ã=(á<5.5)?¦Ð:¦Ñ;£ ¹=£Ï();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){¥ ¡.Ì.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ý(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;¥ ã};¢ ì(¤Á){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ï!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){¥ ¢É(¡,©)};¢ £à(¡){¥ ¡.¢¼-¡.Í};¢ £ß(¡){¥ ¢É(¡,¡.«.¥Í)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){¥((¡.«.¢ï==§Ý)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ý)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ý)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ü(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ý&&¡.«.×!=§Ý&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Í-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Á||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Í=ù.Í;Ó(¢¡,§ã,¢(){£ i,¢å=(Í<ù.Í);Í=ù.Í;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ý.µ(©))¥ ø(©);if(¢Ö.µ(©))¥ ø(£Æ(©)/100*ã(¡).Í);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.Ì.°=©;¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)¥ ¢É(¡,©);if(£Ý.µ(©))¥ ø(©);¡.½.¢»(¹);¹.Ì.À=©;¥ ¹.¢¤}};Ü(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ò=Ò;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Á){¥ ê(¿.¾,Á)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ò.û=¶ ç(§ð+¢­+§ñ,§í);¥ ¨.¬(Ã.û,Ã.ID).¬(Ò.û,Ò.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ýg,¢(§,À,×){¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){¥ ¨.¬(¦Þg,¢($,$1){¥ ££[$1]})}};¢ _·(){¤.È=¢(){¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ý+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ý=¡.¢Ý.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){¥ £Õ(§)+¶ ·(§)};¢ _Ò(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ò.¢ª=¶ _·;¢ Ò(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ò.£Ú=_Ò;Ò.¢ª=¶ _Ò;Ò.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))¥ §;¥ £Õ(§)+¶ Ò(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){¥ Ü(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Å=¢Þ;¤.È=¢(){¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Å,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)¥;¢Ä.ê(¢Ä,Å,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Å==¢Þ)¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Å);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.¥Á=¢Å.Å;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Å,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Å!=¢Þ)¦[¤.³].Å=¤.Å}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Å=¤.¨.§(Ã.¤´);if(Å)¤.Å=¢ö(Å[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Á)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ý(¡&&!¡.£×(¨§))¡=¡.¢ü;¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ð.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ð.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ð.¢÷.¢Û(Â)})};¢­.¢Á=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ð.¢Á.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ð.¢Á.¢Ú(Â)});if(¡==².¥²){ª.Ð.¢Á.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ð.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ð.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){¥ Ä},¨º:¢(Ä,©){¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){¥ ¨À+¢¬.¢ù(©)+¨Á+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ð=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ð[Õ]=¤};ª.Ð.¢ª=¶ _ú;¶ ª.Ð(¨Â);¶ ª.Ð(¨Ã);¶ ª.Ð(§ú);¢ £Õ(´){¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Á):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Í+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ï==¨Ï&&¡.Õ!=¨Ð)¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ü(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Í==¨Í){ß.¦.£Í=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ï(¨Ù);¢ ¢º(£ú){¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Í.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.Ì.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ý,£ô)}};Ü(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ý:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.Ì.¢×)-¡.£É().À-¡.¤ô};Ü(¢º(£È));¢ ö(¡){if(!¡)¥ ë;if(¡.Ì.³==§Ú||¡.«.³==§Ú)¥ Ö;¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:¥ 0;¢¦ §â:¢¦ §é:¥ Þ.Í-¹.¢¼;¢¦ ¨à:¥(Þ.Í-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){¥ ø((Þ.Í-¹.¢¼)*£Æ(³)/100)}¹.Ì.À=³;¥ ¹.¢¤}};Ü(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.Ì.³=§Ú;¡.¦.³=§á;£Á(¡)};¢¢.Ë=0;¢ £Á(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Í);if(Ø){if(!¡.¦.£Ä)¥}Û{¡.¦.£Ä=¡.«.×!=§Ý&&¡.«.À==§Ý}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ý){¡.½.¢»(¹);¹.Ì.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ü(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ý(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}¥ ¢¹};Ü(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Á(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`Î-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^å|0cm$`^å$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Å\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{Î-â:â}:¢È{Î-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `Î-¥ù.js`¢¸`<Ì>`$1`$2`Ì`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Å-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`Î-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ð;¥ß:£¬(0 0 0 0);À:-9999`!`Î-¥Ü`<¤Î:`/>``¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`¥Ð`.¢ç=ë`.©=\x27`Î-£á-¥Ï`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`å`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`Î-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Á`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`Î-Å.¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ý.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`Î-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ð`£û,ð`¤ù`¢õ`¤ø`î`Î-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60'))); +/* packed with http://dean.edwards.name/packer/ */ diff --git a/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js b/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js new file mode 100644 index 000000000..210990519 --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js @@ -0,0 +1,2 @@ +/* IE7 version 0.7.3 (alpha) 2004/09/18 */ +if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement(""){var endTag="",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i=0){ + var optar=opt.split(" "); + for(i=0;i=0) ecolor=optar[i]; + if(ecolor=="") ecolor="#666"; + cn+="e"; + edges=true; + } +else if(opt && opt.indexOf("smooth")>=0){ + cn+="a"; + ecolor=Mix(bk,color); + } +if(opt && opt.indexOf("small")>=0) cn+="s"; +prefixt=cn; +prefixb=cn; +if(wich.indexOf("all")>=0){t=true;b=true;} +else if(wich.indexOf("top")>=0) t="true"; +else if(wich.indexOf("tl")>=0){ + t="true"; + if(wich.indexOf("tr")<0) prefixt+="l"; + } +else if(wich.indexOf("tr")>=0){ + t="true"; + prefixt+="r"; + } +if(wich.indexOf("bottom")>=0) b=true; +else if(wich.indexOf("bl")>=0){ + b="true"; + if(wich.indexOf("br")<0) prefixb+="l"; + } +else if(wich.indexOf("br")>=0){ + b="true"; + prefixb+="r"; + } +var v=getElementsBySelector(selector); +var l=v.length; +for(i=0;i=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=1;i<=lim;i++){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingTop=0; +el.insertBefore(d,el.firstChild); +} + +function AddBottom(el,bk,color,bc,cn){ +var i,lim=4,d=CreateEl("b"); + +if(cn.indexOf("s")>=0) lim=2; +if(bc) d.className="artop"; +else d.className="rtop"; +d.style.backgroundColor=bk; +for(i=lim;i>0;i--){ + var x=CreateEl("b"); + x.className=cn + i; + x.style.backgroundColor=color; + if(bc) x.style.borderColor=bc; + d.appendChild(x); + } +el.style.paddingBottom=0; +el.appendChild(d); +} + +function CreateEl(x){ +if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x)); +else return(document.createElement(x)); +} + +function getElementsBySelector(selector){ +var i,selid="",selclass="",tag=selector,f,s=[],objlist=[]; + +if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag" + s=selector.split(" "); + var fs=s[0].split("#"); + if(fs.length==1) return(objlist); + f=document.getElementById(fs[1]); + if(f) return(f.getElementsByTagName(s[1])); + return(objlist); + } +if(selector.indexOf("#")>0){ //id selector like "tag#id" + s=selector.split("#"); + tag=s[0]; + selid=s[1]; + } +if(selid!=""){ + f=document.getElementById(selid); + if(f) objlist.push(f); + return(objlist); + } +if(selector.indexOf(".")>0){ //class selector like "tag.class" + s=selector.split("."); + tag=s[0]; + selclass=s[1]; + } +var v=document.getElementsByTagName(tag); // tag selector like "tag" +if(selclass=="") + return(v); +for(i=0;i=0){ + objlist.push(v[i]); + } + } +return(objlist); +} + +function Mix(c1,c2){ +var i,step1,step2,x,y,r=new Array(3); +if(c1.length==4)step1=1; +else step1=2; +if(c2.length==4) step2=1; +else step2=2; +for(i=0;i<3;i++){ + x=parseInt(c1.substr(1+step1*i,step1),16); + if(step1==1) x=16*x+x; + y=parseInt(c2.substr(1+step2*i,step2),16); + if(step2==1) y=16*y+y; + r[i]=Math.floor((x*50+y*50)/100); + } +return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16)); +} \ No newline at end of file diff --git a/usr/local/www/themes/the_wall/javascript/transmenu-body.php b/usr/local/www/themes/the_wall/javascript/transmenu-body.php new file mode 100644 index 000000000..ada3d0c60 --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/transmenu-body.php @@ -0,0 +1,51 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetBodyJS() { + global $rootmenu; + + if (isset($rootmenu)) { + return $rootmenu->getMenuJScript(); + } else if (empty($rootmenu)) { + return "alert('No rootmenu object found.');"; + } else { + return "alert('No JavaScript attached to rootmenu object.');"; + } +} + +?> diff --git a/usr/local/www/themes/the_wall/javascript/transmenu-head.php b/usr/local/www/themes/the_wall/javascript/transmenu-head.php new file mode 100644 index 000000000..6eea15d09 --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/transmenu-head.php @@ -0,0 +1,85 @@ + + 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. + */ +/* ========================================================================== */ + +function nervecenterTransmenuGetHeadJS() { + global $g, $rootmenu; + + $transmenu_stub =<<getChildren() as $component) { + $id = "mnua_" . str_replace(" ", "", strtolower($component->getID())); + + $childJScript .=<< diff --git a/usr/local/www/themes/the_wall/javascript/transmenu.org b/usr/local/www/themes/the_wall/javascript/transmenu.org new file mode 100644 index 000000000..6c9e353cd --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/transmenu.org @@ -0,0 +1,785 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * + * Customizable multi-level animated DHTML menus with transparency. + * + * Copyright 2003-2004, Aaron Boodman (www.youngpup.net) + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ================================================================================================= + * updates: + * 04.19.04 fixed cascade problem with menus nested greater than two levels. + * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu. + * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;) + * also made gecko check a little more strict by specifying build no. + * ============================================================================================== */ + + + +//================================================================================================== +// Configuration properties +//================================================================================================== +TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif +TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat +TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat +TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed) +TransMenu.menuPadding = 5; // padding between menu border and items grid +TransMenu.itemPadding = 3; // additional padding around each item +TransMenu.shadowSize = 2; // size of shadow under menu +TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge +TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS) +TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5 +TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS) +TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5 +TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu +TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu + + +//================================================================================================== +// Internal use properties +//================================================================================================== +TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4}; +TransMenu.direction = {down:1,right:2}; +TransMenu.registry = []; +TransMenu._maxZ = 100; + + + +//================================================================================================== +// Static methods +//================================================================================================== +// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0 +TransMenu.isSupported = function() { + var ua = navigator.userAgent.toLowerCase(); + var pf = navigator.platform.toLowerCase(); + var an = navigator.appName; + var r = false; + + if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0 + else if (an == "Microsoft Internet Explorer") { + if (document.getElementById) { // ie5.1+ mac,win + if (pf.indexOf("mac") == 0) { + r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1; + } + else r = true; + } + } + + return r; +} + +// call this in onload once menus have been created +TransMenu.initialize = function() { + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + menu.initialize(); + } +} + +// call this in document body to write out menu html +TransMenu.renderAll = function() { + var aMenuHtml = []; + for (var i = 0, menu = null; menu = this.registry[i]; i++) { + aMenuHtml[i] = menu.toString(); + } + document.write(aMenuHtml.join("")); +} + +//================================================================================================== +// TransMenu constructor (only called internally) +//================================================================================================== +// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a +// reference to an HTML element, or a TransMenuItem from an existing menu. +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menu from actuator +// iTop : Top pixel offset of menu from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +// parentMenuSet : Menuset this menu will be added to. +//================================================================================================== +function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) { + // public methods + this.addItem = addItem; + this.addMenu = addMenu; + this.toString = toString; + this.initialize = initialize; + this.isOpen = false; + this.show = show; + this.hide = hide; + this.items = []; + + // events + this.onactivate = new Function(); // when the menu starts to slide open + this.ondeactivate = new Function(); // when the menu finishes sliding closed + this.onmouseover = new Function(); // when the menu has been moused over + this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future + this.ondequeue = new Function(); + + // initialization + this.index = TransMenu.registry.length; + TransMenu.registry[this.index] = this; + + var id = "TransMenu" + this.index; + var contentHeight = null; + var contentWidth = null; + var childMenuSet = null; + var animating = false; + var childMenus = []; + var slideAccel = -1; + var elmCache = null; + var ready = false; + var _this = this; + var a = null; + + var pos = iDirection == TransMenu.direction.down ? "top" : "left"; + var dim = null; + + // private and public method implimentations + function addItem(sText, sUrl) { + var item = new TransMenuItem(sText, sUrl, this); + item._index = this.items.length; + this.items[item._index] = item; + } + + function addMenu(oMenuItem) { + if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here"); + + if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight); + + var m = childMenuSet.addMenu(oMenuItem); + + childMenus[oMenuItem._index] = m; + m.onmouseover = child_mouseover; + m.ondeactivate = child_deactivate; + m.onqueue = child_queue; + m.ondequeue = child_dequeue; + + return m; + } + + function initialize() { + initCache(); + initEvents(); + initSize(); + ready = true; + } + + function show() { + //dbg_dump("show"); + if (ready) { + _this.isOpen = true; + animating = true; + setContainerPos(); + elmCache["clip"].style.visibility = "visible"; + elmCache["clip"].style.zIndex = TransMenu._maxZ++; + //dbg_dump("maxZ: " + TransMenu._maxZ); + slideStart(); + _this.onactivate(); + } + } + + function hide() { + if (ready) { + _this.isOpen = false; + animating = true; + + for (var i = 0, item = null; item = elmCache.item[i]; i++) + dehighlight(item); + + if (childMenuSet) childMenuSet.hide(); + + slideStart(); + _this.ondeactivate(); + } + } + + function setContainerPos() { + var sub = oActuator.constructor == TransMenuItem; + var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator; + var el = act; + + var x = 0; + var y = 0; + + + var minX = 0; + var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width); + var minY = 0; + var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height); + + // add up all offsets... subtract any scroll offset + while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) { + x += el.offsetLeft; + y += el.offsetTop; + + if (el.scrollLeft) x -= el.scrollLeft; + if (el.scrollTop) y -= el.scrollTop; + + el = el.offsetParent; + } + + if (oActuator.constructor == TransMenuItem) { + x += parseInt(el.parentNode.style.left); + y += parseInt(el.parentNode.style.top); + } + + switch (iReferencePoint) { + case TransMenu.reference.topLeft: + break; + case TransMenu.reference.topRight: + x += act.offsetWidth; + break; + case TransMenu.reference.bottomLeft: + y += act.offsetHeight; + break; + case TransMenu.reference.bottomRight: + x += act.offsetWidth; + y += act.offsetHeight; + break; + } + + x += iLeft; + y += iTop; + + x = Math.max(Math.min(x, maxX), minX); + y = Math.max(Math.min(y, maxY), minY); + + elmCache["clip"].style.left = x + "px"; + elmCache["clip"].style.top = y + "px"; + } + + function slideStart() { + var x0 = parseInt(elmCache["content"].style[pos]); + var x1 = _this.isOpen ? 0 : -dim; + + if (a != null) a.stop(); + a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel); + + a.onframe = slideFrame; + a.onend = slideEnd; + + a.start(); + } + + function slideFrame(x) { + elmCache["content"].style[pos] = x + "px"; + } + + function slideEnd() { + if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden"; + animating = false; + } + + function initSize() { + // everything is based off the size of the items table... + var ow = elmCache["items"].offsetWidth; + var oh = elmCache["items"].offsetHeight; + var ua = navigator.userAgent.toLowerCase(); + + // clipping container should be ow/oh + the size of the shadow + elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px"; + elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px"; + + // same with content... + elmCache["content"].style.width = ow + TransMenu.shadowSize + "px"; + elmCache["content"].style.height = oh + TransMenu.shadowSize + "px"; + + contentHeight = oh + TransMenu.shadowSize; + contentWidth = ow + TransMenu.shadowSize; + + dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth; + + // set initially closed + elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px"; + elmCache["clip"].style.visibility = "hidden"; + + // if *not* mac/ie 5 + if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) { + // set background div to offset size + elmCache["background"].style.width = ow + "px"; + elmCache["background"].style.height = oh + "px"; + elmCache["background"].style.backgroundColor = TransMenu.backgroundColor; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px"; + elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor; + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px"; + elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor; + } + // mac ie is a little different because we use a PNG for the transparency + else { + // set background div to offset size + elmCache["background"].firstChild.src = TransMenu.backgroundPng; + elmCache["background"].firstChild.width = ow; + elmCache["background"].firstChild.height = oh; + + // shadow left starts at offset left and is offsetHeight pixels high + elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowRight"].style.left = ow + "px"; + elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize; + elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize); + + // shadow bottom starts at offset height and is offsetWidth - shadowOffset + // pixels wide (we don't want the bottom and right shadows to overlap or we + // get an extra bright bottom-right corner) + elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng; + elmCache["shadowBottom"].style.top = oh + "px"; + elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize; + elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset; + } + } + + function initCache() { + var menu = document.getElementById(id); + var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing + + elmCache = {}; + elmCache["clip"] = menu; + elmCache["item"] = []; + + for (var i = 0, elm = null; elm = all[i]; i++) { + switch (elm.className) { + case "items": + case "content": + case "background": + case "shadowRight": + case "shadowBottom": + elmCache[elm.className] = elm; + break; + case "item": + elm._index = elmCache["item"].length; + elmCache["item"][elm._index] = elm; + break; + } + } + + // hack! + _this.elmCache = elmCache; + } + + function initEvents() { + // hook item mouseover + for (var i = 0, item = null; item = elmCache.item[i]; i++) { + item.onmouseover = item_mouseover; + item.onmouseout = item_mouseout; + item.onclick = item_click; + } + + // hook actuation + if (typeof oActuator.tagName != "undefined") { + oActuator.onmouseover = actuator_mouseover; + oActuator.onmouseout = actuator_mouseout; + } + + // hook menu mouseover + elmCache["content"].onmouseover = content_mouseover; + elmCache["content"].onmouseout = content_mouseout; + } + + function highlight(oRow) { + oRow.className = "item hover"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOn; + } + + function dehighlight(oRow) { + oRow.className = "item"; + if (childMenus[oRow._index]) + oRow.lastChild.firstChild.src = TransMenu.dingbatOff; + } + + function item_mouseover() { + if (!animating) { + highlight(this); + + if (childMenus[this._index]) + childMenuSet.showMenu(childMenus[this._index]); + else if (childMenuSet) childMenuSet.hide(); + } + } + + function item_mouseout() { + if (!animating) { + if (childMenus[this._index]) + childMenuSet.hideMenu(childMenus[this._index]); + else // otherwise child_deactivate will do this + dehighlight(this); + } + } + + function item_click() { + if (!animating) { + if (_this.items[this._index].url) + location.href = _this.items[this._index].url; + } + } + + function actuator_mouseover() { + parentMenuSet.showMenu(_this); + } + + function actuator_mouseout() { + parentMenuSet.hideMenu(_this); + } + + function content_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + _this.onmouseover(); + } + } + + function content_mouseout() { + if (!animating) { + parentMenuSet.hideMenu(_this); + } + } + + function child_mouseover() { + if (!animating) { + parentMenuSet.showMenu(_this); + } + } + + function child_deactivate() { + for (var i = 0; i < childMenus.length; i++) { + if (childMenus[i] == this) { + dehighlight(elmCache["item"][i]); + break; + } + } + } + + function child_queue() { + parentMenuSet.hideMenu(_this); + } + + function child_dequeue() { + parentMenuSet.showMenu(_this); + } + + function toString() { + var aHtml = []; + var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : ""); + + for (var i = 0, item = null; item = this.items[i]; i++) { + aHtml[i] = item.toString(childMenus[i]); + } + + return '
                            ' + + '
                            ' + + '' + + aHtml.join('') + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            ' + + '
                            '; + } +} + + +//================================================================================================== +// TransMenuSet +//================================================================================================== +// iDirection : The direction to slide out. One of TransMenu.direction. +// iLeft : Left pixel offset of menus from actuator +// iTop : Top pixel offset of menus from actuator +// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint. +//================================================================================================== +TransMenuSet.registry = []; + +function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) { + // public methods + this.addMenu = addMenu; + this.showMenu = showMenu; + this.hideMenu = hideMenu; + this.hide = hide; + this.hideCurrent = hideCurrent; + + // initialization + var menus = []; + var _this = this; + var current = null; + + this.index = TransMenuSet.registry.length; + TransMenuSet.registry[this.index] = this; + + // method implimentations... + 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) { + // close currently open menu + if (current != null) hide(current); + + // set current menu to this one + current = oMenu; + + // if this menu is closed, open it + oMenu.show(); + } + else { + // hide pending calls to close this menu + cancelHide(oMenu); + } + } + + function hideMenu(oMenu) { + //dbg_dump("hideMenu a " + oMenu.index); + if (current == oMenu && oMenu.isOpen) { + //dbg_dump("hideMenu b " + oMenu.index); + if (!oMenu.hideTimer) scheduleHide(oMenu); + } + } + + function scheduleHide(oMenu) { + //dbg_dump("scheduleHide " + oMenu.index); + oMenu.onqueue(); + oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay); + } + + function cancelHide(oMenu) { + //dbg_dump("cancelHide " + oMenu.index); + if (oMenu.hideTimer) { + oMenu.ondequeue(); + window.clearTimeout(oMenu.hideTimer); + oMenu.hideTimer = null; + } + } + + function hide(oMenu) { + if (!oMenu && current) oMenu = current; + + if (oMenu && current == oMenu && oMenu.isOpen) { + hideCurrent(); + } + } + + function hideCurrent() { + if (null != current) { + cancelHide(current); + current.hideTimer = null; + current.hide(); + current = null; + } + } +} + +//================================================================================================== +// TransMenuItem (internal) +// represents an item in a dropdown +//================================================================================================== +// sText : The item display text +// sUrl : URL to load when the item is clicked +// oParent : Menu this item is a part of +//================================================================================================== +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 + '' + + ''; + } +} + + + + + + +//===================================================================== +// Accel[erated] [an]imation object +// change a property of an object over time in an accelerated fashion +//===================================================================== +// obj : reference to the object whose property you'd like to animate +// prop : property you would like to change eg: "left" +// to : final value of prop +// time : time the animation should take to run +// zip : optional. specify the zippiness of the acceleration. pick a +// number between -1 and 1 where -1 is full decelerated, 1 is +// full accelerated, and 0 is linear (no acceleration). default +// is 0. +// unit : optional. specify the units for use with prop. default is +// "px". +//===================================================================== +// bezier functions lifted from the lib_animation.js file in the +// 13th Parallel API. www.13thparallel.org +//===================================================================== + +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(); +} + + + +//===================================================================== +// public methods +//===================================================================== + +// after you create an accelimation, you call this to start it-a runnin' +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); +} + +// and if you need to stop it early for some reason... +Accelimation.prototype.stop = function() { + Accelimation._remove(this); +} + + + +//===================================================================== +// private methods +//===================================================================== + +// paints one frame. gets called by Accelimation._paintAll. +Accelimation.prototype._paint = function(time) { + if (time < this.t1) { + var elapsed = time - this.t0; + this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2)); + } + else this._end(); +} + +// ends the animation +Accelimation.prototype._end = function() { + Accelimation._remove(this); + this.onframe(this.x1); + this.onend(); +} + + + + +//===================================================================== +// static methods (all private) +//===================================================================== + +// add a function to the list of ones to call periodically +Accelimation._add = function(o) { + var index = this.instances.length; + this.instances[index] = o; + // if this is the first one, start the engine + if (this.instances.length == 1) { + this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes); + } +} + +// remove a function from the list +Accelimation._remove = function(o) { + for (var i = 0; i < this.instances.length; i++) { + if (o == this.instances[i]) { + this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) ); + break; + } + } + // if that was the last one, stop the engine + if (this.instances.length == 0) { + window.clearInterval(this.timerID); + this.timerID = null; + } +} + +// "engine" - call each function in the list every so often +Accelimation._paintAll = function() { + var now = new Date().getTime(); + for (var i = 0; i < this.instances.length; i++) { + this.instances[i]._paint(now); + } +} + + +// Bezier functions: +Accelimation._B1 = function(t) { return t*t*t } +Accelimation._B2 = function(t) { return 3*t*t*(1-t) } +Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) } +Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) } + + +//Finds the coordinates of a point at a certain stage through a bezier curve +Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) { + return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent); +} + + +//===================================================================== +// static properties +//===================================================================== + +Accelimation.instances = []; +Accelimation.targetRes = 10; +Accelimation.timerID = null; + + +//===================================================================== +// IE win memory cleanup +//===================================================================== + +if (window.attachEvent) { + var cearElementProps = [ + 'data', + 'onmouseover', + 'onmouseout', + 'onmousedown', + 'onmouseup', + 'ondblclick', + 'onclick', + 'onselectstart', + 'oncontextmenu' + ]; + + window.attachEvent("onunload", function() { + var el; + for(var d = document.all.length;d--;){ + el = document.all[d]; + for(var c = cearElementProps.length;c--;){ + el[cearElementProps[c]] = null; + } + } + }); +} \ No newline at end of file diff --git a/usr/local/www/themes/the_wall/javascript/transmenuC.js b/usr/local/www/themes/the_wall/javascript/transmenuC.js new file mode 100644 index 000000000..88626c753 --- /dev/null +++ b/usr/local/www/themes/the_wall/javascript/transmenuC.js @@ -0,0 +1,86 @@ +/* ================================================================================================= + * TransMenu + * March, 2003 + * Customizable multi-level animated DHTML menus with transparency. + * ================================================================================================= + * "Can I use this?" + * + * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it + * out at: http://creativecommons.org/licenses/by/2.0/ + * + * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit + * for writing it. You may not misrepresent yourself as the author of this code. + * ================================================================================================= + * "It's kinda hard to read, though" + * + * The uncompressed, commented version of this script can be found at: + * http://youngpup.net/projects/transMenus + * ============================================================================================== */ +TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;} +else r=true;}} +return r;} +TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}} +TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();} +document.write(aMenuHtml.join(""));} +function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;} +function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;} +function initialize(){initCache();initEvents();initSize();ready=true;} +function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}} +function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}} +function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;} +if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);} +switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;} +x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";} +function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();} +function slideFrame(x){elmCache["content"].style[pos]=x+"px";} +function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;} +function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;} +else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}} +function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}} +_this.elmCache=elmCache;} +function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;} +if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;} +elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;} +function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;} +function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;} +function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}} +function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}} +function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}} +function actuator_mouseover(){parentMenuSet.showMenu(_this);} +function actuator_mouseout(){parentMenuSet.hideMenu(_this);} +function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}} +function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}} +function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}} +function child_deactivate(){for(var i=0;i'+'
                            '+''+aHtml.join('')+'
                            '+'
                            '+'
                            '+'
                            '+'
                            ';}} +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 000000000..b501ceb98 Binary files /dev/null and b/usr/local/www/tree-images/empty.gif differ diff --git a/usr/local/www/tree-images/join.gif b/usr/local/www/tree-images/join.gif new file mode 100755 index 000000000..976ba7e5a Binary files /dev/null and b/usr/local/www/tree-images/join.gif differ diff --git a/usr/local/www/tree-images/joinbottom.gif b/usr/local/www/tree-images/joinbottom.gif new file mode 100755 index 000000000..8552b66bc Binary files /dev/null and b/usr/local/www/tree-images/joinbottom.gif differ diff --git a/usr/local/www/tree-images/line.gif b/usr/local/www/tree-images/line.gif new file mode 100755 index 000000000..976bedade Binary files /dev/null and b/usr/local/www/tree-images/line.gif differ diff --git a/usr/local/www/tree-images/minus_.gif b/usr/local/www/tree-images/minus_.gif new file mode 100755 index 000000000..7c3a1439d Binary files /dev/null and b/usr/local/www/tree-images/minus_.gif differ diff --git a/usr/local/www/tree-images/minus_up.gif b/usr/local/www/tree-images/minus_up.gif new file mode 100755 index 000000000..16915d4e6 Binary files /dev/null and b/usr/local/www/tree-images/minus_up.gif differ diff --git a/usr/local/www/tree-images/page.gif b/usr/local/www/tree-images/page.gif new file mode 100755 index 000000000..531f1338d Binary files /dev/null and b/usr/local/www/tree-images/page.gif differ diff --git a/usr/local/www/tree-images/plus_.gif b/usr/local/www/tree-images/plus_.gif new file mode 100755 index 000000000..34c1a5ef4 Binary files /dev/null and b/usr/local/www/tree-images/plus_.gif differ 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 000000000..d095e07c4 Binary files /dev/null and b/usr/local/www/tree-images/plus_up.gif differ 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 000000000..afc17531b Binary files /dev/null and b/usr/local/www/tree-images/plus_updown.gif differ diff --git a/usr/local/www/tree-images/zone.gif b/usr/local/www/tree-images/zone.gif new file mode 100755 index 000000000..f49d6472a Binary files /dev/null and b/usr/local/www/tree-images/zone.gif differ diff --git a/usr/local/www/tree/i-bottom.gif b/usr/local/www/tree/i-bottom.gif new file mode 100755 index 000000000..f07fa991d Binary files /dev/null and b/usr/local/www/tree/i-bottom.gif differ diff --git a/usr/local/www/tree/i-repeater.gif b/usr/local/www/tree/i-repeater.gif new file mode 100755 index 000000000..d5ab0890b Binary files /dev/null and b/usr/local/www/tree/i-repeater.gif differ 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 000000000..1e8c7079e Binary files /dev/null and b/usr/local/www/tree/l.gif differ diff --git a/usr/local/www/tree/minus.gif b/usr/local/www/tree/minus.gif new file mode 100755 index 000000000..7a7fd3bb6 Binary files /dev/null and b/usr/local/www/tree/minus.gif differ diff --git a/usr/local/www/tree/page-file.png b/usr/local/www/tree/page-file.png new file mode 100755 index 000000000..d3bb119a1 Binary files /dev/null and b/usr/local/www/tree/page-file.png differ diff --git a/usr/local/www/tree/page-file_play.gif b/usr/local/www/tree/page-file_play.gif new file mode 100755 index 000000000..0c8e9ff51 Binary files /dev/null and b/usr/local/www/tree/page-file_play.gif differ 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 000000000..504f06e29 Binary files /dev/null and b/usr/local/www/tree/page-file_x.gif differ diff --git a/usr/local/www/tree/page-foldericon.png b/usr/local/www/tree/page-foldericon.png new file mode 100755 index 000000000..d26f2dc9a Binary files /dev/null and b/usr/local/www/tree/page-foldericon.png differ diff --git a/usr/local/www/tree/page-openfoldericon.png b/usr/local/www/tree/page-openfoldericon.png new file mode 100755 index 000000000..8d00c394b Binary files /dev/null and b/usr/local/www/tree/page-openfoldericon.png differ diff --git a/usr/local/www/tree/plus.gif b/usr/local/www/tree/plus.gif new file mode 100755 index 000000000..3530f5957 Binary files /dev/null and b/usr/local/www/tree/plus.gif differ diff --git a/usr/local/www/tree/t.gif b/usr/local/www/tree/t.gif new file mode 100755 index 000000000..a92da2a1a Binary files /dev/null and b/usr/local/www/tree/t.gif differ 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 000000000..02c7f2374 Binary files /dev/null and b/usr/share/zoneinfo.tgz differ diff --git a/usr/tmp/post_upgrade_command b/usr/tmp/post_upgrade_command new file mode 100755 index 000000000..d5577f7a3 --- /dev/null +++ b/usr/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/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/* +