--- /dev/null
+build
+cache
+ccache
+log
+*.img
+*.iso
+*.tgz
+*.gpg
--- /dev/null
+D/aboot////
+D/cdrom////
+D/cfgroot////
+D/cron////
+D/etc////
+D/grub////
+D/httpd////
+D/install////
+D/ipac-ng////
+D/kernel////
+D/snort////
+D/ssl////
--- /dev/null
+ipcop/config
--- /dev/null
+:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ipcop
--- /dev/null
+TIPCOP_v1_4_0
--- /dev/null
+/aboot.conf/1.1/Sun Feb 8 21:29:00 2004//TIPCOP_v1_4_0
+/scsiaboot.conf/1.1/Sun Feb 8 21:29:00 2004//TIPCOP_v1_4_0
+D
--- /dev/null
+ipcop/config/aboot
--- /dev/null
+:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ipcop
--- /dev/null
+TIPCOP_v1_4_0
--- /dev/null
+0:1/vmlinuz root=ROOT panic=10 ro
--- /dev/null
+0:1/vmlinuz root=ROOT panic=10 initrd=ipcoprd.img init=/linuxrc rw
--- /dev/null
+/README.txt/1.3/Thu Jan 8 20:02:38 2004//TIPCOP_v1_4_0
+D
--- /dev/null
+ipcop/config/cdrom
--- /dev/null
+:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ipcop
--- /dev/null
+TIPCOP_v1_4_0
--- /dev/null
+IPCop - The Bad Packets Stop Here (VERSION)\r
+------------------------------------------\r
+\r
+Installation\r
+------------\r
+\r
+Please read the IPCop Installation PDF before installing the firewall.\r
+This document is located in the \doc directory on the cdrom. It will\r
+guide you through the installation process and will help you make the\r
+necessary decisions during the installation process.\r
+\r
+\r
+DOS Image utility tools\r
+-----------------------\r
+\r
+The dosutils directory contains the following DOS and Windows applications,\r
+please use with caution and please can we draw your attention to the \r
+documentation on the IPCop CD or install image on your network drive. \r
+We also draw your attention to the disclaimer of Warranty below.\r
+\r
+rawrite.exe - rawrite executable\r
+rawwritewin.exe - rawwrite for Windows\r
+diskio.dll - this MUST be in the same directory as rawrite for Windows\r
+copying.txt - text file\r
+\r
+\r
+License\r
+-------\r
+\r
+Please read the file COPYING for more information on the license.\r
+\r
+\r
+Disclaimer of Warranty\r
+----------------------\r
+\r
+Users of this software must accept this disclaimer of warranty: "This\r
+software is supplied AS IS. IPCop disclaims all warranties, expressed\r
+or implied, including, without limitation, the warranties of merchantability\r
+and of fitness for any purpose. IPCop assumes no liability for\r
+damages, direct or consequential, which may result from the use of this\r
+software."\r
+\r
--- /dev/null
+/advoptions-list/1.1.2.3/Sat May 7 13:01:32 2005//TIPCOP_v1_4_0
+/backup-exclude/1.3.2.6/Tue Nov 1 19:20:52 2005//TIPCOP_v1_4_0
+/backup-exclude.hardware/1.2/Thu Dec 11 11:15:33 2003//TIPCOP_v1_4_0
+/backup-include/1.4.2.1/Sun Apr 25 06:57:03 2004//TIPCOP_v1_4_0
+/countries.pl/1.2.2.1/Wed Jan 26 12:23:19 2005//TIPCOP_v1_4_0
+/defaultservices/1.2/Thu Dec 11 11:15:33 2003//TIPCOP_v1_4_0
+/general-functions.pl/1.1.2.26/Wed Jan 4 16:33:55 2006//TIPCOP_v1_4_0
+/header-menu.pl/1.1.2.2/Sat Nov 19 16:48:45 2005//TIPCOP_v1_4_0
+/header.pl/1.34.2.67/Mon Oct 3 20:01:05 2005//TIPCOP_v1_4_0
+/icmptypes/1.2/Thu Dec 11 11:15:33 2003//TIPCOP_v1_4_0
+/ipcop.gpg/1.2/Thu Dec 11 11:15:33 2003//TIPCOP_v1_4_0
+/lang.pl/1.1.2.11/Sat Sep 10 16:22:50 2005//TIPCOP_v1_4_0
+/logging-settings/1.2/Thu Dec 11 11:15:33 2003//TIPCOP_v1_4_0
+/modem-defaults/1.1.1.1.8.1/Sun Jan 2 10:01:00 2005//TIPCOP_v1_4_0
+/modem-settings/1.1.1.1.8.1/Sun Jan 2 10:01:01 2005//TIPCOP_v1_4_0
+/oinkmaster.conf/1.1.2.2/Mon May 2 17:11:58 2005//TIPCOP_v1_4_0
+/protocols.pl/1.2.2.1/Wed Jan 26 12:23:20 2005//TIPCOP_v1_4_0
+/proxy-acl/1.2.2.4/Thu Dec 1 20:19:12 2005//TIPCOP_v1_4_0
+/time-settings/1.2/Thu Dec 11 11:15:33 2003//TIPCOP_v1_4_0
+/xtaccess-config/1.2/Thu Dec 11 10:57:32 2003//TIPCOP_v1_4_0
+D
--- /dev/null
+ipcop/config/cfgroot
--- /dev/null
+:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ipcop
--- /dev/null
+TIPCOP_v1_4_0
--- /dev/null
+option all-subnets-local flag;
+option arp-cache-timeout uint32;
+option bootfile-name string;
+option boot-size uint16;
+option broadcast-address ip-address;
+option cookie-servers ip-address [, ip-address... ];
+option default-ip-ttl uint8;
+option default-tcp-ttl uint8;
+option dhcp-client-identifier data-string;
+option finger-server ip-address [, ip-address... ];
+option font-servers ip-address [, ip-address... ];
+option host-name string;
+option ieee802-3-encapsulation flag;
+option ien116-name-servers ip-address [, ip-address... ];
+option impress-servers ip-address [, ip-address... ];
+option interface-mtu uint16;
+option ip-forwarding flag;
+option irc-server ip-address [, ip-address... ];
+option log-servers ip-address [, ip-address... ];
+option lpr-servers ip-address [, ip-address... ];
+option mask-supplier flag;
+option max-dgram-reassembly uint16;
+option merit-dump string;
+option mobile-ip-home-agent ip-address [, ip-address... ];
+option netbios-dd-server ip-address [, ip-address... ];
+option netbios-node-type uint8;
+option netbios-scope string;
+option nis-domain string;
+option nisplus-domain string;
+option nisplus-servers ip-address [, ip-address... ];
+option nis-servers ip-address [, ip-address... ];
+option nntp-server ip-address [, ip-address... ];
+option non-local-source-routing flag;
+option ntp-servers ip-address [, ip-address... ];
+option path-mtu-aging-timeout uint32;
+option path-mtu-plateau-table uint16 [, uint16... ];
+option perform-mask-discovery flag;
+option policy-filter ip-address ip-address [, ip-address ip-address... ];
+option pop-server ip-address [, ip-address... ];
+option resource-location-servers ip-address [, ip-address... ];
+option root-path string;
+option router-discovery flag;
+option router-solicitation-address ip-address;
+option smtp-server ip-address [, ip-address... ];
+option static-routes ip-address ip-address [, ip-address ip-address... ];
+option streettalk-directory-assistance-server ip-address [, ip-address... ];
+option streettalk-server ip-address [, ip-address... ];
+option swap-server ip-address;
+option tcp-keepalive-garbage flag;
+option tcp-keepalive-interval uint32;
+option tftp-server-name string;
+option time-offset int32;
+option time-servers ip-address [, ip-address... ];
+option trailer-encapsulation flag;
+option www-server ip-address [, ip-address... ];
+option x-display-manager ip-address [, ip-address... ];
--- /dev/null
+var/ipcop/backup/*.system
+var/ipcop/backup/backup.key
+var/ipcop/backup/sets
+var/ipcop/countries.pl
+var/ipcop/dhcpc
+var/ipcop/eciadsl/modems.db
+var/ipcop/eciadsl/firmware00.bin
+var/ipcop/header.pl
+var/ipcop/general-functions.pl
+var/ipcop/lang.pl
+var/ipcop/key
+var/ipcop/langs
+var/ipcop/patches
+var/ipcop/ppp/fake-resolv.conf
+var/ipcop/red
+var/ipcop/time/counter
+var/ipcop/firewall/protocols.pl
+var/ipcop/firewall/defaultservices
+var/ipcop/firewall/icmptypes
+var/ipcop/addon-lang
--- /dev/null
+var/ipcop/ethernet/settings
--- /dev/null
+/etc/passwd
+/etc/shadow
+/etc/hosts
+/etc/localtime
+/etc/httpd/server.crt
+/etc/httpd/server.csr
+/etc/httpd/server.key
+/etc/rc.d/rc.local
+/etc/rc.d/rc.firewall.local
+/etc/ssh/ssh_host_dsa_key
+/etc/ssh/ssh_host_dsa_key.pub
+/etc/ssh/ssh_host_key
+/etc/ssh/ssh_host_key.pub
+/etc/ssh/ssh_host_rsa_key
+/etc/ssh/ssh_host_rsa_key.pub
+/var/ipcop/
--- /dev/null
+package Countries;\r
+\r
+%countries = (\r
+'Afghanistan' => 'AF',\r
+'Albania' => 'AL',\r
+'Algeria' => 'DZ',\r
+'American Samoa' => 'AS',\r
+'Andorra' => 'AD',\r
+'Angola' => 'AO',\r
+'Anguilla' => 'AI',\r
+'Antarctica' => 'AQ',\r
+'Antigua and Barbuda' => 'AG',\r
+'Argentina' => 'AR',\r
+'Armenia' => 'AM',\r
+'Aruba' => 'AW',\r
+'Australia' => 'AU',\r
+'Austria' => 'AT',\r
+'Azerbaijan' => 'AZ',\r
+'Bahamas' => 'BS',\r
+'Bahrain' => 'BH',\r
+'Bangladesh' => 'BD',\r
+'Barbados' => 'BB',\r
+'Belarus' => 'BY',\r
+'Belgium' => 'BE',\r
+'Belize' => 'BZ',\r
+'Benin' => 'BJ',\r
+'Bermuda' => 'BM',\r
+'Bhutan' => 'BT',\r
+'Bolivia' => 'BO',\r
+'Bosnia and Herzegovina' => 'BA',\r
+'Botswana' => 'BW',\r
+'Bouvet Island' => 'BV',\r
+'Brazil' => 'BR',\r
+'British Indian Ocean Territory' => 'IO',\r
+'Brunei Darussalam' => 'BN',\r
+'Bulgaria' => 'BG',\r
+'Burkina Faso' => 'BF',\r
+'Burundi' => 'BI',\r
+'Cambodia' => 'KH',\r
+'Cameroon' => 'CM',\r
+'Canada' => 'CA',\r
+'Cape Verde' => 'CV',\r
+'Cayman Islands' => 'KY',\r
+'Central African Republic' => 'CF',\r
+'Chad' => 'TD',\r
+'Chile' => 'CL',\r
+'China' => 'CN',\r
+'Christmas Island' => 'CX',\r
+'Cocos (Keeling) Islands' => 'CC',\r
+'Colombia' => 'CO',\r
+'Comoros' => 'KM',\r
+'Congo' => 'CG',\r
+'Cook Islands' => 'CK',\r
+'Costa Rica' => 'CR',\r
+'Cote D\'Ivoire (Ivory Coast)' => 'CI',\r
+'Croatia (Hrvatska)' => 'HR',\r
+'Cuba' => 'CU',\r
+'Cyprus' => 'CY',\r
+'Czech Republic' => 'CZ',\r
+'Czechoslovakia (former)' => 'CS',\r
+'Denmark' => 'DK',\r
+'Djibouti' => 'DJ',\r
+'Dominica' => 'DM',\r
+'Dominican Republic' => 'DO',\r
+'East Timor' => 'TP',\r
+'Ecuador' => 'EC',\r
+'Egypt' => 'EG',\r
+'El Salvador' => 'SV',\r
+'Equatorial Guinea' => 'GQ',\r
+'Eritrea' => 'ER',\r
+'Estonia' => 'EE',\r
+'Ethiopia' => 'ET',\r
+'Falkland Islands (Malvinas)' => 'FK',\r
+'Faroe Islands' => 'FO',\r
+'Fiji' => 'FJ',\r
+'Finland' => 'FI',\r
+'France' => 'FR',\r
+'France, Metropolitan' => 'FX',\r
+'French Guiana' => 'GF',\r
+'French Polynesia' => 'PF',\r
+'French Southern Territories' => 'TF',\r
+'Gabon' => 'GA',\r
+'Gambia' => 'GM',\r
+'Georgia' => 'GE',\r
+'Germany' => 'DE',\r
+'Ghana' => 'GH',\r
+'Gibraltar' => 'GI',\r
+'Great Britain (UK)' => 'GB',\r
+'Greece' => 'GR',\r
+'Greenland' => 'GL',\r
+'Grenada' => 'GD',\r
+'Guadeloupe' => 'GP',\r
+'Guam' => 'GU',\r
+'Guatemala' => 'GT',\r
+'Guinea' => 'GN',\r
+'Guinea-Bissau' => 'GW',\r
+'Guyana' => 'GY',\r
+'Haiti' => 'HT',\r
+'Heard and McDonald Islands' => 'HM',\r
+'Honduras' => 'HN',\r
+'Hong Kong' => 'HK',\r
+'Hungary' => 'HU',\r
+'Iceland' => 'IS',\r
+'India' => 'IN',\r
+'Indonesia' => 'ID',\r
+'Iran' => 'IR',\r
+'Iraq' => 'IQ',\r
+'Ireland' => 'IE',\r
+'Israel' => 'IL',\r
+'Italy' => 'IT',\r
+'Jamaica' => 'JM',\r
+'Japan' => 'JP',\r
+'Jordan' => 'JO',\r
+'Kazakhstan' => 'KZ',\r
+'Kenya' => 'KE',\r
+'Kiribati' => 'KI',\r
+'Korea (North)' => 'KP',\r
+'Korea (South)' => 'KR',\r
+'Kuwait' => 'KW',\r
+'Kyrgyzstan' => 'KG',\r
+'Laos' => 'LA',\r
+'Latvia' => 'LV',\r
+'Lebanon' => 'LB',\r
+'Lesotho' => 'LS',\r
+'Liberia' => 'LR',\r
+'Libya' => 'LY',\r
+'Liechtenstein' => 'LI',\r
+'Lithuania' => 'LT',\r
+'Luxembourg' => 'LU',\r
+'Macau' => 'MO',\r
+'Macedonia' => 'MK',\r
+'Madagascar' => 'MG',\r
+'Malawi' => 'MW',\r
+'Malaysia' => 'MY',\r
+'Maldives' => 'MV',\r
+'Mali' => 'ML',\r
+'Malta' => 'MT',\r
+'Marshall Islands' => 'MH',\r
+'Martinique' => 'MQ',\r
+'Mauritania' => 'MR',\r
+'Mauritius' => 'MU',\r
+'Mayotte' => 'YT',\r
+'Mexico' => 'MX',\r
+'Micronesia' => 'FM',\r
+'Moldova' => 'MD',\r
+'Monaco' => 'MC',\r
+'Mongolia' => 'MN',\r
+'Montserrat' => 'MS',\r
+'Morocco' => 'MA',\r
+'Mozambique' => 'MZ',\r
+'Myanmar' => 'MM',\r
+'Namibia' => 'NA',\r
+'Nauru' => 'NR',\r
+'Nepal' => 'NP',\r
+'Netherlands Antilles' => 'AN',\r
+'Netherlands' => 'NL',\r
+'Neutral Zone' => 'NT',\r
+'New Caledonia' => 'NC',\r
+'New Zealand (Aotearoa)' => 'NZ',\r
+'Nicaragua' => 'NI',\r
+'Niger' => 'NE',\r
+'Nigeria' => 'NG',\r
+'Niue' => 'NU',\r
+'Norfolk Island' => 'NF',\r
+'Northern Mariana Islands' => 'MP',\r
+'Norway' => 'NO',\r
+'Oman' => 'OM',\r
+'Pakistan' => 'PK',\r
+'Palau' => 'PW',\r
+'Panama' => 'PA',\r
+'Papua New Guinea' => 'PG',\r
+'Paraguay' => 'PY',\r
+'Peru' => 'PE',\r
+'Philippines' => 'PH',\r
+'Pitcairn' => 'PN',\r
+'Poland' => 'PL',\r
+'Portugal' => 'PT',\r
+'Puerto Rico' => 'PR',\r
+'Qatar' => 'QA',\r
+'Reunion' => 'RE',\r
+'Romania' => 'RO',\r
+'Russian Federation' => 'RU',\r
+'Rwanda' => 'RW',\r
+'S. Georgia and S. Sandwich Isls.' => 'GS',\r
+'Saint Kitts and Nevis' => 'KN',\r
+'Saint Lucia' => 'LC',\r
+'Saint Vincent and the Grenadines' => 'VC',\r
+'Samoa' => 'WS',\r
+'San Marino' => 'SM',\r
+'Sao Tome and Principe' => 'ST',\r
+'Saudi Arabia' => 'SA',\r
+'Senegal' => 'SN',\r
+'Seychelles' => 'SC',\r
+'Sierra Leone' => 'SL',\r
+'Singapore' => 'SG',\r
+'Slovak Republic' => 'SK',\r
+'Slovenia' => 'SI',\r
+'Solomon Islands' => 'Sb',\r
+'Somalia' => 'SO',\r
+'South Africa' => 'ZA',\r
+'Spain' => 'ES',\r
+'Sri Lanka' => 'LK',\r
+'St. Helena' => 'SH',\r
+'St. Pierre and Miquelon' => 'PM',\r
+'Sudan' => 'SD',\r
+'Suriname' => 'SR',\r
+'Svalbard and Jan Mayen Islands' => 'SJ',\r
+'Swaziland' => 'SZ',\r
+'Sweden' => 'SE',\r
+'Switzerland' => 'CH',\r
+'Syria' => 'SY',\r
+'Taiwan' => 'TW',\r
+'Tajikistan' => 'TJ',\r
+'Tanzania' => 'TZ',\r
+'Thailand' => 'TH',\r
+'Togo' => 'TG',\r
+'Tokelau' => 'TK',\r
+'Tonga' => 'TO',\r
+'Trinidad and Tobago' => 'TT',\r
+'Tunisia' => 'TN',\r
+'Turkey' => 'TR',\r
+'Turkmenistan' => 'TM',\r
+'Turks and Caicos Islands' => 'TC',\r
+'Tuvalu' => 'TV',\r
+'US Minor Outlying Islands' => 'UM',\r
+'USSR (former)' => 'SU',\r
+'Uganda' => 'UG',\r
+'Ukraine' => 'UA',\r
+'United Arab Emirates' => 'AE',\r
+'United Kingdom' => 'UK',\r
+'United States' => 'US',\r
+'Uruguay' => 'UY',\r
+'Uzbekistan' => 'UZ',\r
+'Vanuatu' => 'VU',\r
+'Vatican City State (Holy See)' => 'VA',\r
+'Venezuela' => 'VE',\r
+'Viet Nam' => 'VN',\r
+'Virgin Islands (British)' => 'VG',\r
+'Virgin Islands (U.S.)' => 'VI',\r
+'Wallis and Futuna Islands' => 'WF',\r
+'Western Sahara' => 'EH',\r
+'Yemen' => 'YE',\r
+'Yugoslavia' => 'YU',\r
+'Zaire' => 'ZR',\r
+'Zambia' => 'ZM',\r
+'Zimbabwe' => 'ZW',\r
+);\r
+\r
+1;\r
+\r
--- /dev/null
+acap,674,tcpudp
+afbackup,2988,tcpudp
+afpovertcp,548,tcpudp
+afs3-bos,7007,tcpudp
+afs3-callback,7001,tcpudp
+afs3-errors,7006,tcpudp
+afs3-fileserver,7000,tcpudp
+afs3-kaserver,7004,tcpudp
+afs3-prserver,7002,tcpudp
+afs3-rmtsys,7009,tcpudp
+afs3-update,7008,tcpudp
+afs3-vlserver,7003,tcpudp
+afs3-volser,7005,tcpudp
+amanda,10080,tcpudp
+amandaidx,10082,tcp
+amidxtape,10083,tcp
+asp,27374,tcpudp
+at-echo,204,tcpudp
+at-nbp,202,tcpudp
+at-rtmp,201,tcpudp
+at-zis,206,tcpudp
+auth,113,tcpudp
+bgp,179,tcpudp
+biff,512,udp
+binkp,24554,tcpudp
+bootpc,68,tcpudp
+bootps,67,tcpudp
+canna,5680,tcp
+cfengine,5308,tcpudp
+cfinger,2003,tcp
+chargen,19,tcpudp
+cmip-agent,164,tcpudp
+cmip-man,163,tcpudp
+codaauth2,370,tcpudp
+codasrv,2432,tcpudp
+codasrv-se,2433,tcpudp
+conference,531,tcp
+corbaloc,2809,tcp
+courier,530,tcp
+csnet-ns,105,tcpudp
+cvspserver,2401,tcpudp
+cvsup,5999,tcpudp
+datametrics,1645,tcpudp
+daytime,13,tcpudp
+dhcpv6-client,546,tcpudp
+dhcpv6-server,547,tcpudp
+discard,9,tcpudp
+domain,53,tcpudp
+echo,4,ddp
+echo,7,tcpudp
+efs,520,tcp
+eklogin,2105,tcp
+exec,512,tcp
+fax,4557,tcp
+fido,60179,tcpudp
+finger,79,tcpudp
+fsp,21,udp
+ftp,21,tcpudp
+ftp-data,20,tcpudp
+gdomap,538,tcpudp
+gdp-port,1997,tcpudp
+gii,616,tcp
+gopher,70,tcpudp
+gss-http,488,tcpudp
+h323callsigalt,11720,tcpudp
+h323gatedisc,1718,tcpudp
+h323gatestat,1719,tcpudp
+h323hostcall,1720,tcpudp
+h323hostcallsc,1300,tcpudp
+ha-cluster,694,tcpudp
+hello,1789,tcpudp
+hmmp-ind,612,tcpudp
+hostmon,5355,tcpudp
+hostname,101,tcpudp
+hsrp,1985,tcpudp
+http,80,tcpudp
+http-alt,8008,tcpudp
+https,443,tcpudp
+hylafax,4559,tcp
+ica,1494,tcpudp
+icpv2,3130,tcpudp
+iiop,535,tcpudp
+imap,143,tcpudp
+imap3,220,tcpudp
+imaps,993,tcpudp
+ingreslock,1524,tcpudp
+ipx,213,tcpudp
+irc,194,tcpudp
+ircd,6667,tcpudp
+ircs,994,tcpudp
+isakmp,500,tcpudp
+isdnlog,20011,tcpudp
+iso-tsap,102,tcp
+jetdirect,9100,tcp
+kamanda,10081,tcpudp
+kerberos,88,tcpudp
+kerberos-adm,749,tcp
+kerberos-iv,750,udptcp
+kerberos_master,751,udptcp
+kermit,1649,tcpudp
+klogin,543,tcp
+knetd,2053,tcp
+kpasswd,464,tcpudp
+kpop,1109,tcp
+krb524,4444,tcpudp
+krb5_prop,754,tcp
+krbupdate,760,tcp
+kshell,544,tcp
+l2tp,1701,tcpudp
+ldap,389,tcpudp
+ldaps,636,tcpudp
+licensedaemon,1986,tcpudp
+link,245,tcpucp
+linuxconf,98,tcp
+login,513,tcp
+mailq,174,tcpudp
+mandelspawn,9359,udp
+microsoft-ds,445,tcpudp
+mobileip-agent,434,tcpudp
+mobilip-mn,435,tcpudp
+ms-sql-m,1434,tcpudp
+ms-sql-s,1433,tcpudp
+msp,18,tcpudp
+mtp,1911,tcpudp
+mysql,3306,tcpudp
+nameserver,42,tcpudp
+nbp,2,ddp
+netbios-dgm,138,tcpudp
+netbios-ns,137,tcpudp
+netbios-ssn,139,tcpudp
+netnews,532,tcp
+netrjs-1,71,tcpudp
+netrjs-2,72,tcpudp
+netrjs-3,73,tcpudp
+netrjs-4,74,tcpudp
+netstat,15,tcp
+netwall,533,udp
+nextstep,178,tcpudp
+nfs,2049,tcpudp
+nicname,43,tcpudp
+ninstall,2150,tcpudp
+nntp,119,tcpudp
+nntps,563,tcpudp
+noclog,5354,tcpudp
+npmp-gui,611,tcpudp
+npmp-local,610,tcpudp
+ntalk,518,udp
+ntp,123,tcpudp
+omirr,808,tcpudp
+passwd_server,752,udp
+pgpkeyserver,11371,tcpudp
+phonebook,767,tcpudp
+photuris,468,tcpudp
+pim-rp-disc,496,tcpudp
+pop2,109,tcpudp
+pop3,110,tcpudp
+pop3s,995,tcpudp
+poppassd,106,tcpudp
+postgres,5432,tcpudp
+printer,515,tcpudp
+prospero,191,tcpudp
+prospero-np,1525,tcpudp
+prsvp,3455,tcpudp
+qmtp,209,tcpudp
+qotd,17,tcpudp
+quake,26000,tcpudp
+radius,1812,tcpudp
+radius-acct,1813,tcpudp
+re-mail-ck,50,tcpudp
+remotefs,556,tcp
+rfe,5002,tcpudp
+ripng,521,tcpudp
+rje,5,tcpudp
+rlp,39,tcpudp
+rmtcfg,1236,tcp
+rndc,953,tcpudp
+router,520,udp
+rpc2portmap,369,tcpudp
+rsvp_tunnel,363,tcpudp
+rsync,873,tcpudp
+rtelnet,107,tcpudp
+rtmp,1,ddp
+rtsp,554,tcpudp
+rwhois,4321,tcpudp
+sa-msg-port,1646,tcpudp
+saft,487,tcpudp
+sd,9876,tcpudp
+sftp,115,tcpudp
+sgi-dgl,5232,tcpudp
+shell,514,tcp
+skkserv,1178,tcp
+smtp,25,tcpudp
+smtps,465,tcp
+smux,199,tcpudp
+snmp,161,tcpudp
+snmptrap,162,udp
+snpp,444,tcpudp
+socks,1080,tcpudp
+squid,3128,tcp
+ssh,22,tcpudp
+submission,587,tcpudp
+sunrpc,111,tcpudp
+supdup,95,tcpudp
+supfiledbg,1127,tcp
+supfilesrv,871,tcp
+support,1529,tcp
+svrloc,427,tcpudp
+swat,901,tcp
+syslog,514,udp
+systat,11,tcpudp
+tacacs,49,tcpudp
+talk,517,udp
+tcpmux,1,tcpudp
+telnet,23,tcpudp
+telnets,992,tcpudp
+tempo,526,tcp
+tfido,60177,tcpudp
+tftp,69,tcpudp
+tftp-mcast,1758,tcpudp
+time,37,tcpudp
+timed,525,tcpudp
+tircproxy,7666,tcp
+tproxy,8081,tcpudp
+traceroute,33434,tcpudp
+trnsprntproxy,3346,tcpudp
+ulistproc,372,tcpudp
+utime,519,tcpudp
+uucp,540,tcp
+uucp-path,117,tcpudp
+vboxd,20012,tcpudp
+venus,2430,tcpudp
+venus-se,2431,tcpudp
+webcache,8080,tcpudp
+webster,765,tcpudp
+who,513,udp
+whoami,565,tcpudp
+whois++,63,tcpudp
+wins,1512,tcpudp
+wnn6-ds,26208,tcpudp
+x11,6000,tcp
+x11-ssh-offset,6010,tcp
+xdmcp,177,tcpudp
+xfs,7100,tcp
+xtel,1313,tcp
+z39.50,210,tcpudp
+zephyr-clt,2103,tcpudp
+zephyr-hm,2104,tcpudp
+zephyr-srv,2102,tcpudp
+zip,6,ddp
--- /dev/null
+# SmoothWall CGIs\r
+#\r
+# This code is distributed under the terms of the GPL\r
+#\r
+# (c) The SmoothWall Team\r
+# Copyright (C) 2002 Alex Hudson - getcgihash() rewrite\r
+# Copyright (C) 2002 Bob Grant <bob@cache.ucr.edu> - validmac()\r
+# Copyright (c) 2002/04/13 Steve Bootes - add alias section, helper functions\r
+# Copyright (c) 2002/08/23 Mark Wormgoor <mark@wormgoor.com> validfqdn()\r
+# Copyright (c) 2003/09/11 Darren Critchley <darrenc@telus.net> srtarray()\r
+#\r
+# $Id: general-functions.pl,v 1.1.2.26 2006/01/04 16:33:55 franck78 Exp $\r
+#\r
+\r
+package General;\r
+\r
+use strict;\r
+use Socket;\r
+use IO::Socket;\r
+\r
+$|=1; # line buffering\r
+\r
+$General::version = 'VERSION';\r
+$General::swroot = 'CONFIG_ROOT';\r
+$General::noipprefix = 'noipg-';\r
+$General::adminmanualurl = 'http://www.ipcop.org/1.4.0/en/admin/html';\r
+\r
+sub log\r
+{\r
+ my $logmessage = $_[0];\r
+ $logmessage =~ /([\w\W]*)/;\r
+ $logmessage = $1;\r
+ system('/usr/bin/logger', '-t', 'ipcop', $logmessage);\r
+}\r
+\r
+sub readhash\r
+{\r
+ my $filename = $_[0];\r
+ my $hash = $_[1];\r
+ my ($var, $val);\r
+ \r
+ \r
+ # Some ipcop code expects that readhash 'complete' the hash if new entries\r
+ # are presents. Not clear it !!!\r
+ #%$hash = ();\r
+\r
+ open(FILE, $filename) or die "Unable to read file $filename";\r
+ \r
+ while (<FILE>)\r
+ {\r
+ chop;\r
+ ($var, $val) = split /=/, $_, 2;\r
+ if ($var)\r
+ {\r
+ $val =~ s/^\'//g;\r
+ $val =~ s/\'$//g;\r
+\r
+ # Untaint variables read from hash\r
+ $var =~ /([A-Za-z0-9_-]*)/; $var = $1;\r
+ $val =~ /([\w\W]*)/; $val = $1;\r
+ $hash->{$var} = $val;\r
+ }\r
+ }\r
+ close FILE;\r
+}\r
+\r
+\r
+sub writehash\r
+{\r
+ my $filename = $_[0];\r
+ my $hash = $_[1];\r
+ my ($var, $val);\r
+ \r
+ # write cgi vars to the file.\r
+ open(FILE, ">${filename}") or die "Unable to write file $filename";\r
+ flock FILE, 2;\r
+ foreach $var (keys %$hash) \r
+ {\r
+ $val = $hash->{$var};\r
+ # Darren Critchley Jan 17, 2003 added the following because when submitting with a graphic, the x and y\r
+ # location of the mouse are submitted as well, this was being written to the settings file causing\r
+ # some serious grief! This skips the variable.x and variable.y\r
+ if (!($var =~ /(.x|.y)$/)) {\r
+ if ($val =~ / /) {\r
+ $val = "\'$val\'"; }\r
+ if (!($var =~ /^ACTION/)) {\r
+ print FILE "${var}=${val}\n"; }\r
+ }\r
+ }\r
+ close FILE;\r
+}\r
+\r
+\r
+sub age\r
+{\r
+ my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,\r
+ $atime, $mtime, $ctime, $blksize, $blocks) = stat $_[0];\r
+ my $now = time;\r
+\r
+ my $totalsecs = $now - $mtime;\r
+ my $days = int($totalsecs / 86400);\r
+ my $totalhours = int($totalsecs / 3600);\r
+ my $hours = $totalhours % 24;\r
+ my $totalmins = int($totalsecs / 60);\r
+ my $mins = $totalmins % 60;\r
+ my $secs = $totalsecs % 60;\r
+\r
+ return "${days}d ${hours}h ${mins}m ${secs}s";\r
+}\r
+\r
+sub validip\r
+{\r
+ my $ip = $_[0];\r
+\r
+ if (!($ip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/)) {\r
+ return 0; }\r
+ else \r
+ {\r
+ my @octets = ($1, $2, $3, $4);\r
+ foreach $_ (@octets)\r
+ {\r
+ if (/^0./) {\r
+ return 0; }\r
+ if ($_ < 0 || $_ > 255) {\r
+ return 0; }\r
+ }\r
+ return 1;\r
+ }\r
+}\r
+\r
+sub validmask\r
+{\r
+ my $mask = $_[0];\r
+\r
+ # secord part an ip?\r
+ if (&validip($mask)) {\r
+ return 1; }\r
+ # second part a number?\r
+ if (/^0/) {\r
+ return 0; }\r
+ if (!($mask =~ /^\d+$/)) {\r
+ return 0; }\r
+ if ($mask >= 0 && $mask <= 32) {\r
+ return 1; }\r
+ return 0;\r
+}\r
+\r
+sub validipormask\r
+{\r
+ my $ipormask = $_[0];\r
+\r
+ # see if it is a IP only.\r
+ if (&validip($ipormask)) {\r
+ return 1; }\r
+ # split it into number and mask.\r
+ if (!($ipormask =~ /^(.*?)\/(.*?)$/)) {\r
+ return 0; }\r
+ my $ip = $1;\r
+ my $mask = $2;\r
+ # first part not a ip?\r
+ if (!(&validip($ip))) {\r
+ return 0; }\r
+ return &validmask($mask);\r
+}\r
+\r
+sub validipandmask\r
+{\r
+ my $ipandmask = $_[0];\r
+\r
+ # split it into number and mask.\r
+ if (!($ipandmask =~ /^(.*?)\/(.*?)$/)) {\r
+ return 0; }\r
+ my $ip = $1;\r
+ my $mask = $2;\r
+ # first part not a ip?\r
+ if (!(&validip($ip))) {\r
+ return 0; }\r
+ return &validmask($mask);\r
+}\r
+\r
+sub validport\r
+{\r
+ $_ = $_[0];\r
+\r
+ if (!/^\d+$/) {\r
+ return 0; }\r
+ if (/^0./) {\r
+ return 0; }\r
+ if ($_ >= 1 && $_ <= 65535) {\r
+ return 1; }\r
+ return 0;\r
+}\r
+\r
+sub validmac\r
+{\r
+ my $checkmac = $_[0];\r
+ my $ot = '[0-9a-f]{2}'; # 2 Hex digits (one octet)\r
+ if ($checkmac !~ /^$ot:$ot:$ot:$ot:$ot:$ot$/i)\r
+ {\r
+ return 0;\r
+ }\r
+ return 1;\r
+}\r
+\r
+sub validhostname\r
+{\r
+ # Checks a hostname against RFC1035\r
+ my $hostname = $_[0];\r
+\r
+ # Each part should be at least two characters in length\r
+ # but no more than 63 characters\r
+ if (length ($hostname) < 1 || length ($hostname) > 63) {\r
+ return 0;}\r
+ # Only valid characters are a-z, A-Z, 0-9 and -\r
+ if ($hostname !~ /^[a-zA-Z0-9-]*$/) {\r
+ return 0;}\r
+ # First character can only be a letter or a digit\r
+ if (substr ($hostname, 0, 1) !~ /^[a-zA-Z0-9]*$/) {\r
+ return 0;}\r
+ # Last character can only be a letter or a digit\r
+ if (substr ($hostname, -1, 1) !~ /^[a-zA-Z0-9]*$/) {\r
+ return 0;}\r
+ return 1;\r
+}\r
+\r
+sub validdomainname\r
+{\r
+ my $part;\r
+\r
+ # Checks a domain name against RFC1035\r
+ my $domainname = $_[0];\r
+ my @parts = split (/\./, $domainname); # Split hostname at the '.'\r
+\r
+ foreach $part (@parts) {\r
+ # Each part should be at least two characters in length\r
+ # but no more than 63 characters\r
+ if (length ($part) < 2 || length ($part) > 63) {\r
+ return 0;}\r
+ # Only valid characters are a-z, A-Z, 0-9 and -\r
+ if ($part !~ /^[a-zA-Z0-9-]*$/) {\r
+ return 0;}\r
+ # First character can only be a letter or a digit\r
+ if (substr ($part, 0, 1) !~ /^[a-zA-Z0-9]*$/) {\r
+ return 0;}\r
+ # Last character can only be a letter or a digit\r
+ if (substr ($part, -1, 1) !~ /^[a-zA-Z0-9]*$/) {\r
+ return 0;}\r
+ }\r
+ return 1;\r
+}\r
+\r
+sub validfqdn\r
+{\r
+ my $part;\r
+\r
+ # Checks a fully qualified domain name against RFC1035\r
+ my $fqdn = $_[0];\r
+ my @parts = split (/\./, $fqdn); # Split hostname at the '.'\r
+ if (scalar(@parts) < 2) { # At least two parts should\r
+ return 0;} # exist in a FQDN\r
+ # (i.e. hostname.domain)\r
+ foreach $part (@parts) {\r
+ # Each part should be at least one character in length\r
+ # but no more than 63 characters\r
+ if (length ($part) < 1 || length ($part) > 63) {\r
+ return 0;}\r
+ # Only valid characters are a-z, A-Z, 0-9 and -\r
+ if ($part !~ /^[a-zA-Z0-9-]*$/) {\r
+ return 0;}\r
+ # First character can only be a letter or a digit\r
+ if (substr ($part, 0, 1) !~ /^[a-zA-Z0-9]*$/) {\r
+ return 0;}\r
+ # Last character can only be a letter or a digit\r
+ if (substr ($part, -1, 1) !~ /^[a-zA-Z0-9]*$/) {\r
+ return 0;}\r
+ }\r
+ return 1;\r
+}\r
+\r
+sub validportrange # used to check a port range \r
+{\r
+ my $port = $_[0]; # port values\r
+ $port =~ tr/-/:/; # replace all - with colons just in case someone used -\r
+ my $srcdst = $_[1]; # is it a source or destination port\r
+\r
+ if (!($port =~ /^(\d+)\:(\d+)$/)) {\r
+ \r
+ if (!(&validport($port))) { \r
+ if ($srcdst eq 'src'){\r
+ return $Lang::tr{'source port numbers'};\r
+ } else {\r
+ return $Lang::tr{'destination port numbers'};\r
+ } \r
+ }\r
+ }\r
+ else \r
+ {\r
+ my @ports = ($1, $2);\r
+ if ($1 >= $2){\r
+ if ($srcdst eq 'src'){\r
+ return $Lang::tr{'bad source range'};\r
+ } else {\r
+ return $Lang::tr{'bad destination range'};\r
+ } \r
+ }\r
+ foreach $_ (@ports)\r
+ {\r
+ if (!(&validport($_))) {\r
+ if ($srcdst eq 'src'){\r
+ return $Lang::tr{'source port numbers'}; \r
+ } else {\r
+ return $Lang::tr{'destination port numbers'};\r
+ } \r
+ }\r
+ }\r
+ return;\r
+ }\r
+}\r
+\r
+# Test if IP is within a subnet\r
+# Call: IpInSubnet (Addr, Subnet, Subnet Mask)\r
+# Subnet can be an IP of the subnet: 10.0.0.0 or 10.0.0.1\r
+# Everything in dottted notation\r
+# Return: TRUE/FALSE\r
+sub IpInSubnet\r
+{\r
+ my $ip = unpack('N', &Socket::inet_aton(shift));\r
+ my $start = unpack('N', &Socket::inet_aton(shift));\r
+ my $mask = unpack('N', &Socket::inet_aton(shift));\r
+ $start &= $mask; # base of subnet...\r
+ my $end = $start + ~$mask;\r
+ return (($ip >= $start) && ($ip <= $end));\r
+}\r
+\r
+sub validemail {\r
+ my $mail = shift;\r
+ return 0 if ( $mail !~ /^[0-9a-zA-Z\.\-\_]+\@[0-9a-zA-Z\.\-]+$/ );\r
+ return 0 if ( $mail =~ /^[^0-9a-zA-Z]|[^0-9a-zA-Z]$/);\r
+ return 0 if ( $mail !~ /([0-9a-zA-Z]{1})\@./ );\r
+ return 0 if ( $mail !~ /.\@([0-9a-zA-Z]{1})/ );\r
+ return 0 if ( $mail =~ /.\.\-.|.\-\..|.\.\..|.\-\-./g );\r
+ return 0 if ( $mail =~ /.\.\_.|.\-\_.|.\_\..|.\_\-.|.\_\_./g );\r
+ return 0 if ( $mail !~ /\.([a-zA-Z]{2,4})$/ );\r
+ return 1;\r
+}\r
+\r
+sub readhasharray {\r
+ my ($filename, $hash) = @_;\r
+ %$hash = ();\r
+\r
+ open(FILE, $filename) or die "Unable to read file $filename";\r
+\r
+ while (<FILE>) {\r
+ my ($key, $rest, @temp);\r
+ chomp;\r
+ ($key, $rest) = split (/,/, $_, 2);\r
+ if ($key =~ /^[0-9]+$/ && $rest) {\r
+ @temp = split (/,/, $rest);\r
+ $hash->{$key} = \@temp;\r
+ }\r
+ }\r
+ close FILE;\r
+ return;\r
+}\r
+\r
+sub writehasharray {\r
+ my ($filename, $hash) = @_;\r
+ my ($key, @temp, $i);\r
+\r
+ open(FILE, ">$filename") or die "Unable to write to file $filename";\r
+\r
+ foreach $key (keys %$hash) {\r
+ if ( $hash->{$key} ) {\r
+ print FILE "$key";\r
+ foreach $i (0 .. $#{$hash->{$key}}) {\r
+ print FILE ",$hash->{$key}[$i]";\r
+ }\r
+ }\r
+ print FILE "\n";\r
+ }\r
+ close FILE;\r
+ return;\r
+}\r
+\r
+sub findhasharraykey {\r
+ foreach my $i (1 .. 1000000) {\r
+ if ( ! exists $_[0]{$i}) {\r
+ return $i;\r
+ }\r
+ }\r
+}\r
+\r
+sub srtarray \r
+# Darren Critchley - darrenc@telus.net - (c) 2003\r
+# &srtarray(SortOrder, AlphaNumeric, SortDirection, ArrayToBeSorted)\r
+# This subroutine will take the following parameters:\r
+# ColumnNumber = the column which you want to sort on, starts at 1\r
+# AlphaNumberic = a or n (lowercase) defines whether the sort should be alpha or numberic\r
+# SortDirection = asc or dsc (lowercase) Ascending or Descending sort\r
+# ArrayToBeSorted = the array that wants sorting\r
+#\r
+# Returns an array that is sorted to your specs\r
+#\r
+# If SortOrder is greater than the elements in array, then it defaults to the first element\r
+# \r
+{\r
+ my ($colno, $alpnum, $srtdir, @tobesorted) = @_;\r
+ my @tmparray;\r
+ my @srtedarray;\r
+ my $line;\r
+ my $newline;\r
+ my $ctr;\r
+ my $ttlitems = scalar @tobesorted; # want to know the number of rows in the passed array\r
+ if ($ttlitems < 1){ # if no items, don't waste our time lets leave\r
+ return (@tobesorted);\r
+ }\r
+ my @tmp = split(/\,/,$tobesorted[0]);\r
+ $ttlitems = scalar @tmp; # this should be the number of elements in each row of the passed in array\r
+\r
+ # Darren Critchley - validate parameters\r
+ if ($colno > $ttlitems){$colno = '1';}\r
+ $colno--; # remove one from colno to deal with arrays starting at 0\r
+ if($colno < 0){$colno = '0';}\r
+ if ($alpnum ne '') { $alpnum = lc($alpnum); } else { $alpnum = 'a'; }\r
+ if ($srtdir ne '') { $srtdir = lc($srtdir); } else { $srtdir = 'src'; }\r
+\r
+ foreach $line (@tobesorted)\r
+ {\r
+ chomp($line);\r
+ if ($line ne '') {\r
+ my @temp = split(/\,/,$line);\r
+ # Darren Critchley - juggle the fields so that the one we want to sort on is first\r
+ my $tmpholder = $temp[0];\r
+ $temp[0] = $temp[$colno];\r
+ $temp[$colno] = $tmpholder;\r
+ $newline = "";\r
+ for ($ctr=0; $ctr < $ttlitems ; $ctr++) {\r
+ $newline=$newline . $temp[$ctr] . ",";\r
+ }\r
+ chop($newline);\r
+ push(@tmparray,$newline);\r
+ }\r
+ }\r
+ if ($alpnum eq 'n') {\r
+ @tmparray = sort {$a <=> $b} @tmparray;\r
+ } else {\r
+ @tmparray = (sort @tmparray);\r
+ }\r
+ foreach $line (@tmparray)\r
+ {\r
+ chomp($line);\r
+ if ($line ne '') {\r
+ my @temp = split(/\,/,$line);\r
+ my $tmpholder = $temp[0];\r
+ $temp[0] = $temp[$colno];\r
+ $temp[$colno] = $tmpholder;\r
+ $newline = "";\r
+ for ($ctr=0; $ctr < $ttlitems ; $ctr++){\r
+ $newline=$newline . $temp[$ctr] . ",";\r
+ }\r
+ chop($newline);\r
+ push(@srtedarray,$newline);\r
+ }\r
+ }\r
+\r
+ if ($srtdir eq 'dsc') {\r
+ @tmparray = reverse(@srtedarray);\r
+ return (@tmparray);\r
+ } else {\r
+ return (@srtedarray);\r
+ }\r
+}\r
+\r
+sub FetchPublicIp {\r
+ my %proxysettings;\r
+ &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);\r
+ if ($_=$proxysettings{'UPSTREAM_PROXY'}) {\r
+ my ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/);\r
+ Net::SSLeay::set_proxy($peer,$peerport,$proxysettings{'UPSTREAM_USER'},$proxysettings{'UPSTREAM_PASSWORD'} );\r
+ }\r
+ my ($out, $response) = Net::SSLeay::get_http( 'checkip.dyndns.org',\r
+ 80,\r
+ "/",\r
+ Net::SSLeay::make_headers('User-Agent' => 'Ipcop' )\r
+ );\r
+ if ($response =~ m%HTTP/1\.. 200 OK%) {\r
+ $out =~ /Current IP Address: (\d+.\d+.\d+.\d+)/;\r
+ return $1;\r
+ }\r
+ return '';\r
+}\r
+\r
+#\r
+# Check if hostname.domain provided have IP provided\r
+# use gethostbyname to verify that\r
+# Params:\r
+# IP\r
+# hostname\r
+# domain\r
+# Output \r
+# 1 IP matches host.domain\r
+# 0 not in sync\r
+#\r
+sub DyndnsServiceSync ($;$;$) {\r
+ \r
+ my ($ip,$hostName,$domain) = @_;\r
+ my @addresses;\r
+\r
+ #fix me no ip GROUP, what is the name ?\r
+ $hostName =~ s/$General::noipprefix//;\r
+ if ($hostName) { #may be empty\r
+ $hostName = "$hostName.$domain";\r
+ @addresses = gethostbyname($hostName);\r
+ }\r
+\r
+ if ($addresses[0] eq '') { # nothing returned ?\r
+ $hostName = $domain; # try resolving with domain only\r
+ @addresses = gethostbyname($hostName);\r
+ }\r
+\r
+ if ($addresses[0] ne '') { # got something ?\r
+ #&General::log("name:$addresses[0], alias:$addresses[1]"); \r
+ # Build clear text list of IP\r
+ @addresses = map ( &Socket::inet_ntoa($_), @addresses[4..$#addresses]);\r
+ if (grep (/$ip/, @addresses)) {\r
+ return 1;\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+#\r
+# This sub returns the red IP used to compare in DyndnsServiceSync\r
+#\r
+sub GetDyndnsRedIP {\r
+ my %settings;\r
+ &General::readhash("${General::swroot}/ddns/settings", \%settings);\r
+\r
+ open(IP, "${General::swroot}/red/local-ipaddress") or return 'unavailable';\r
+ my $ip = <IP>;\r
+ close(IP);\r
+ chomp $ip;\r
+\r
+ if (&General::IpInSubnet ($ip,'10.0.0.0','255.0.0.0') ||\r
+ &General::IpInSubnet ($ip,'172.16.0.0.','255.240.0.0') ||\r
+ &General::IpInSubnet ($ip,'192.168.0.0','255.255.0.0'))\r
+ {\r
+ if ($settings{'BEHINDROUTER'} eq 'FETCH_IP') {\r
+ my $RealIP = &General::FetchPublicIp;\r
+ $ip = (&General::validip ($RealIP) ? $RealIP : 'unavailable');\r
+ }\r
+ }\r
+ return $ip;\r
+}\r
+1;\r
--- /dev/null
+sub genmenu\r
+{\r
+ ... snip ...\r
+ if ( ! -e "${General::swroot}/proxy/enable" && ! -e "${General::swroot}/proxy/enable_blue" ) {\r
+ splice (@{$menu{'2.status'}{'subMenu'}}, 4, 1);\r
+ splice (@{$menu{'7.mainlogs'}{'subMenu'}}, 2, 1);\r
+ }\r
+\r
+ # Read additionnal menus entry\r
+ # this have to be hardened and accepted. To be extended.\r
+ opendir (DIR, "${General::swroot}/addon-menu");\r
+ while (my $menuitem = readdir (DIR)) {\r
+\r
+ if ( $menuitem =~ /^menu\.([1-6]\..*)\..*/) { #model is "menu.(N.submenu).filename"\r
+ my $submenu = $1;\r
+ open (FILE,"${General::swroot}/addon-menu/$menuitem") or die;\r
+ while (my $text = <FILE>) { # file may content many entry\r
+ splice (@{$menu{$submenu}{'subMenu'}} ,-1,0, [ eval($text) ] );\r
+ }\r
+ close (FILE);\r
+ }\r
+ }\r
+ closedir (DIR);\r
+}\r
--- /dev/null
+# SmoothWall CGIs\r
+#\r
+# This code is distributed under the terms of the GPL\r
+#\r
+# (c) The SmoothWall Team\r
+# Copyright (C) 2002 Alex Hudson - getcgihash() rewrite\r
+# Copyright (C) 2002 Bob Grant <bob@cache.ucr.edu> - validmac()\r
+# Copyright (c) 2002/04/13 Steve Bootes - add alias section, helper functions\r
+# Copyright (c) 2002/08/23 Mark Wormgoor <mark@wormgoor.com> validfqdn()\r
+# Copyright (c) 2003/09/11 Darren Critchley <darrenc@telus.net> srtarray()\r
+#\r
+# $Id: header.pl,v 1.34.2.67 2005/10/03 20:01:05 gespinasse Exp $\r
+#\r
+\r
+package Header;\r
+\r
+use strict;\r
+use CGI();\r
+use Time::Local;\r
+\r
+# enable only the following on debugging purpose\r
+#use warnings;\r
+#use CGI::Carp 'fatalsToBrowser';\r
+\r
+\r
+$Header::pagecolour = '#ffffff'; # never used, will be removed\r
+$Header::tablecolour = '#FFFFFF'; # never used, will be removed\r
+$Header::bigboxcolour = '#F6F4F4'; # never used, will be removed\r
+$Header::boxcolour = '#EAE9EE'; # only header.pl, ? move in css ?\r
+$Header::bordercolour = '#000000'; # never used, will be removed\r
+$Header::table1colour = '#C0C0C0';\r
+$Header::table2colour = '#F2F2F2';\r
+$Header::colourred = '#993333';\r
+$Header::colourorange = '#FF9933';\r
+$Header::colouryellow = '#FFFF00';\r
+$Header::colourgreen = '#339933';\r
+$Header::colourblue = '#333399';\r
+$Header::colourfw = '#000000'; # only connections.cgi\r
+$Header::colourvpn = '#990099'; # only connections.cgi\r
+$Header::colourerr = '#FF0000'; # only header.pl, many scripts use colourred for warnings messages\r
+$Header::viewsize = 150;\r
+my %menu = ();\r
+my $hostnameintitle = 0;\r
+our $javascript = 1;\r
+\r
+### Initialize menu\r
+sub genmenu\r
+{\r
+ ### Initialize environment\r
+ my %ethsettings = ();\r
+ &General::readhash("${General::swroot}/ethernet/settings", \%ethsettings);\r
+\r
+ %{$menu{'1.system'}}=(\r
+ 'contents' => $Lang::tr{'alt system'},\r
+ 'uri' => '',\r
+ 'statusText' => "IPCop $Lang::tr{'alt system'}",\r
+ 'subMenu' => [[ $Lang::tr{'alt home'} , '/cgi-bin/index.cgi', "IPCop $Lang::tr{'alt home'}" ],\r
+ [ $Lang::tr{'updates'} , '/cgi-bin/updates.cgi', "IPCop $Lang::tr{'updates'}" ],\r
+ [ $Lang::tr{'sspasswords'} , '/cgi-bin/changepw.cgi', "IPCop $Lang::tr{'sspasswords'}" ],\r
+ [ $Lang::tr{'ssh access'} , '/cgi-bin/remote.cgi', "IPCop $Lang::tr{'ssh access'}" ],\r
+ [ $Lang::tr{'gui settings'} , '/cgi-bin/gui.cgi', "IPCop $Lang::tr{'gui settings'}" ],\r
+ [ $Lang::tr{'backup'} , '/cgi-bin/backup.cgi', "IPCop $Lang::tr{'backup'} / $Lang::tr{'restore'}" ],\r
+ [ $Lang::tr{'shutdown'} , '/cgi-bin/shutdown.cgi', "IPCop $Lang::tr{'shutdown'} / $Lang::tr{'reboot'}" ],\r
+ [ $Lang::tr{'credits'} , '/cgi-bin/credits.cgi', "IPCop $Lang::tr{'credits'}" ]]\r
+ );\r
+ %{$menu{'2.status'}}=(\r
+ 'contents' => $Lang::tr{'status'},\r
+ 'uri' => '',\r
+ 'statusText' => "IPCop $Lang::tr{'status information'}",\r
+ 'subMenu' => [[ $Lang::tr{'sssystem status'} , '/cgi-bin/status.cgi', "IPCop $Lang::tr{'system status information'}" ],\r
+ [ $Lang::tr{'ssnetwork status'} , '/cgi-bin/netstatus.cgi', "IPCop $Lang::tr{'network status information'}" ],\r
+ [ $Lang::tr{'system graphs'} , '/cgi-bin/graphs.cgi', "IPCop $Lang::tr{'system graphs'}" ],\r
+ [ $Lang::tr{'sstraffic graphs'} , '/cgi-bin/graphs.cgi?graph=network', "IPCop $Lang::tr{'network traffic graphs'}" ],\r
+ [ $Lang::tr{'ssproxy graphs'} , '/cgi-bin/proxygraphs.cgi', "IPCop $Lang::tr{'proxy access graphs'}" ],\r
+ [ $Lang::tr{'connections'} , '/cgi-bin/connections.cgi', "IPCop $Lang::tr{'connections'}" ]]\r
+ );\r
+ %{$menu{'3.network'}}=(\r
+ 'contents' => $Lang::tr{'network'},\r
+ 'uri' => '',\r
+ 'statusText' => "IPCop $Lang::tr{'network configuration'}",\r
+ 'subMenu' => [[ $Lang::tr{'alt dialup'} , '/cgi-bin/pppsetup.cgi', "IPCop $Lang::tr{'dialup settings'}" ],\r
+ [ $Lang::tr{'upload'} , '/cgi-bin/upload.cgi', $Lang::tr{'firmware upload'} ],\r
+ [ $Lang::tr{'modem'} , '/cgi-bin/modem.cgi', "IPCop $Lang::tr{'modem configuration'}" ],\r
+ [ $Lang::tr{'aliases'} , '/cgi-bin/aliases.cgi', "IPCop $Lang::tr{'external aliases configuration'}" ]]\r
+ );\r
+ %{$menu{'4.services'}}=(\r
+ 'contents' => $Lang::tr{'alt services'},\r
+ 'uri' => '',\r
+ 'statusText' => "IPCop $Lang::tr{'alt services'}",\r
+ 'subMenu' => [[ $Lang::tr{'proxy'} , '/cgi-bin/proxy.cgi', "IPCop $Lang::tr{'web proxy configuration'}" ],\r
+ [ $Lang::tr{'dhcp server'} , '/cgi-bin/dhcp.cgi', "IPCop $Lang::tr{'dhcp configuration'}" ],\r
+ [ $Lang::tr{'dynamic dns'} , '/cgi-bin/ddns.cgi', "IPCop $Lang::tr{'dynamic dns client'}" ],\r
+ [ $Lang::tr{'edit hosts'} , '/cgi-bin/hosts.cgi', "IPCop $Lang::tr{'host configuration'}" ],\r
+ [ $Lang::tr{'time server'} , '/cgi-bin/time.cgi', "IPCop $Lang::tr{'time server'}" ],\r
+ [ $Lang::tr{'traffic shaping'} , '/cgi-bin/shaping.cgi', "IPCop $Lang::tr{'traffic shaping settings'}" ],\r
+ [ $Lang::tr{'intrusion detection'} , '/cgi-bin/ids.cgi', "IPCop $Lang::tr{'intrusion detection system'} (Snort)" ]]\r
+ );\r
+ %{$menu{'5.firewall'}}=(\r
+ 'contents' => $Lang::tr{'firewall'},\r
+ 'uri' => '',\r
+ 'statusText' => "IPCop $Lang::tr{'firewall'}",\r
+ 'subMenu' => [[ $Lang::tr{'ssport forwarding'} , '/cgi-bin/portfw.cgi', "IPCop $Lang::tr{'port forwarding configuration'}" ],\r
+ [ $Lang::tr{'external access'} , '/cgi-bin/xtaccess.cgi', "IPCop $Lang::tr{'external access configuration'}" ],\r
+ [ $Lang::tr{'ssdmz pinholes'} , '/cgi-bin/dmzholes.cgi', "IPCop $Lang::tr{'dmz pinhole configuration'}" ],\r
+ [ $Lang::tr{'blue access'} , '/cgi-bin/wireless.cgi', "IPCop $Lang::tr{'blue access'}" ]\r
+ ,[ $Lang::tr{'options fw'} , '/cgi-bin/optionsfw.cgi', "IPCop $Lang::tr{'options fw'}" ]\r
+ ]\r
+ );\r
+ %{$menu{'6.vpns'}}=(\r
+ 'contents' => $Lang::tr{'alt vpn'},\r
+ 'uri' => '',\r
+ 'statusText' => "IPCop $Lang::tr{'virtual private networking'}",\r
+ 'subMenu' => [[ $Lang::tr{'alt vpn'} , '/cgi-bin/vpnmain.cgi', "IPCop $Lang::tr{'virtual private networking'}"]]\r
+ );\r
+ %{$menu{'7.mainlogs'}}=(\r
+ 'contents' => $Lang::tr{'alt logs'},\r
+ 'uri' => '',\r
+ 'statusText' => "IPCop $Lang::tr{'alt logs'}",\r
+ 'subMenu' => [[ $Lang::tr{'log settings'} , '/cgi-bin/logs.cgi/config.dat', "IPCop $Lang::tr{'log settings'}" ],\r
+ [ $Lang::tr{'log summary'} , '/cgi-bin/logs.cgi/summary.dat', "IPCop $Lang::tr{'log summary'}" ],\r
+ [ $Lang::tr{'proxy logs'} , '/cgi-bin/logs.cgi/proxylog.dat', "IPCop $Lang::tr{'proxy log viewer'}" ],\r
+ [ $Lang::tr{'firewall logs'} , '/cgi-bin/logs.cgi/firewalllog.dat', "IPCop $Lang::tr{'firewall log viewer'}" ],\r
+ [ $Lang::tr{'ids logs'} , '/cgi-bin/logs.cgi/ids.dat', "IPCop $Lang::tr{'intrusion detection system log viewer'}" ],\r
+ [ $Lang::tr{'system logs'} , '/cgi-bin/logs.cgi/log.dat', "IPCop $Lang::tr{'system log viewer'}" ]]\r
+ );\r
+ if (! $ethsettings{'BLUE_DEV'}) {\r
+ splice (@{$menu{'5.firewall'}{'subMenu'}}, 3, 1);\r
+ }\r
+ if (! $ethsettings{'BLUE_DEV'} && ! $ethsettings{'ORANGE_DEV'}) {\r
+ splice (@{$menu{'5.firewall'}{'subMenu'}}, 2, 1);\r
+ }\r
+ unless ( $ethsettings{'CONFIG_TYPE'} =~ /^(2|3|6|7)$/ && $ethsettings{'RED_TYPE'} eq 'STATIC' ) {\r
+ splice (@{$menu{'3.network'}{'subMenu'}}, 3, 1);\r
+ }\r
+ if ( ! -e "${General::swroot}/snort/enable" && ! -e "${General::swroot}/snort/enable_blue" &&\r
+ ! -e "${General::swroot}/snort/enable_green" && ! -e "${General::swroot}/snort/enable_orange") {\r
+ splice (@{$menu{'7.mainlogs'}{'subMenu'}}, 4, 1);\r
+ }\r
+ if ( ! -e "${General::swroot}/proxy/enable" && ! -e "${General::swroot}/proxy/enable_blue" ) {\r
+ splice (@{$menu{'2.status'}{'subMenu'}}, 4, 1);\r
+ splice (@{$menu{'7.mainlogs'}{'subMenu'}}, 2, 1);\r
+ }\r
+}\r
+\r
+sub showhttpheaders\r
+{\r
+ ### Make sure this is an SSL request\r
+ if ($ENV{'SERVER_ADDR'} && $ENV{'HTTPS'} ne 'on') {\r
+ print "Status: 302 Moved\r\n";\r
+ print "Location: https://$ENV{'SERVER_ADDR'}:445/$ENV{'PATH_INFO'}\r\n\r\n";\r
+ exit 0;\r
+ } else {\r
+ print "Pragma: no-cache\n";\r
+ print "Cache-control: no-cache\n";\r
+ print "Connection: close\n";\r
+ print "Content-type: text/html\n\n";\r
+ }\r
+}\r
+\r
+sub showjsmenu\r
+{\r
+ my $c1 = 1;\r
+\r
+ print " <script type='text/javascript'>\n";\r
+ print " domMenu_data.setItem('domMenu_main', new domMenu_Hash(\n";\r
+\r
+ foreach my $k1 ( sort keys %menu ) {\r
+ my $c2 = 1;\r
+ if ($c1 > 1) {\r
+ print " ),\n";\r
+ }\r
+ print " $c1, new domMenu_Hash(\n";\r
+ print "\t'contents', '" . &cleanhtml($menu{$k1}{'contents'}) . "',\n";\r
+ print "\t'uri', '$menu{$k1}{'uri'}',\n";\r
+ $menu{$k1}{'statusText'} =~ s/'/\\\'/g;\r
+ print "\t'statusText', '$menu{$k1}{'statusText'}',\n";\r
+ foreach my $k2 ( @{$menu{$k1}{'subMenu'}} ) {\r
+ print "\t $c2, new domMenu_Hash(\n";\r
+ print "\t\t'contents', '" . &cleanhtml(@{$k2}[0]) . "',\n";\r
+ print "\t\t'uri', '@{$k2}[1]',\n";\r
+ @{$k2}[2] =~ s/'/\\\'/g;\r
+ print "\t\t'statusText', '@{$k2}[2]'\n";\r
+ if ( $c2 <= $#{$menu{$k1}{'subMenu'}} ) {\r
+ print "\t ),\n";\r
+ } else {\r
+ print "\t )\n";\r
+ }\r
+ $c2++;\r
+ }\r
+ $c1++;\r
+ }\r
+ print " )\n";\r
+ print " ));\n\n";\r
+\r
+ print <<EOF\r
+ domMenu_settings.setItem('domMenu_main', new domMenu_Hash(\r
+ 'menuBarWidth', '0%',\r
+ 'menuBarClass', 'ipcop_menuBar',\r
+ 'menuElementClass', 'ipcop_menuElement',\r
+ 'menuElementHoverClass', 'ipcop_menuElementHover',\r
+ 'menuElementActiveClass', 'ipcop_menuElementHover',\r
+ 'subMenuBarClass', 'ipcop_subMenuBar',\r
+ 'subMenuElementClass', 'ipcop_subMenuElement',\r
+ 'subMenuElementHoverClass', 'ipcop_subMenuElementHover',\r
+ 'subMenuElementActiveClass', 'ipcop_subMenuElementHover',\r
+ 'subMenuMinWidth', 'auto',\r
+ 'distributeSpace', false,\r
+ 'openMouseoverMenuDelay', 0,\r
+ 'openMousedownMenuDelay', 0,\r
+ 'closeClickMenuDelay', 0,\r
+ 'closeMouseoutMenuDelay', -1\r
+ ));\r
+ </script>\r
+EOF\r
+ ;\r
+}\r
+\r
+sub showmenu\r
+{\r
+ if ($javascript) {print "<noscript>";}\r
+ print "<table cellpadding='0' cellspacing='0' border='0'>\n";\r
+ print "<tr>\n";\r
+\r
+ foreach my $k1 ( sort keys %menu ) {\r
+ print "<td class='ipcop_menuElementTD'><a href='" . @{@{$menu{$k1}{'subMenu'}}[0]}[1] . "' class='ipcop_menuElementNoJS'>";\r
+ print $menu{$k1}{'contents'} . "</a></td>\n";\r
+ }\r
+ print "</tr></table>\n";\r
+ if ($javascript) {print "</noscript>";}\r
+}\r
+\r
+sub showsubsection\r
+{\r
+ my $location = $_[0];\r
+ my $c1 = 0;\r
+\r
+ if ($javascript) {print "<noscript>";}\r
+ print "<table width='100%' cellspacing='0' cellpadding='5' border='0'>\n";\r
+ print "<tr><td style='background-color: $Header::boxcolour;' width='53'><img src='/images/null.gif' width='43' height='1' alt='' /></td>\n";\r
+ print "<td style='background-color: $Header::boxcolour;' align='left' width='100%'>";\r
+ my @URI=split ('\?', $ENV{'REQUEST_URI'} );\r
+\r
+ foreach my $k1 ( keys %menu ) {\r
+ \r
+ if ($menu{$k1}{'contents'} eq $location) {\r
+ foreach my $k2 ( @{$menu{$k1}{'subMenu'}} ) {\r
+ if ($c1 > 0) {\r
+ print " | ";\r
+ }\r
+ if (@{$k2}[1] eq "$URI[0]\?$URI[1]" || (@{$k2}[1] eq $URI[0] && length($URI[1]) == 0)) {\r
+ #if (@{$k2}[1] eq "$URI[0]") {\r
+ print "<b>@{$k2}[0]</b>";\r
+ } else {\r
+ print "<a href='@{$k2}[1]'>@{$k2}[0]</a>";\r
+ }\r
+ $c1++;\r
+ }\r
+ }\r
+ }\r
+ print "</td></tr></table>\n";\r
+ if ($javascript) { print "</noscript>";}\r
+}\r
+\r
+sub openpage\r
+{\r
+ my $title = $_[0];\r
+ my $menu = $_[1];\r
+ my $extrahead = $_[2];\r
+\r
+ ### Initialize environment\r
+ my %settings = ();\r
+ &General::readhash("${General::swroot}/main/settings", \%settings);\r
+\r
+ if ($settings{'JAVASCRIPT'} eq 'off') {\r
+ $javascript = 0;\r
+ } else {\r
+ $javascript = 1;\r
+ }\r
+\r
+ if ($settings{'WINDOWWITHHOSTNAME'} eq 'on') {\r
+ $hostnameintitle = 1;\r
+ } else {\r
+ $hostnameintitle = 0;\r
+ }\r
+\r
+ print <<END\r
+<!DOCTYPE html \r
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+\r
+<html><head>\r
+END\r
+ ;\r
+ print " <title>";\r
+ if ($hostnameintitle) {\r
+ print "$settings{'HOSTNAME'}.$settings{'DOMAINNAME'} - $title"; \r
+ } else {\r
+ print "IPCop - $title";\r
+ }\r
+ print "</title>\n";\r
+\r
+ print <<END\r
+ $extrahead\r
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+ <link rel="shortcut icon" href="/favicon.ico" />\r
+ <style type="text/css">\@import url(/include/ipcop.css);</style>\r
+END\r
+ ;\r
+ if ($javascript) {\r
+ print "<script type='text/javascript' src='/include/domMenu.js'></script>\n";\r
+ &genmenu();\r
+ &showjsmenu();\r
+ } else {\r
+ &genmenu();\r
+ }\r
+\r
+ my $location = '';\r
+ my $sublocation = '';\r
+ my @URI=split ('\?', $ENV{'REQUEST_URI'} );\r
+ foreach my $k1 ( keys %menu ) {\r
+ my $temp = $menu{$k1}{'contents'};\r
+ foreach my $k2 ( @{$menu{$k1}{'subMenu'}} ) {\r
+ if ( @{$k2}[1] eq $URI[0] ) {\r
+ $location = $temp;\r
+ $sublocation = @{$k2}[0];\r
+ }\r
+ }\r
+ }\r
+\r
+ my @cgigraphs = split(/graph=/,$ENV{'QUERY_STRING'});\r
+ if (defined ($cgigraphs[1])){ \r
+ if ($cgigraphs[1] =~ /(GREEN|BLUE|ORANGE|RED|network)/) {\r
+ $location = $Lang::tr{'status'};\r
+ $sublocation = $Lang::tr{'sstraffic graphs'};\r
+ }\r
+ if ($cgigraphs[1] =~ /(cpu|memory|swap|disk)/) {\r
+ $location = $Lang::tr{'status'};\r
+ $sublocation = $Lang::tr{'system graphs'};\r
+ }\r
+ }\r
+ if ($ENV{'QUERY_STRING'} =~ /(ip)/) {\r
+ $location = $Lang::tr{'alt logs'};\r
+ $sublocation = "WHOIS";\r
+ }\r
+\r
+ if ($javascript) {\r
+ print <<END\r
+ <script type="text/javascript">\r
+ document.onmouseup = function()\r
+ {\r
+ domMenu_deactivate('domMenu_main');\r
+ }\r
+ </script>\r
+ </head>\r
+\r
+ <body onload="domMenu_activate('domMenu_main');">\r
+END\r
+ ;\r
+ } else {\r
+ print "</head>\n\n<body>\n";\r
+ }\r
+\r
+ print <<END\r
+<!-- IPCOP HEADER -->\r
+ <table width='100%' cellpadding='0' cellspacing='0'>\r
+ <col width='53' />\r
+ <col />\r
+ <tr><td><img src='/images/null.gif' width='53' height='27' alt='' /></td>\r
+ <td valign='bottom'><table width='100%' cellspacing='0' border='0'>\r
+ <col width='5' />\r
+ <col width='175' />\r
+ <col />\r
+ <tr><td><img src='/images/null.gif' width='5' height='1' alt='' /></td>\r
+ <td class="ipcop_menuLocationMain" valign='bottom'>$location</td>\r
+ <td class="ipcop_menuLocationSub" valign='bottom'>$sublocation</td>\r
+ </tr></table>\r
+ </td></tr>\r
+ <tr><td valign='bottom' class='ipcop_Version'>\r
+ <img src='/images/null.gif' width='1' height='29' alt='' />${General::version}</td>\r
+ <td valign='bottom'>\r
+END\r
+ ;\r
+ if ($menu == 1) {\r
+ if ($javascript) {\r
+ print "<div id='domMenu_main'></div>\n";\r
+ }\r
+ &showmenu();\r
+ }\r
+ print " </td></tr></table>\n";\r
+ &showsubsection($location);\r
+ print "<!-- IPCOP CONTENT -->\n";\r
+}\r
+\r
+sub closepage\r
+{\r
+ print <<END\r
+<!-- IPCOP FOOTER -->\r
+ <table width='100%' border='0'>\r
+ <tr><td valign='bottom'><img src='/images/bounceback.png' width='248' height='80' alt='' /></td>\r
+ <td align='center' valign='bottom'>\r
+END\r
+ ;\r
+ my $status = &connectionstatus();\r
+ print "$status<br />\n"; \r
+ print `/usr/bin/uptime`;\r
+\r
+ print <<END\r
+ </td>\r
+ <td valign='bottom'><a href='http://sf.net/projects/ipcop/' target='_blank'><img src='/images/sflogo.png' width='88' height='31' alt='Sourceforge logo' /></a></td>\r
+ </tr></table>\r
+</body></html>\r
+END\r
+ ;\r
+}\r
+\r
+sub openbigbox\r
+{\r
+ my $width = $_[0];\r
+ my $align = $_[1];\r
+ my $sideimg = $_[2];\r
+ my $errormessage = $_[3];\r
+ my $bgcolor;\r
+\r
+ if ($errormessage) {\r
+ $bgcolor = "style='background-color: $Header::colourerr;'";\r
+ } else {\r
+ $bgcolor = '';\r
+ }\r
+\r
+ print "<table width='100%' border='0'>\n";\r
+ if ($sideimg) {\r
+ print "<tr><td valign='top'><img src='/images/$sideimg' width='65' height='345' alt='' /></td>\n";\r
+ } else {\r
+ print "<tr>\n";\r
+ }\r
+ print "<td valign='top' align='center'><table width='$width' $bgcolor cellspacing='0' cellpadding='10' border='0'>\n";\r
+ print "<tr><td><img src='/images/null.gif' width='1' height='365' alt='' /></td>\n";\r
+ print "<td align='$align' valign='top'>\n";\r
+}\r
+\r
+sub closebigbox\r
+{\r
+ print "</td></tr></table></td></tr></table>\n" \r
+}\r
+\r
+sub openbox\r
+{\r
+ my $width = $_[0];\r
+ my $align = $_[1];\r
+ my $caption = $_[2];\r
+\r
+ print <<END\r
+ <table cellspacing="0" cellpadding="0" width="$width" border="0">\r
+ <col width='12' />\r
+ <col width='18' />\r
+ <col width='100%' />\r
+ <col width='152' />\r
+ <col width='11' />\r
+ \r
+ <tr><td width='12' ><img src='/images/null.gif' width='12' height='1' alt='' /></td>\r
+ <td width='18' ><img src='/images/null.gif' width='18' height='1' alt='' /></td>\r
+ <td width='100%'><img src='/images/null.gif' width='400' height='1' alt='' /></td>\r
+ <td width='152' ><img src='/images/null.gif' width='152' height='1' alt='' /></td>\r
+ <td width='11' ><img src='/images/null.gif' width='11' height='1' alt='' /></td></tr>\r
+ <tr><td colspan='2' ><img src='/images/boxtop1.png' width='30' height='53' alt='' /></td>\r
+ <td style='background: url(/images/boxtop2.png);'>\r
+END\r
+ ;\r
+ if ($caption) { print "<b>$caption</b>\n"; } else { print " "; }\r
+ print <<END\r
+ </td>\r
+ <td colspan='2'><img src='/images/boxtop3.png' width='163' height='53' alt='' /></td></tr>\r
+ <tr><td style='background: url(/images/boxleft.png);'><img src='/images/null.gif' width='12' height='1' alt='' /></td>\r
+ <td colspan='3' style='background-color: $Header::boxcolour;'>\r
+ <table width='100%' cellpadding='5'><tr><td align="$align" valign='top'>\r
+END\r
+ ;\r
+}\r
+\r
+sub closebox\r
+{\r
+ print <<END\r
+ </td></tr></table></td>\r
+ <td style='background: url(/images/boxright.png);'><img src='/images/null.gif' width='11' height='1' alt='' /></td></tr>\r
+ <tr><td style='background: url(/images/boxbottom1.png);background-repeat:no-repeat;'><img src='/images/null.gif' width='12' height='14' alt='' /></td>\r
+ <td style='background: url(/images/boxbottom2.png);background-repeat:repeat-x;' colspan='3'><img src='/images/null.gif' width='1' height='14' alt='' /></td>\r
+ <td style='background: url(/images/boxbottom3.png);background-repeat:no-repeat;'><img src='/images/null.gif' width='11' height='14' alt='' /></td></tr>\r
+ </table>\r
+END\r
+ ;\r
+}\r
+\r
+sub getcgihash {\r
+ my ($hash, $params) = @_;\r
+ my $cgi = CGI->new ();\r
+ return if ($ENV{'REQUEST_METHOD'} ne 'POST');\r
+ if (!$params->{'wantfile'}) {\r
+ $CGI::DISABLE_UPLOADS = 1;\r
+ $CGI::POST_MAX = 512 * 1024;\r
+ } else {\r
+ $CGI::POST_MAX = 10 * 1024 * 1024;\r
+ }\r
+\r
+ $cgi->referer() =~ m/^https?\:\/\/([^\/]+)/;\r
+ my $referer = $1;\r
+ $cgi->url() =~ m/^https?\:\/\/([^\/]+)/;\r
+ my $servername = $1;\r
+ return if ($referer ne $servername);\r
+\r
+ ### Modified for getting multi-vars, split by |\r
+ my %temp = $cgi->Vars();\r
+ foreach my $key (keys %temp) {\r
+ $hash->{$key} = $temp{$key};\r
+ $hash->{$key} =~ s/\0/|/g;\r
+ $hash->{$key} =~ s/^\s*(.*?)\s*$/$1/;\r
+ }\r
+\r
+ if (($params->{'wantfile'})&&($params->{'filevar'})) {\r
+ $hash->{$params->{'filevar'}} = $cgi->upload\r
+ ($params->{'filevar'});\r
+ }\r
+ return;\r
+}\r
+\r
+sub cleanhtml\r
+{\r
+ my $outstring =$_[0];\r
+ $outstring =~ tr/,/ / if not defined $_[1] or $_[1] ne 'y';\r
+ $outstring =~ s/&/&/g;\r
+ $outstring =~ s/\'/'/g;\r
+ $outstring =~ s/\"/"/g;\r
+ $outstring =~ s/</</g;\r
+ $outstring =~ s/>/>/g;\r
+ return $outstring;\r
+}\r
+\r
+sub connectionstatus\r
+{\r
+ my %pppsettings = ();\r
+ my %netsettings = ();\r
+ my $iface='';\r
+\r
+ $pppsettings{'PROFILENAME'} = 'None';\r
+ &General::readhash("${General::swroot}/ppp/settings", \%pppsettings);\r
+ &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);\r
+\r
+ my $profileused='';\r
+ if ( ! ( $netsettings{'CONFIG_TYPE'} =~ /^(2|3|6|7)$/ && $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ ) ) {\r
+ $profileused="- $pppsettings{'PROFILENAME'}";\r
+ }\r
+\r
+ if ( ( $pppsettings{'METHOD'} eq 'DHCP' && $netsettings{'RED_TYPE'} ne 'PPTP') \r
+ || $netsettings{'RED_TYPE'} eq 'DHCP' ) {\r
+ if (open(IFACE, "${General::swroot}/red/iface")) {\r
+ $iface = <IFACE>;\r
+ close IFACE;\r
+ chomp ($iface);\r
+ $iface =~ /([a-zA-Z0-9]*)/; $iface = $1;\r
+ }\r
+ }\r
+\r
+ my ($timestr, $connstate);\r
+ if ($netsettings{'CONFIG_TYPE'} =~ /^(0|1|4|5)$/ && $pppsettings{'TYPE'} =~ /^isdn/) {\r
+ # Count ISDN channels\r
+ my ($idmap, $chmap, $drmap, $usage, $flags, $phone);\r
+ my @phonenumbers;\r
+ my $count=0;\r
+\r
+ open (FILE, "/dev/isdninfo");\r
+\r
+ $idmap = <FILE>; chop $idmap;\r
+ $chmap = <FILE>; chop $chmap;\r
+ $drmap = <FILE>; chop $drmap;\r
+ $usage = <FILE>; chop $usage;\r
+ $flags = <FILE>; chop $flags;\r
+ $phone = <FILE>; chop $phone;\r
+\r
+ $phone =~ s/^phone(\s*):(\s*)//;\r
+\r
+ @phonenumbers = split / /, $phone;\r
+\r
+ foreach (@phonenumbers) {\r
+ if ($_ ne '???') {\r
+ $count++;\r
+ }\r
+ }\r
+ close (FILE);\r
+\r
+ ## Connection status\r
+ my $number;\r
+ if ($count == 0) {\r
+ $number = 'none!';\r
+ } elsif ($count == 1) {\r
+ $number = 'single';\r
+ } else {\r
+ $number = 'dual';\r
+ }\r
+\r
+ if (-e "${General::swroot}/red/active") {\r
+ $timestr = &General::age("${General::swroot}/red/active");\r
+ $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'connected'} - $number channel (<span class='ipcop_StatusBigRed'>$timestr</span>) $profileused</span>";\r
+ } else {\r
+ if ($count == 0) {\r
+ if (-e "${General::swroot}/red/dial-on-demand") {\r
+ $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'dod waiting'} $profileused</span>";\r
+ } else {\r
+ $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'idle'} $profileused</span>";\r
+ }\r
+ } else {\r
+ $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'connecting'} $profileused</span>";\r
+ }\r
+ }\r
+ } elsif ($netsettings{'RED_TYPE'} eq "STATIC" || $pppsettings {'METHOD'} eq 'STATIC') {\r
+ if (-e "${General::swroot}/red/active") {\r
+ $timestr = &General::age("${General::swroot}/red/active");\r
+ $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'connected'} (<span class='ipcop_StatusBigRed'>$timestr</span>) $profileused</span>";\r
+ } else {\r
+ $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'idle'} $profileused</span>";\r
+ }\r
+ } elsif ( ( (-e "${General::swroot}/dhcpc/dhcpcd-$iface.pid") && $netsettings{'RED_TYPE'} ne 'PPTP' ) || \r
+ !system("/bin/ps -ef | /bin/grep -q '[p]ppd'") || !system("/bin/ps -ef | /bin/grep -q '[c]onnectioncheck'")) {\r
+ if (-e "${General::swroot}/red/active") {\r
+ $timestr = &General::age("${General::swroot}/red/active");\r
+ if ($pppsettings{'TYPE'} =~ /^(modem|bewanadsl|conexantpciadsl|eagleusbadsl)$/) {\r
+ my $speed;\r
+ if ($pppsettings{'TYPE'} eq 'modem') {\r
+ open(CONNECTLOG, "/var/log/connect.log");\r
+ while (<CONNECTLOG>) {\r
+ if (/CONNECT/) {\r
+