Webinterface gefixt.
authorms <ms@ea5c0bd1-69bd-2848-81d8-4f18e57aeed8>
Wed, 22 Mar 2006 19:11:17 +0000 (19:11 +0000)
committerms <ms@ea5c0bd1-69bd-2848-81d8-4f18e57aeed8>
Wed, 22 Mar 2006 19:11:17 +0000 (19:11 +0000)
Ohne Anmeldung kommt man im Webinterface nichtmehr auf die Index-Seite.
Berkeley-DB neu implementiert.
Postfix geht jetzt.
Graphs gefixt.
IPCop-Updates gelöscht.

git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@82 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8

17 files changed:
config/cfgroot/header.pl
config/etc/aliases [new file with mode: 0644]
config/etc/syslog.conf
config/httpd/httpd.conf
doc/packages-list.txt
html/cgi-bin/credits.cgi
html/cgi-bin/pakfire.cgi [new file with mode: 0644]
html/cgi-bin/updates.cgi [deleted file]
html/html/images/logo_ipfire2.gif [deleted file]
langs/de/cgi-bin/de.pl
lfs/berkeley-DB
lfs/cdrom
lfs/configroot
lfs/ntp
lfs/postfix
make.sh
src/scripts/makegraphs

index 353e8c0..552bb20 100644 (file)
-# 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.39 2004/11/26 15:51:27 alanh Exp $\r
-#\r
-package Header;\r
-\r
-use CGI();\r
-use Socket;\r
-use Time::Local;\r
-\r
-$|=1; # line buffering\r
-\r
-sub get_version() {\r
-    my $read_ver = `cat /etc/ipfire-release`;\r
-    if ($read_ver =~ /^$/) {\r
-       return "IPFire (unknown version)";\r
-    }\r
-    return $read_ver;\r
-}\r
-\r
-$Header::version = get_version();\r
-$Header::revision = 'final';\r
-$Header::swroot = '/var/ipfire';\r
-$Header::pagecolour = '#ffffff';\r
-#$Header::tablecolour = '#a0a0a0';\r
-$Header::tablecolour = '#FFFFFF';\r
-$Header::bigboxcolour = '#F6F4F4';\r
-$Header::boxcolour = '#EAE9EE';\r
-$Header::bordercolour = '#000000';\r
-$Header::table1colour = '#E0E0E0';\r
-$Header::table2colour = '#F0F0F0';\r
-$Header::colourred = '#993333';\r
-$Header::colourorange = '#FF9933';\r
-$Header::colouryellow = '#FFFF00';\r
-$Header::colourgreen = '#339933';\r
-$Header::colourblue = '#333399';\r
-$Header::colourfw = '#000000';\r
-$Header::colourvpn = '#990099';\r
-$Header::colourerr = '#FF0000';\r
-$Header::viewsize = 150;\r
-$Header::errormessage = '';\r
-my %menuhash = ();\r
-my $menu = \%menuhash;\r
-%settings = ();\r
-%ethsettings = ();\r
-@URI = ();\r
-$Header::supported=0;\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'}:10443/$ENV{'PATH_INFO'}\r\n\r\n";\r
-    exit 0;\r
-}\r
-\r
-### Initialize environment\r
-&readhash("${swroot}/main/settings", \%settings);\r
-&readhash("${swroot}/ethernet/settings", \%ethsettings);\r
-$language = $settings{'LANGUAGE'};\r
-$hostname = $settings{'HOSTNAME'};\r
-$hostnameintitle = 0;\r
-\r
-### Initialize language\r
-if ($language =~ /^(\w+)$/) {$language = $1;}\r
-\r
-### Read English Files\r
-if ( -d "/var/ipfire/langs/en/" ) {\r
-    opendir(DIR, "/var/ipfire/langs/en/");\r
-    @names = readdir(DIR) or die "Cannot Read Directory: $!\n";\r
-    foreach $name(@names) {\r
-        next if ($name eq ".");\r
-        next if ($name eq "..");\r
-        next if (!($name =~ /\.pl$/));\r
-        require "${swroot}/langs/en/${name}";\r
-    };\r
-};\r
-\r
-\r
-### Enable Language Files\r
-if ( -d "/var/ipfire/langs/${language}/" ) {\r
-    opendir(DIR, "/var/ipfire/langs/${language}/");\r
-    @names = readdir(DIR) or die "Cannot Read Directory: $!\n";\r
-    foreach $name(@names) {\r
-        next if ($name eq ".");\r
-        next if ($name eq "..");\r
-        next if (!($name =~ /\.pl$/));\r
-        require "${swroot}/langs/${language}/${name}";\r
-    };\r
-};\r
-\r
-\r
-require "${swroot}/langs/en.pl";\r
-require "${swroot}/langs/${language}.pl";\r
-\r
-sub orange_used () {\r
-    if ($ethsettings{'CONFIG_TYPE'} =~ /^[1357]$/) {\r
-       return 1;\r
-    }\r
-    return 0;\r
-}\r
-\r
-sub blue_used () {\r
-    if ($ethsettings{'CONFIG_TYPE'} =~ /^[4567]$/) {\r
-       return 1;\r
-    }\r
-    return 0;\r
-}\r
-\r
-sub is_modem {\r
-    if ($ethsettings{'CONFIG_TYPE'} =~ /^[0145]$/) {\r
-       return 1;\r
-    }\r
-    return 0;\r
-}\r
-\r
-### Initialize menu\r
-sub genmenu {\r
-    my %subsystemhash = ();\r
-    my $subsystem = \%subsystemhash;\r
-\r
-    $subsystem->{'01.home'} = {\r
-                             'caption' => $tr{'alt home'},\r
-                             'uri' => '/cgi-bin/index.cgi',\r
-                             'title' => "$tr{'alt home'}",\r
-                             'enabled' => 1,\r
-                             };\r
-    $subsystem->{'02.netwizard'} = {\r
-                                  'caption' => $tr{'network configuration'},\r
-                                  'uri' => '/cgi-bin/netwizard.cgi',\r
-                                  'title' => "$tr{'network configuration'}",\r
-                                  'enabled' => 1,\r
-                                  };\r
-    $subsystem->{'03.updates'} = {\r
-                                'caption' => $tr{'updates'},\r
-                                'uri' => '/cgi-bin/updates.cgi',\r
-                                'title' => "$tr{'updates'}",\r
-                                'enabled' => 0,\r
-                                };\r
-    $subsystem->{'04.passwords'} = {\r
-                                  'caption' => $tr{'sspasswords'},\r
-                                  'uri' => '/cgi-bin/changepw.cgi',\r
-                                  'title' => "$tr{'sspasswords'}",\r
-                                  'enabled' => 1,\r
-                                  };\r
-    $subsystem->{'05.ssh'} = {\r
-                            'caption' => $tr{'ssh access'},\r
-                            'uri' => '/cgi-bin/remote.cgi',\r
-                            'title' => "$tr{'ssh access'}",\r
-                            'enabled' => 1,\r
-                            };\r
-    $subsystem->{'06.gui'} = {\r
-                             'caption' => $tr{'gui settings'},\r
-                             'uri' => '/cgi-bin/gui.cgi',\r
-                             'title' => "$tr{'gui settings'}",\r
-                             'enabled' => 1,\r
-                             };\r
-    $subsystem->{'07.backup'} = {\r
-                               'caption' => $tr{'backup'},\r
-                               'uri' => '/cgi-bin/backup.cgi',\r
-                               'title' => "$tr{'backup'} / $tr{'restore'}",\r
-                               'enabled' => 1,\r
-                               };\r
-    $subsystem->{'08.shutdown'} = {\r
-                                 'caption' => $tr{'shutdown'},\r
-                                 'uri' => '/cgi-bin/shutdown.cgi',\r
-                                 'title' => "$tr{'shutdown'} / $tr{'reboot'}",\r
-                                 'enabled' => 1,\r
-                                 };\r
-    $subsystem->{'09.credits'} = {\r
-                                 'caption' => $tr{'credits'},\r
-                                 'uri' => '/cgi-bin/credits.cgi',\r
-                                 'title' => "$tr{'credits'}",\r
-                                 'enabled' => 1,\r
-                                 };\r
-\r
-    my %substatushash = ();\r
-    my $substatus = \%substatushash;\r
-    $substatus->{'01.systemstatus'} = {\r
-                                'caption' => $tr{'sssystem status'},\r
-                                'uri' => '/cgi-bin/status.cgi',\r
-                                'title' => "$tr{'system status information'}",\r
-                                'enabled' => 1,\r
-                                };\r
-    $substatus->{'02.networkstatus'} = {\r
-                                 'caption' => $tr{'ssnetwork status'},\r
-                                 'uri' => '/cgi-bin/netstatus.cgi',\r
-                                 'title' => "$tr{'network status information'}",\r
-                                 'enabled' => 1,\r
-                                 };\r
-    $substatus->{'03.systemgraphs'} = {\r
-                                      'caption' => $tr{'system graphs'},\r
-                                      'uri' => '/cgi-bin/graphs.cgi',\r
-                                      'novars' => 1,\r
-                                      'title' => "$tr{'system graphs'}",\r
-                                      'enabled' => 1,\r
-                                      };\r
-    $substatus->{'04.trafficgraphs'} = {\r
-                                       'caption' => $tr{'sstraffic graphs'},\r
-                                       'uri' => '/cgi-bin/graphs.cgi',\r
-                                       'vars' => 'graph=network',\r
-                                       'title' => "$tr{'network traffic graphs'}",\r
-                                       'enabled' => 1,\r
-                                       };\r
-    $substatus->{'05.proxygraphs'} = {\r
-                                     'caption' => $tr{'ssproxy graphs'},\r
-                                     'uri' => '/cgi-bin/proxygraphs.cgi',\r
-                                     'title' => "$tr{'proxy access graphs'}",\r
-                                     'enabled' => 1,\r
-                                     };\r
-    $substatus->{'06.connections'} = {\r
-                                     'caption' => $tr{'connections'},\r
-                                     'uri' => '/cgi-bin/connections.cgi',\r
-                                     'title' => "$tr{'connections'}",\r
-                                     'enabled' => 1,\r
-                                     };\r
-    $substatus->{'99.iptfilters'} = {\r
-                                     'caption' => $tr{'iptfilters iptable rules'},\r
-                                     'uri' => '/cgi-bin/iptfilters.cgi',\r
-                                     'title' => "$tr{'iptfilters iptable rules'}",\r
-                                     'enabled' => 1,\r
-                                     };\r
-\r
-    my %subnetworkhash = ();\r
-    my $subnetwork = \%subnetworkhash;\r
-\r
-    $subnetwork->{'01.dialup'} = {\r
-                                 'caption' => $tr{'alt dialup'},\r
-                                 'uri' => '/cgi-bin/pppsetup.cgi',\r
-                                 'title' => "$tr{'dialup settings'}",\r
-                                 'enabled' => 0,\r
-                                 };\r
-    $subnetwork->{'02.hosts'} = {\r
-                                'caption' => $tr{'edit hosts'},\r
-                                'uri' => '/cgi-bin/hosts.cgi',\r
-                                'title' => "$tr{'host configuration'}",\r
-                                'enabled' => 1,\r
-                                };\r
-    $subnetwork->{'03.upload'} = {\r
-                                 'caption' => $tr{'upload'},\r
-                                 'uri' => '/cgi-bin/upload.cgi',\r
-                                 'title' => "$tr{'firmware upload'}",\r
-                                 'enabled' => 0,\r
-                                 };\r
-    $subnetwork->{'04.aliases'} = {\r
-                                 'caption' => $tr{'aliases'},\r
-                                 'uri' => '/cgi-bin/aliases.cgi',\r
-                                 'title' => "$tr{'external aliases configuration'}",\r
-                                 'enabled' => 1,\r
-                                 };\r
-\r
-\r
-    my %subserviceshash = ();\r
-    my $subservices = \%subserviceshash;\r
-\r
-    $subservices->{'01.dhcp'} = {\r
-                                'caption' => $tr{'dhcp server'},\r
-                                'uri' => '/cgi-bin/dhcp.cgi',\r
-                                'title' => "$tr{'dhcp configuration'}",\r
-                                'enabled' => 1,\r
-                                };\r
-    $subservices->{'02.dyndns'} = {\r
-                                  'caption' => $tr{'dynamic dns'},\r
-                                  'uri' => '/cgi-bin/ddns.cgi',\r
-                                  'title' => "$tr{'dynamic dns client'}",\r
-                                  'enabled' => 1,\r
-                                };\r
-    $subservices->{'03.time'} = {\r
-                                  'caption' => $tr{'time server'},\r
-                                  'uri' => '/cgi-bin/time.cgi',\r
-                                  'title' => "$tr{'time server'}",\r
-                                  'enabled' => 1,\r
-                                };\r
-    $subservices->{'04.shaping'} = {\r
-                                   'caption' => $tr{'traffic shaping'},\r
-                                   'uri' => '/cgi-bin/shaping.cgi',\r
-                                   'title' => "$tr{'traffic shaping settings'}",\r
-                                   'enabled' => 1,\r
-                                   };\r
-    $subservices->{'05.ids'} = {'caption' => $tr{'intrusion detection'},\r
-                               'enabled' => 1,\r
-                               'uri' => '/cgi-bin/ids.cgi',\r
-                               'title' => "$tr{'intrusion detection system'} (Snort)",\r
-                               };\r
-\r
-\r
-    my %subfirewallhash = ();\r
-    my $subfirewall = \%subfirewallhash;\r
-\r
-    \r
-    $subfirewall->{'01.dnat'} = {\r
-                                'caption' => $tr{'ssport forwarding'},\r
-                                'uri' => '/cgi-bin/portfw.cgi',\r
-                                'title' => "$tr{'port forwarding configuration'}",\r
-                                'enabled' => 1,\r
-                                };\r
-    $subfirewall->{'02.xtaccess'} = {\r
-                                'caption' => $tr{'external access'},\r
-                                'uri' => '/cgi-bin/xtaccess.cgi',\r
-                                'title' => "$tr{'external access configuration'}",\r
-                                'enabled' => 1,\r
-                                };\r
-    $subfirewall->{'03.dmz'} = {\r
-                               'caption' => $tr{'ssdmz pinholes'},\r
-                               'uri' => '/cgi-bin/dmzholes.cgi',\r
-                               'title' => "$tr{'dmz pinhole configuration'}",\r
-                               'enabled' => 1,\r
-                                };\r
-    $subfirewall->{'04.outgoing'} = {\r
-                                    'caption' => $tr{'outgoing firewall'},\r
-                                    'uri' => '/cgi-bin/outgoingfw.cgi',\r
-                                    'title' => "$tr{'outgoing firewall'}",\r
-                                    'enabled' => 1,\r
-                                    };\r
-    \r
-\r
-\r
-    my %subhttphash = ();\r
-    my $subhttp = \%subhttphash;\r
-    $subhttp->{'01.proxy'} = {\r
-                             'caption' => $tr{'proxy'},\r
-                             'uri' => '/cgi-bin/advproxy.cgi',\r
-                             'title' => "HTTP: $tr{'web proxy configuration'}",\r
-                             'enabled' => 1,\r
-                             };\r
-    $subhttp->{'02.contentfilter'} = {\r
-                                     'caption' => $tr{'content filter'},\r
-                                     'uri' => '/cgi-bin/dansguardian.cgi',\r
-                                     'title' => "HTTP: $tr{'content filter'}",\r
-                                     'enabled' => 1,\r
-                                     };\r
-    $subhttp->{'03.antivirus'} = {\r
-                                 'caption' => $tr{'antivirus'},\r
-                                 'uri' => '/cgi-bin/httpantivirus.cgi',\r
-                                 'title' => "HTTP: $tr{'antivirus'}",\r
-                                 'enabled' => 1,\r
-                                 };\r
-     $subhttp->{'04.proxymanagment'} = {\r
-                                   'caption' => $tr{'DS Managment'},\r
-                                   'uri' => '/cgi-bin/proxygm.cgi',\r
-                                   'title' => "HTTP: $tr{'DS Managment'}",\r
-                                   'enabled' => 1,\r
-                                   };\r
-     $subhttp->{'05.activatedgroups'} = {\r
-                                   'caption' => $tr{'activated Groups'},\r
-                                   'uri' => '/cgi-bin/proxyag.cgi',\r
-                                   'title' => "HTTP: $tr{'activated Groups'}",\r
-                                   'enabled' => 1,\r
-                                   };\r
-     $subhttp->{'06.advancedproxy'} = {\r
-                                   'caption' => $tr{'Proxy Advanced'},\r
-                                   'uri' => '/cgi-bin/proxyad.cgi',\r
-                                   'title' => "HTTP: $tr{'Proxy Advanced'}",\r
-                                   'enabled' => 1,\r
-                                   };\r
-\r
-\r
-    my %subproxyhash = ();\r
-    my $subproxy = \%subproxyhash;\r
-\r
-    $subproxy->{'01.http'} = {'caption' => $tr{'HTTP'},\r
-                             'enabled' => 1,\r
-                             'subMenu' => $subhttp\r
-                             };\r
-    $subproxy->{'02.ftp'} = {'caption' => 'FTP',\r
-                             'enabled' => 1,\r
-                             'subMenu' => $subftp\r
-                             };\r
-\r
-\r
-\r
-    my %subopenvpnhash = ();\r
-    my $subopenvpn = \%subopenvpnhash;\r
-    $subopenvpn->{'01.server'} = {'caption' => $tr{'openvpn'},\r
-                                 'uri' => '/cgi-bin/openvpn.cgi',\r
-                                 'title' => "$tr{'virtual private networking'}",\r
-                                 'enabled' => 1,\r
-                                 };\r
-    $subopenvpn->{'02.client'} = {'caption' => $tr{'openvpnclient'},\r
-                                 'uri' => '/cgi-bin/openvpnclient.cgi',\r
-                                 'title' => "$tr{'virtual private networking'}",\r
-                                 'enabled' => 1,\r
-                                 };\r
-\r
-    my %subvpnhash = ();\r
-    my $subvpn = \%subvpnhash;\r
-\r
-    $subvpn->{'01.openvpn'} = {'caption' => $tr{'openvpn'},\r
-                              'subMenu' => $subopenvpn,\r
-                              'enabled' => 1,\r
-                          };\r
-    $subvpn->{'02.ipsec'} = {'caption' => $tr{'ipsec'},\r
-                            'uri' => '/cgi-bin/vpnmain.cgi',\r
-                            'title' => "$tr{'virtual private networking'}",\r
-                            'enabled' => 1,\r
-                        };\r
-\r
-    my %sublogshash = ();\r
-    my $sublogs = \%sublogshash;\r
-\r
-    $sublogs->{'01.summary'} = {'caption' => $tr{'log summary'},\r
-                                'uri' => '/cgi-bin/logs.cgi/summary.dat',\r
-                                'title' => "$tr{'log summary'}",\r
-                                'enabled' => 1\r
-                                };\r
-    $sublogs->{'02.settings'} = {'caption' => $tr{'log settings'},\r
-                                'uri' => '/cgi-bin/logs.cgi/config.dat',\r
-                                'title' => "$tr{'log settings'}",\r
-                                'enabled' => 1\r
-                                };\r
-    $sublogs->{'03.proxy'} = {'caption' => $tr{'proxy logs'},\r
-                                'uri' => '/cgi-bin/logs.cgi/proxylog.dat',\r
-                                'title' => "$tr{'proxy log viewer'}",\r
-                                'enabled' => 1\r
-                                };\r
-    $sublogs->{'04.firewall'} = {'caption' => $tr{'firewall logs'},\r
-                                'uri' => '/cgi-bin/logs.cgi/firewalllog.dat',\r
-                                'title' => "$tr{'firewall log viewer'}",\r
-                                'enabled' => 1\r
-                                };\r
-    $sublogs->{'05.ids'} = {'caption' => $tr{'ids logs'},\r
-                           'uri' => '/cgi-bin/logs.cgi/ids.dat',\r
-                           'title' => "$tr{'intrusion detection system log viewer'}",\r
-                           'enabled' => 1\r
-                           };\r
-    $sublogs->{'06.contentfilter'} = {'caption' => $tr{'content filter logs'},\r
-                                     'uri' => '/cgi-bin/logs.cgi/dansguardian.dat',\r
-                                     'title' => "$tr{'content filter log viewer'}",\r
-                                     'enabled' => 1\r
-                                     };\r
-    $sublogs->{'07.urlfilter'} = {\r
-                                     'caption' => $tr{'urlfilter log'},\r
-                                     'uri' => '/cgi-bin/logs.cgi/urlfilter.dat',\r
-                                     'title' => "$tr{'urlfilter log'}",\r
-                                     'enabled' => 1,\r
-                                      };\r
-    $sublogs->{'08.openvpn'} = {'caption' => $tr{'openvpn log'},\r
-                                     'uri' => '/cgi-bin/logs.cgi/openvpn.dat',\r
-                                     'title' => "$tr{'openvpn log'}",\r
-                                     'enabled' => 1\r
-                                     };\r
-    $sublogs->{'09.system'} = {'caption' => $tr{'system logs'},\r
-                                     'uri' => '/cgi-bin/logs.cgi/log.dat',\r
-                                     'title' => "$tr{'system log viewer'}",\r
-                                     'enabled' => 1\r
-                                     };\r
-    $sublogs->{'10.userlog'} = {'caption' => $tr{'user proxy logs'},\r
-                                      'uri' => '/cgi-bin/logs.cgi/userlog.dat',\r
-                                      'title' => "$tr{'user log viewer'}",\r
-                                      'enabled' => 1\r
-                                       };\r
-\r
-\r
-    $menu->{'01.system'} = {'caption' => $tr{'alt system'},\r
-                           'enabled' => 1,\r
-                           'subMenu' => $subsystem\r
-                           };\r
-    $menu->{'02.status'} = {'caption' => $tr{'status'},\r
-                           'enabled' => 1,\r
-                           'subMenu' => $substatus\r
-                           };\r
-    $menu->{'03.network'} = {'caption' => $tr{'network'},\r
-                            'enabled' => 1,\r
-                            'subMenu' => $subnetwork\r
-                            };\r
-    $menu->{'04.services'} = {'caption' => $tr{'alt services'},\r
-                             'enabled' => 1,\r
-                             'subMenu' => $subservices\r
-                             };\r
-    $menu->{'05.firewall'} = {'caption' => $tr{'firewall'},\r
-                             'enabled' => 1,\r
-                             'subMenu' => $subfirewall\r
-                             };\r
-    $menu->{'06.proxy'} = {'caption' => $tr{'alt proxy'},\r
-                          'enabled' => 1,\r
-                          'subMenu' => $subproxy\r
-                          };\r
-    $menu->{'07.vpn'} = {'caption' => 'VPN',\r
-                        'enabled' => 1,\r
-                        'subMenu' => $subvpn\r
-                        };\r
-    $menu->{'08.logs'} = {'caption' => $tr{'alt logs'},\r
-                         'enabled' => 1,\r
-                         'subMenu' => $sublogs\r
-                         };\r
-\r
-\r
-\r
-    if (! blue_used() && ! orange_used()) {\r
-       $menu->{'05.firewall'}{'subMenu'}->{'03.dmz'}{'enabled'} = 0;\r
-    }\r
-    if (-e '/etc/FLASH') {\r
-       $menu{'06.proxy'}{'subMenu'}->{'01.http'}{'subMenu'}->{'01.proxy'}{'enabled'} = 0;  #disable squid\r
-       $menu{'04.services'}{'subMenu'}->{'05.ids'}{'enabled'} = 0;  #disable ids\r
-       $menu{'08.logs'}{'subMenu'}->{'05.ids'}{'enabled'} = 0;  #disable ids\r
-    }\r
-}\r
-\r
-sub showhttpheaders\r
-{\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
-sub is_menu_visible($) {\r
-    my $link = shift;\r
-    $link =~ s#\?.*$##;\r
-    return (-e $ENV{'DOCUMENT_ROOT'}."/../$link");\r
-}\r
-\r
-\r
-sub getlink($) {\r
-    my $root = shift;\r
-    if (! $root->{'enabled'}) {\r
-       return '';\r
-    }\r
-    if ($root->{'uri'} !~ /^$/) {\r
-       my $vars = '';\r
-       if ($root->{'vars'} !~ /^$/) {\r
-           $vars = '?'. $root->{'vars'};\r
-       }\r
-       if (! is_menu_visible($root->{'uri'})) {\r
-           return '';\r
-       }\r
-       return $root->{'uri'}.$vars;\r
-    }\r
-    my $submenus = $root->{'subMenu'};\r
-    if (! $submenus) {\r
-       return '';\r
-    }\r
-    foreach my $item (sort keys %$submenus) {\r
-       my $link = getlink($submenus->{$item});\r
-       if ($link ne '') {\r
-           return $link;\r
-       }\r
-    }\r
-    return '';\r
-}\r
-\r
-\r
-sub compare_url($) {\r
-    my $conf = shift;\r
-\r
-    my $uri = $conf->{'uri'};\r
-    my $vars = $conf->{'vars'};\r
-    my $novars = $conf->{'novars'};\r
-\r
-    if ($uri eq '') {\r
-       return 0;\r
-    }\r
-    if ($uri ne $URI[0]) {\r
-       return 0;\r
-    }\r
-    if ($novars) {\r
-       if ($URI[1] !~ /^$/) {\r
-           return 0;\r
-       }\r
-    }\r
-    if (! $vars) {\r
-       return 1;\r
-    }\r
-    return ($URI[1] eq $vars);\r
-}\r
-\r
-\r
-sub gettitle($) {\r
-    my $root = shift;\r
-\r
-    if (! $root) {\r
-       return '';\r
-    }\r
-    foreach my $item (sort keys %$root) {\r
-       my $val = $root->{$item};\r
-       if (compare_url($val)) {\r
-           $val->{'selected'} = 1;\r
-           if ($val->{'title'} !~ /^$/) {\r
-               return $val->{'title'};\r
-           }\r
-           return 'EMPTY TITLE';\r
-       }\r
-\r
-       my $title = gettitle($val->{'subMenu'});\r
-       if ($title ne '') {\r
-           $val->{'selected'} = 1;\r
-           return $title;\r
-       }\r
-    }\r
-    return '';\r
-}\r
-\r
-\r
-sub showmenu() {\r
-    print <<EOF\r
-  <div id="menu-top">\r
-    <ul>\r
-EOF\r
-;\r
-    foreach my $k1 ( sort keys %$menu ) {\r
-       if (! $menu->{$k1}{'enabled'}) {\r
-           next;\r
-       }\r
-\r
-       my $link = getlink($menu->{$k1});\r
-       if ($link eq '') {\r
-           next;\r
-       }\r
-       if (! is_menu_visible($link)) {\r
-           next;\r
-       }\r
-       if ($menu->{$k1}->{'selected'}) {\r
-           print '<li class="selected">';\r
-       } else {\r
-           print '<li>';\r
-       }\r
-\r
-       print <<EOF\r
-    <div class="rcorner">\r
-      <a href="$link">$menu->{$k1}{'caption'}</a>\r
-    </div>\r
-  </li>\r
-EOF\r
-;\r
-    }\r
-\r
-    print <<EOF\r
-    </ul>\r
-  </div>\r
-EOF\r
-;    \r
-}\r
-\r
-sub getselected($) {\r
-    my $root = shift;\r
-    if (!$root) {\r
-       return 0;\r
-    }\r
-\r
-    foreach my $item (%$root) {\r
-       if ($root->{$item}{'selected'}) {\r
-           return $root->{$item};\r
-       }\r
-    }\r
-}\r
-\r
-sub showsubsection($$) {\r
-    my $root = shift;\r
-    my $id = shift;\r
-    if ($id eq '') {\r
-       $id = 'menu-left';\r
-    }\r
-\r
-    if (! $root) {\r
-       return;\r
-    }\r
-    my $selected = getselected($root);\r
-    if (! $selected) {\r
-       return;\r
-    }\r
-    my $submenus = $selected->{'subMenu'};\r
-    if (! $submenus) {\r
-       return;\r
-    }\r
-\r
-    print <<EOF\r
-  <div id="$id">\r
-    <ul>\r
-EOF\r
-;\r
-    foreach my $item (sort keys %$submenus) {\r
-       my $hash = $submenus->{$item};\r
-       if (! $hash->{'enabled'}) {\r
-           next;\r
-       }\r
-\r
-       my $link = getlink($hash);\r
-       if ($link eq '') {\r
-           next;\r
-       }\r
-       if (! is_menu_visible($link)) {\r
-           next;\r
-       }\r
-       if ($hash->{'selected'}) {\r
-           print '<li class="selected">';\r
-       } else {\r
-           print '<li>';\r
-       }\r
-\r
-       print <<EOF\r
-      <a href="$link">$hash->{'caption'}</a>\r
-  </li>\r
-EOF\r
-;\r
-    }\r
-\r
-    print <<EOF\r
-    </ul>\r
-  </div>\r
-EOF\r
-;    \r
-\r
-}\r
-\r
-\r
-sub showsubsubsection($) {\r
-    my $root = shift;\r
-    if (!$root) {\r
-       return;\r
-    }\r
-    my $selected = getselected($root);\r
-    if (! $selected) {\r
-       return\r
-    }\r
-    if (! $selected->{'subMenu'}) {\r
-       return\r
-    }\r
-\r
-    showsubsection($selected->{'subMenu'}, 'menu-subtop');\r
-}\r
-\r
-\r
-sub get_helpuri() {\r
-    my $helpfile = '';\r
-    if ($URI[0] =~ /.*\/([^\/]+)\.cgi/) {\r
-       $helpfile = $1;\r
-    } else {\r
-       return '';\r
-    }\r
-    $helpfile .= '.help.html';\r
-\r
-    my $helpuri = '/doc/'.$language.'/'.$helpfile;\r
-    if (! -e $ENV{'DOCUMENT_ROOT'}.$helpuri) {\r
-       return '';\r
-    }\r
-    return $helpuri;\r
-}\r
-\r
-\r
-sub openpage {\r
-    my $title = shift;\r
-    my $boh = shift;\r
-    my $extrahead = shift;\r
-\r
-    @URI=split ('\?',  $ENV{'REQUEST_URI'} );\r
-    &readhash("${swroot}/main/settings", \%settings);\r
-    &genmenu();\r
-\r
-    my $h2 = gettitle($menu);\r
-    my $helpuri = get_helpuri();\r
-\r
-    $title = "IPFire - $title";\r
-    if ($settings{'WINDOWWITHHOSTNAME'} eq 'on') {\r
-        $title =  "$settings{'HOSTNAME'}.$settings{'DOMAINNAME'} - $title"; \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>\r
-  <head>\r
-  <title>$title</title>\r
-\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/style.css);</style>\r
-    <style type="text/css">\@import url(/include/menu.css);</style>\r
-    <style type="text/css">\@import url(/include/content.css);</style>\r
-\r
-    <script language="javascript" type="text/javascript">\r
-      \r
-        function swapVisibility(id) {\r
-            el = document.getElementById(id);\r
-           if(el.style.display != 'block') {\r
-               el.style.display = 'block'\r
-           }\r
-           else {\r
-               el.style.display = 'none'\r
-           }\r
-        }\r
-    </script>\r
-\r
-  </head>\r
-  <body>\r
-<!-- IPFIRE HEADER -->\r
-\r
-<div id="main">\r
-\r
-<div id="header">\r
-       <img id="logo-product" src="/images/logo_ipfire.gif">\r
-       <img id="logo-ipfire" src="/images/logo_ipfire2.gif">   \r
-   <div id="header-icons">\r
-END\r
-;\r
-\r
-    if ($helpuri ne '') {\r
-       print <<END\r
-           <a href="$helpuri" target="_blank"><img border="0" src="/images/help.gif"></a>\r
-END\r
-;\r
-    } else {\r
-       print '<img src="/images/help.gif">';\r
-    }\r
-\r
-print <<END\r
-   </div>\r
-</div>\r
-\r
-END\r
-;\r
-\r
-    &showmenu();\r
-\r
-print <<END\r
-<div id="content">\r
-  <table width="90%">\r
-    <tr>\r
-      <td valign="top">\r
-END\r
-;\r
-       \r
-    &showsubsection($menu);\r
-\r
-    print <<END\r
-\r
-      </td>\r
-        <td width="100%" valign="top">\r
-        <div id="page-content">\r
-            <h2>$h2</h2>\r
-END\r
-    ;\r
-    \r
-    &showsubsubsection($menu);\r
-\r
-    eval {\r
-       require 'ipfire-network.pl';\r
-       $supported = check_support();\r
-       warn_unsupported($supported);\r
-    };\r
-}\r
-\r
-sub closepage () {\r
-    my $status = &connectionstatus();\r
-    $uptime = `/usr/bin/uptime`;\r
-       \r
-    print <<END\r
-         <div align="center">\r
-            <p>\r
-             <div style="font-size: 9px"><b>Status:</b> $status <b>Uptime:</b>$uptime</div>\r
-            </p>\r
-            <p><a href="http://www.ipfire.org">IPFire</a> $version (c)</p>\r
-          </div>\r
-       </body>\r
-       <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0,Transition=12)">\r
-       <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0,Transition=12)">\r
-</html>\r
-END\r
-;\r
-}\r
-\r
-sub openbigbox\r
-{\r
-    my $width = $_[0];\r
-    my $align = $_[1];\r
-    my $sideimg = $_[2];\r
-\r
-    if ($errormessage) {\r
-       $bgcolor = "style='background-color: $colourerr;'";\r
-    } else {\r
-       $bgcolor = '';\r
-    }\r
-}\r
-\r
-sub closebigbox\r
-{\r
-#      print "</td></tr></table></td></tr></table>\n" \r
-}\r
-\r
-sub openbox\r
-{\r
-       $width = $_[0];\r
-       $align = $_[1];\r
-       $caption = $_[2];\r
-\r
-       if ($caption) { print "<h3>$caption</h3>\n"; } else { print "&nbsp;"; }\r
-       \r
-       print "<table class=\"list\"><tr><td align=\"$align\">\n";\r
-}\r
-\r
-sub closebox\r
-{\r
-       print "</td></tr></table><br><br>";\r
-}\r
-\r
-sub writehash\r
-{\r
-       my $filename = $_[0];\r
-       my $hash = $_[1];\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
-sub readhash\r
-{\r
-       my $filename = $_[0];\r
-       my $hash = $_[1];\r
-       my ($var, $val);\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
-sub getcgihash {\r
-       my ($hash, $params) = @_;\r
-       my $cgi = CGI->new ();\r
-       $hash->{'__CGI__'} = $cgi;\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
-       %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 log\r
-{\r
-       my $logmessage = $_[0];\r
-       $logmessage =~ /([\w\W]*)/;\r
-       $logmessage = $1;\r
-       system('/usr/bin/logger', '-t', 'ipfire', $logmessage);\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
-               @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
-       $ip = $1;\r
-       $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
-       $ip = $1;\r
-       $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) < 2 || 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
-       # 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
-       # 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 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 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 $tr{'source port numbers'};\r
-                       } else  {\r
-                               return $tr{'destination port numbers'};\r
-                       } \r
-               }\r
-       }\r
-       else \r
-       {\r
-               @ports = ($1, $2);\r
-               if ($1 >= $2){\r
-                       if ($srcdst eq 'src'){\r
-                               return $tr{'bad source range'};\r
-                       } else  {\r
-                               return $tr{'bad destination range'};\r
-                       } \r
-               }\r
-               foreach $_ (@ports)\r
-               {\r
-                       if (!(&validport($_))) {\r
-                               if ($srcdst eq 'src'){\r
-                                       return $tr{'source port numbers'}; \r
-                               } else  {\r
-                                       return $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
-    $ip = unpack('N', inet_aton(shift));\r
-    $start = unpack('N', inet_aton(shift));\r
-    $mask  = unpack('N', inet_aton(shift));\r
-    $start &= $mask;  # base of subnet...\r
-    $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,3})$/ );\r
-    return 1;\r
-}\r
-\r
-sub readhasharray {\r
-    my ($filename, $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);\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 cleanhtml\r
-{\r
-       my $outstring =$_[0];\r
-       $outstring =~ tr/,/ / if not defined $_[1] or $_[1] ne 'y';\r
-       $outstring =~ s/&/&amp;/g;\r
-       $outstring =~ s/\'/&#039;/g;\r
-       $outstring =~ s/\"/&quot;/g;\r
-       $outstring =~ s/</&lt;/g;\r
-       $outstring =~ s/>/&gt;/g;\r
-       return $outstring;\r
-}\r
-sub connectionstatus\r
-{\r
-        my $status;\r
-        opendir UPLINKS, "/var/ipfire/uplinks" or die "Cannot read uplinks: $!";\r
-                foreach my $uplink (sort grep !/^\./, readdir UPLINKS) {\r
-                    if ( -f "${swroot}/uplinks/${uplink}/active") {\r
-                        if ( ! $status ) {\r
-                                $timestr = &age("${swroot}/uplinks/${uplink}/active");\r
-                                $status = "$tr{'connected'}: $uplink (<span class='ipcop_StatusBigRed'>$timestr</span>) ";\r
-                        } else {\r
-                                $timestr = &age("${swroot}/uplinks/${uplink}/active");\r
-                                $status = "$status , $uplink (<span class='ipcop_StatusBigRed'>$timestr</span>) ";\r
-                        }\r
-                    } elsif ( -f "${swroot}/uplinks/${uplink}/connecting") {\r
-                        if ( ! $status ) {\r
-                                $status = "$tr{'connecting'} $uplink";\r
-                        } else {\r
-                                $status = "$status , $tr{'connecting'} $uplink (<span class='ipcop_StatusBigRed'>$timestr</span>) ";\r
-                        }\r
-                    }\r
-                    $lines++;\r
-                }\r
-                closedir(UPLINKS);\r
-                if ( ! $status ) {\r
-                        $status = "$tr{'idle'}";\r
-                }\r
-                $connstate = "<span class='ipcop_StatusBig'>$status</span>";\r
-    return $connstate;\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 $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 speedtouchversion\r
-{\r
-       if (-f "/proc/bus/usb/devices")\r
-       {\r
-               $speedtouch=`/bin/cat /proc/bus/usb/devices | /bin/grep 'Vendor=06b9 ProdID=4061' | /usr/bin/cut -d ' ' -f6`;\r
-               if ($speedtouch eq '') {\r
-                       $speedtouch= $tr{'connect the modem'};\r
-               }\r
-       } else {\r
-               $speedtouch='USB '.$tr{'not running'};\r
-       }\r
-       return $speedtouch\r
-}\r
-\r
-sub CheckSortOrder {\r
-#Sorting of allocated leases\r
-    if ($ENV{'QUERY_STRING'} =~ /^IPADDR|^ETHER|^HOSTNAME|^ENDTIME/ ) {\r
-       my $newsort=$ENV{'QUERY_STRING'};\r
-        &readhash("${swroot}/dhcp/settings", \%dhcpsettings);\r
-        $act=$dhcpsettings{'SORT_LEASELIST'};\r
-        #Reverse actual ?\r
-        if ($act =~ $newsort) {\r
-            if ($act !~ 'Rev') {$Rev='Rev'};\r
-            $newsort.=$Rev\r
-        };\r
-\r
-        $dhcpsettings{'SORT_LEASELIST'}=$newsort;\r
-       &writehash("${swroot}/dhcp/settings", \%dhcpsettings);\r
-        $dhcpsettings{'ACTION'} = 'SORT';  # avoid the next test "First lauch"\r
-    }\r
-\r
-}\r
-\r
-sub PrintActualLeases\r
-{\r
-    &openbox('100%', 'left', $tr{'current dynamic leases'});\r
-    print <<END\r
-<table width='100%'>\r
-<tr>\r
-<td width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IPADDR'><b>$tr{'ip address'}</b></a></td>\r
-<td width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ETHER'><b>$tr{'mac address'}</b></a></td>\r
-<td width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOSTNAME'><b>$tr{'hostname'}</b></a></td>\r
-<td width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ENDTIME'><b>$tr{'lease expires'} (local time d/m/y)</b></a></td>\r
-</tr>\r
-END\r
-    ;\r
-\r
-    open(LEASES,"/var/lib/dhcp/dhcpd.leases") or die "Can't open dhcpd.leases";\r
-    while ($line = <LEASES>) {\r
-       next if( $line =~ /^\s*#/ );\r
-       chomp($line);\r
-       @temp = split (' ', $line);\r
-\r
-       if ($line =~ /^\s*lease/) {\r
-           $ip = $temp[1];\r
-           #All field are not necessarily read. Clear everything\r
-           $endtime = 0;\r
-           $ether = "";\r
-           $hostname = "";\r
-       }\r
-\r
-       if ($line =~ /^\s*ends/) {\r
-           $line =~ /(\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/;\r
-           $endtime = timegm($6, $5, $4, $3, $2 - 1, $1 - 1900);\r
-       }\r
-\r
-       if ($line =~ /^\s*hardware ethernet/) {\r
-           $ether = $temp[2];\r
-           $ether =~ s/;//g;\r
-       }\r
-\r
-       if ($line =~ /^\s*client-hostname/) {\r
-           $hostname = "$temp[1] $temp[2] $temp[3]";\r
-           $hostname =~ s/;//g;\r
-           $hostname =~ s/\"//g;\r
-       }\r
-\r
-       if ($line eq "}") {\r
-           @record = ('IPADDR',$ip,'ENDTIME',$endtime,'ETHER',$ether,'HOSTNAME',$hostname);\r
-           $record = {};                                       # create a reference to empty hash\r
-           %{$record} = @record;                               # populate that hash with @record\r
-           $entries{$record->{'IPADDR'}} = $record;    # add this to a hash of hashes\r
-       }\r
-    }\r
-    close(LEASES);\r
-\r
-    my $id = 0;\r
-    foreach my $key (sort leasesort keys %entries) {\r
-\r
-       my $hostname = &cleanhtml($entries{$key}->{HOSTNAME},"y");\r
-\r
-       if ($id % 2) {\r
-           print "<tr bgcolor='$table1colour'>"; \r
-       }\r
-       else {\r
-           print "<tr bgcolor='$table2colour'>"; \r
-       }\r
-\r
-       print <<END\r
-<td align='center'>$entries{$key}->{IPADDR}</td>\r
-<td align='center'>$entries{$key}->{ETHER}</td>\r
-<td align='center'>&nbsp;$hostname </td>\r
-<td align='center'>\r
-END\r
-       ;\r
-\r
-       ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dst) = localtime ($entries{$key}->{ENDTIME});\r
-       $enddate = sprintf ("%02d/%02d/%d %02d:%02d:%02d",$mday,$mon+1,$year+1900,$hour,$min,$sec);\r
-\r
-       if ($entries{$key}->{ENDTIME} < time() ){\r
-           print "<strike>$enddate</strike>";\r
-       } else {\r
-           print "$enddate";\r
-       }\r
-       print "</td></tr>";\r
-       $id++;\r
-    }\r
-\r
-    print "</table>";\r
-    &closebox();\r
-}\r
-\r
-\r
-# This sub is used during display of actives leases\r
-sub leasesort {\r
-    if (rindex ($dhcpsettings{'SORT_LEASELIST'},'Rev') != -1)\r
-    {\r
-        $qs=substr ($dhcpsettings{'SORT_LEASELIST'},0,length($dhcpsettings{'SORT_LEASELIST'})-3);\r
-        if ($qs eq 'IPADDR') {\r
-            @a = split(/\./,$entries{$a}->{$qs});\r
-            @b = split(/\./,$entries{$b}->{$qs});\r
-            ($b[0]<=>$a[0]) ||\r
-            ($b[1]<=>$a[1]) ||\r
-            ($b[2]<=>$a[2]) ||\r
-            ($b[3]<=>$a[3]);\r
-        }else {\r
-            $entries{$b}->{$qs} cmp $entries{$a}->{$qs};\r
-        }\r
-    }\r
-    else #not reverse\r
-    {\r
-        $qs=$dhcpsettings{'SORT_LEASELIST'};\r
-        if ($qs eq 'IPADDR') {\r
-           @a = split(/\./,$entries{$a}->{$qs});\r
-           @b = split(/\./,$entries{$b}->{$qs});\r
-           ($a[0]<=>$b[0]) ||\r
-           ($a[1]<=>$b[1]) ||\r
-           ($a[2]<=>$b[2]) ||\r
-           ($a[3]<=>$b[3]);\r
-       }else {\r
-           $entries{$a}->{$qs} cmp $entries{$b}->{$qs};\r
-       }\r
-    }\r
-}\r
-\r
-sub get_uplinks() {\r
-    my @uplinks = ();\r
-    opendir(DIR, "${swroot}/uplinks/") || return \@uplinks;\r
-    foreach my $dir (readdir(DIR)) {\r
-       next if ($dir =~ /^\./);\r
-       next if (-f "${swroot}/uplinks/$dir");\r
-       push(@uplinks, $dir);\r
-    }\r
-    closedir(DIR);\r
-    return \@uplinks;\r
-}\r
-\r
-sub get_iface($) {\r
-    my $filename = shift;\r
-    chomp($filename);\r
-    open (F, $filename) || return "";\r
-    my $iface = <F>;\r
-    close(F);\r
-    chomp($iface);\r
-    return $iface;\r
-}\r
-\r
-sub get_red_ifaces_by_type($) {\r
-    my $type=shift;\r
-    my @gottypeiface = ();\r
-    my @gottypeuplink = ();\r
-    my @gottype = ();\r
-\r
-    my $ref=get_uplinks();\r
-    my @uplinks=@$ref;\r
-    my %set = ();\r
-    foreach my $link (@uplinks) {\r
-       eval {\r
-           &readhash("${swroot}/uplinks/$link/settings", \%set);\r
-       };\r
-       push(@gottype, $link);\r
-\r
-       my $iface = $set{'RED_DEV'};\r
-       if (!$iface) {\r
-           $iface = get_iface("${swroot}/uplinks/$link/interface");\r
-       }\r
-       next if (!$iface);\r
-\r
-       if ($set{'RED_TYPE'} eq $type) {\r
-           push(@gottypeiface, $iface);\r
-           push(@gottypeuplink, $link);\r
-       }\r
-    }\r
-    return (\@gottypeiface, \@gottypeuplink, \@gottype);\r
-}\r
-\r
-sub get_red_ifaces() {\r
-    return `cat ${swroot}/uplinks/*/interface 2>/dev/null`;\r
-}\r
-\r
-sub get_zone_devices($) {\r
-    my $bridge = shift;\r
-    my @ifaces = ();\r
-    open (FILE, "${swroot}/ethernet/$bridge") || return "";\r
-    foreach my $line (<FILE>) {\r
-       chomp($line);\r
-       next if (!$line);\r
-       push(@ifaces, $line);\r
-    }\r
-    close(FILE);\r
-    return \@ifaces;\r
-}\r
+# SmoothWall CGIs
+#
+# This code is distributed under the terms of the GPL
+#
+# (c) The SmoothWall Team
+# Copyright (C) 2002 Alex Hudson - getcgihash() rewrite
+# Copyright (C) 2002 Bob Grant <bob@cache.ucr.edu> - validmac()
+# Copyright (c) 2002/04/13 Steve Bootes - add alias section, helper functions
+# Copyright (c) 2002/08/23 Mark Wormgoor <mark@wormgoor.com> validfqdn()
+# Copyright (c) 2003/09/11 Darren Critchley <darrenc@telus.net> srtarray()
+#
+# $Id: header.pl,v 1.34.2.39 2004/11/26 15:51:27 alanh Exp $
+#
+package Header;
+
+use CGI();
+use Socket;
+use Time::Local;
+
+$|=1; # line buffering
+
+sub get_version() {
+    my $read_ver = `cat /etc/ipfire-release`;
+    if ($read_ver =~ /^$/) {
+       return "IPFire (unknown version)";
+    }
+    return $read_ver;
+}
+
+$Header::version = get_version();
+$Header::revision = 'final';
+$Header::swroot = '/var/ipfire';
+$Header::pagecolour = '#ffffff';
+#$Header::tablecolour = '#a0a0a0';
+$Header::tablecolour = '#FFFFFF';
+$Header::bigboxcolour = '#F6F4F4';
+$Header::boxcolour = '#EAE9EE';
+$Header::bordercolour = '#000000';
+$Header::table1colour = '#E0E0E0';
+$Header::table2colour = '#F0F0F0';
+$Header::colourred = '#993333';
+$Header::colourorange = '#FF9933';
+$Header::colouryellow = '#FFFF00';
+$Header::colourgreen = '#339933';
+$Header::colourblue = '#333399';
+$Header::colourfw = '#000000';
+$Header::colourvpn = '#990099';
+$Header::colourerr = '#FF0000';
+$Header::viewsize = 150;
+$Header::errormessage = '';
+my %menuhash = ();
+my $menu = \%menuhash;
+%settings = ();
+%ethsettings = ();
+@URI = ();
+$Header::supported=0;
+
+### Make sure this is an SSL request
+if ($ENV{'SERVER_ADDR'} && $ENV{'HTTPS'} ne 'on') {
+    print "Status: 302 Moved\r\n";
+    print "Location: https://$ENV{'SERVER_ADDR'}:10443/$ENV{'PATH_INFO'}\r\n\r\n";
+    exit 0;
+}
+
+### Initialize environment
+&readhash("${swroot}/main/settings", \%settings);
+&readhash("${swroot}/ethernet/settings", \%ethsettings);
+$language = $settings{'LANGUAGE'};
+$hostname = $settings{'HOSTNAME'};
+$hostnameintitle = 0;
+
+### Initialize language
+if ($language =~ /^(\w+)$/) {$language = $1;}
+
+### Read English Files
+if ( -d "/var/ipfire/langs/en/" ) {
+    opendir(DIR, "/var/ipfire/langs/en/");
+    @names = readdir(DIR) or die "Cannot Read Directory: $!\n";
+    foreach $name(@names) {
+        next if ($name eq ".");
+        next if ($name eq "..");
+        next if (!($name =~ /\.pl$/));
+        require "${swroot}/langs/en/${name}";
+    };
+};
+
+
+### Enable Language Files
+if ( -d "/var/ipfire/langs/${language}/" ) {
+    opendir(DIR, "/var/ipfire/langs/${language}/");
+    @names = readdir(DIR) or die "Cannot Read Directory: $!\n";
+    foreach $name(@names) {
+        next if ($name eq ".");
+        next if ($name eq "..");
+        next if (!($name =~ /\.pl$/));
+        require "${swroot}/langs/${language}/${name}";
+    };
+};
+
+
+require "${swroot}/langs/en.pl";
+require "${swroot}/langs/${language}.pl";
+
+sub orange_used () {
+    if ($ethsettings{'CONFIG_TYPE'} =~ /^[1357]$/) {
+       return 1;
+    }
+    return 0;
+}
+
+sub blue_used () {
+    if ($ethsettings{'CONFIG_TYPE'} =~ /^[4567]$/) {
+       return 1;
+    }
+    return 0;
+}
+
+sub is_modem {
+    if ($ethsettings{'CONFIG_TYPE'} =~ /^[0145]$/) {
+       return 1;
+    }
+    return 0;
+}
+
+### Initialize menu
+sub genmenu {
+    my %subsystemhash = ();
+    my $subsystem = \%subsystemhash;
+
+    $subsystem->{'01.home'} = {
+                             'caption' => $tr{'alt home'},
+                             'uri' => '/cgi-bin/index.cgi',
+                             'title' => "$tr{'alt home'}",
+                             'enabled' => 1,
+                             };
+    $subsystem->{'02.netwizard'} = {
+                                  'caption' => $tr{'network configuration'},
+                                  'uri' => '/cgi-bin/netwizard.cgi',
+                                  'title' => "$tr{'network configuration'}",
+                                  'enabled' => 1,
+                                  };
+    $subsystem->{'03.updates'} = {
+                                'caption' => $tr{'updates'},
+                                'uri' => '/cgi-bin/updates.cgi',
+                                'title' => "$tr{'updates'}",
+                                'enabled' => 0,
+                                };
+    $subsystem->{'04.passwords'} = {
+                                  'caption' => $tr{'sspasswords'},
+                                  'uri' => '/cgi-bin/changepw.cgi',
+                                  'title' => "$tr{'sspasswords'}",
+                                  'enabled' => 1,
+                                  };
+    $subsystem->{'05.ssh'} = {
+                            'caption' => $tr{'ssh access'},
+                            'uri' => '/cgi-bin/remote.cgi',
+                            'title' => "$tr{'ssh access'}",
+                            'enabled' => 1,
+                            };
+    $subsystem->{'06.gui'} = {
+                             'caption' => $tr{'gui settings'},
+                             'uri' => '/cgi-bin/gui.cgi',
+                             'title' => "$tr{'gui settings'}",
+                             'enabled' => 1,
+                             };
+    $subsystem->{'07.backup'} = {
+                               'caption' => $tr{'backup'},
+                               'uri' => '/cgi-bin/backup.cgi',
+                               'title' => "$tr{'backup'} / $tr{'restore'}",
+                               'enabled' => 1,
+                               };
+    $subsystem->{'08.shutdown'} = {
+                                 'caption' => $tr{'shutdown'},
+                                 'uri' => '/cgi-bin/shutdown.cgi',
+                                 'title' => "$tr{'shutdown'} / $tr{'reboot'}",
+                                 'enabled' => 1,
+                                 };
+    $subsystem->{'09.credits'} = {
+                                 'caption' => $tr{'credits'},
+                                 'uri' => '/cgi-bin/credits.cgi',
+                                 'title' => "$tr{'credits'}",
+                                 'enabled' => 1,
+                                 };
+
+    my %substatushash = ();
+    my $substatus = \%substatushash;
+    $substatus->{'01.systemstatus'} = {
+                                'caption' => $tr{'sssystem status'},
+                                'uri' => '/cgi-bin/status.cgi',
+                                'title' => "$tr{'system status information'}",
+                                'enabled' => 1,
+                                };
+    $substatus->{'02.networkstatus'} = {
+                                 'caption' => $tr{'ssnetwork status'},
+                                 'uri' => '/cgi-bin/netstatus.cgi',
+                                 'title' => "$tr{'network status information'}",
+                                 'enabled' => 1,
+                                 };
+    $substatus->{'03.systemgraphs'} = {
+                                      'caption' => $tr{'system graphs'},
+                                      'uri' => '/cgi-bin/graphs.cgi',
+                                      'novars' => 1,
+                                      'title' => "$tr{'system graphs'}",
+                                      'enabled' => 1,
+                                      };
+    $substatus->{'04.trafficgraphs'} = {
+                                       'caption' => $tr{'sstraffic graphs'},
+                                       'uri' => '/cgi-bin/graphs.cgi',
+                                       'vars' => 'graph=network',
+                                       'title' => "$tr{'network traffic graphs'}",
+                                       'enabled' => 1,
+                                       };
+    $substatus->{'05.proxygraphs'} = {
+                                     'caption' => $tr{'ssproxy graphs'},
+                                     'uri' => '/cgi-bin/proxygraphs.cgi',
+                                     'title' => "$tr{'proxy access graphs'}",
+                                     'enabled' => 1,
+                                     };
+    $substatus->{'06.connections'} = {
+                                     'caption' => $tr{'connections'},
+                                     'uri' => '/cgi-bin/connections.cgi',
+                                     'title' => "$tr{'connections'}",
+                                     'enabled' => 1,
+                                     };
+    $substatus->{'99.iptfilters'} = {
+                                     'caption' => $tr{'iptfilters iptable rules'},
+                                     'uri' => '/cgi-bin/iptfilters.cgi',
+                                     'title' => "$tr{'iptfilters iptable rules'}",
+                                     'enabled' => 1,
+                                     };
+
+    my %subnetworkhash = ();
+    my $subnetwork = \%subnetworkhash;
+
+    $subnetwork->{'01.dialup'} = {
+                                 'caption' => $tr{'alt dialup'},
+                                 'uri' => '/cgi-bin/pppsetup.cgi',
+                                 'title' => "$tr{'dialup settings'}",
+                                 'enabled' => 0,
+                                 };
+    $subnetwork->{'02.hosts'} = {
+                                'caption' => $tr{'edit hosts'},
+                                'uri' => '/cgi-bin/hosts.cgi',
+                                'title' => "$tr{'host configuration'}",
+                                'enabled' => 1,
+                                };
+    $subnetwork->{'03.upload'} = {
+                                 'caption' => $tr{'upload'},
+                                 'uri' => '/cgi-bin/upload.cgi',
+                                 'title' => "$tr{'firmware upload'}",
+                                 'enabled' => 0,
+                                 };
+    $subnetwork->{'04.aliases'} = {
+                                 'caption' => $tr{'aliases'},
+                                 'uri' => '/cgi-bin/aliases.cgi',
+                                 'title' => "$tr{'external aliases configuration'}",
+                                 'enabled' => 1,
+                                 };
+
+
+    my %subserviceshash = ();
+    my $subservices = \%subserviceshash;
+
+    $subservices->{'01.dhcp'} = {
+                                'caption' => $tr{'dhcp server'},
+                                'uri' => '/cgi-bin/dhcp.cgi',
+                                'title' => "$tr{'dhcp configuration'}",
+                                'enabled' => 1,
+                                };
+    $subservices->{'02.dyndns'} = {
+                                  'caption' => $tr{'dynamic dns'},
+                                  'uri' => '/cgi-bin/ddns.cgi',
+                                  'title' => "$tr{'dynamic dns client'}",
+                                  'enabled' => 1,
+                                };
+    $subservices->{'03.time'} = {
+                                  'caption' => $tr{'time server'},
+                                  'uri' => '/cgi-bin/time.cgi',
+                                  'title' => "$tr{'time server'}",
+                                  'enabled' => 1,
+                                };
+    $subservices->{'04.shaping'} = {
+                                   'caption' => $tr{'traffic shaping'},
+                                   'uri' => '/cgi-bin/shaping.cgi',
+                                   'title' => "$tr{'traffic shaping settings'}",
+                                   'enabled' => 1,
+                                   };
+    $subservices->{'05.ids'} = {'caption' => $tr{'intrusion detection'},
+                               'enabled' => 1,
+                               'uri' => '/cgi-bin/ids.cgi',
+                               'title' => "$tr{'intrusion detection system'} (Snort)",
+                               };
+
+
+    my %subfirewallhash = ();
+    my $subfirewall = \%subfirewallhash;
+
+    
+    $subfirewall->{'01.dnat'} = {
+                                'caption' => $tr{'ssport forwarding'},
+                                'uri' => '/cgi-bin/portfw.cgi',
+                                'title' => "$tr{'port forwarding configuration'}",
+                                'enabled' => 1,
+                                };
+    $subfirewall->{'02.xtaccess'} = {
+                                'caption' => $tr{'external access'},
+                                'uri' => '/cgi-bin/xtaccess.cgi',
+                                'title' => "$tr{'external access configuration'}",
+                                'enabled' => 1,
+                                };
+    $subfirewall->{'03.dmz'} = {
+                               'caption' => $tr{'ssdmz pinholes'},
+                               'uri' => '/cgi-bin/dmzholes.cgi',
+                               'title' => "$tr{'dmz pinhole configuration'}",
+                               'enabled' => 1,
+                                };
+    $subfirewall->{'04.outgoing'} = {
+                                    'caption' => $tr{'outgoing firewall'},
+                                    'uri' => '/cgi-bin/outgoingfw.cgi',
+                                    'title' => "$tr{'outgoing firewall'}",
+                                    'enabled' => 1,
+                                    };
+    
+
+
+    my %subhttphash = ();
+    my $subhttp = \%subhttphash;
+    $subhttp->{'01.proxy'} = {
+                             'caption' => $tr{'proxy'},
+                             'uri' => '/cgi-bin/advproxy.cgi',
+                             'title' => "HTTP: $tr{'web proxy configuration'}",
+                             'enabled' => 1,
+                             };
+    $subhttp->{'02.contentfilter'} = {
+                                     'caption' => $tr{'content filter'},
+                                     'uri' => '/cgi-bin/dansguardian.cgi',
+                                     'title' => "HTTP: $tr{'content filter'}",
+                                     'enabled' => 1,
+                                     };
+    $subhttp->{'03.antivirus'} = {
+                                 'caption' => $tr{'antivirus'},
+                                 'uri' => '/cgi-bin/httpantivirus.cgi',
+                                 'title' => "HTTP: $tr{'antivirus'}",
+                                 'enabled' => 1,
+                                 };
+     $subhttp->{'04.proxymanagment'} = {
+                                   'caption' => $tr{'DS Managment'},
+                                   'uri' => '/cgi-bin/proxygm.cgi',
+                                   'title' => "HTTP: $tr{'DS Managment'}",
+                                   'enabled' => 1,
+                                   };
+     $subhttp->{'05.activatedgroups'} = {
+                                   'caption' => $tr{'activated Groups'},
+                                   'uri' => '/cgi-bin/proxyag.cgi',
+                                   'title' => "HTTP: $tr{'activated Groups'}",
+                                   'enabled' => 1,
+                                   };
+     $subhttp->{'06.advancedproxy'} = {
+                                   'caption' => $tr{'Proxy Advanced'},
+                                   'uri' => '/cgi-bin/proxyad.cgi',
+                                   'title' => "HTTP: $tr{'Proxy Advanced'}",
+                                   'enabled' => 1,
+                                   };
+
+
+    my %subproxyhash = ();
+    my $subproxy = \%subproxyhash;
+
+    $subproxy->{'01.http'} = {'caption' => $tr{'HTTP'},
+                             'enabled' => 1,
+                             'subMenu' => $subhttp
+                             };
+    $subproxy->{'02.ftp'} = {'caption' => 'FTP',
+                             'enabled' => 1,
+                             'subMenu' => $subftp
+                             };
+
+
+
+    my %subopenvpnhash = ();
+    my $subopenvpn = \%subopenvpnhash;
+    $subopenvpn->{'01.server'} = {'caption' => $tr{'openvpn'},
+                                 'uri' => '/cgi-bin/openvpn.cgi',
+                                 'title' => "$tr{'virtual private networking'}",
+                                 'enabled' => 1,
+                                 };
+    $subopenvpn->{'02.client'} = {'caption' => $tr{'openvpnclient'},
+                                 'uri' => '/cgi-bin/openvpnclient.cgi',
+                                 'title' => "$tr{'virtual private networking'}",
+                                 'enabled' => 1,
+                                 };
+
+    my %subvpnhash = ();
+    my $subvpn = \%subvpnhash;
+
+    $subvpn->{'01.openvpn'} = {'caption' => $tr{'openvpn'},
+                              'subMenu' => $subopenvpn,
+                              'enabled' => 1,
+                          };
+    $subvpn->{'02.ipsec'} = {'caption' => $tr{'ipsec'},
+                            'uri' => '/cgi-bin/vpnmain.cgi',
+                            'title' => "$tr{'virtual private networking'}",
+                            'enabled' => 1,
+                        };
+
+    my %sublogshash = ();
+    my $sublogs = \%sublogshash;
+
+    $sublogs->{'01.summary'} = {'caption' => $tr{'log summary'},
+                                'uri' => '/cgi-bin/logs.cgi/summary.dat',
+                                'title' => "$tr{'log summary'}",
+                                'enabled' => 1
+                                };
+    $sublogs->{'02.settings'} = {'caption' => $tr{'log settings'},
+                                'uri' => '/cgi-bin/logs.cgi/config.dat',
+                                'title' => "$tr{'log settings'}",
+                                'enabled' => 1
+                                };
+    $sublogs->{'03.proxy'} = {'caption' => $tr{'proxy logs'},
+                                'uri' => '/cgi-bin/logs.cgi/proxylog.dat',
+                                'title' => "$tr{'proxy log viewer'}",
+                                'enabled' => 1
+                                };
+    $sublogs->{'04.firewall'} = {'caption' => $tr{'firewall logs'},
+                                'uri' => '/cgi-bin/logs.cgi/firewalllog.dat',
+                                'title' => "$tr{'firewall log viewer'}",
+                                'enabled' => 1
+                                };
+    $sublogs->{'05.ids'} = {'caption' => $tr{'ids logs'},
+                           'uri' => '/cgi-bin/logs.cgi/ids.dat',
+                           'title' => "$tr{'intrusion detection system log viewer'}",
+                           'enabled' => 1
+                           };
+    $sublogs->{'06.contentfilter'} = {'caption' => $tr{'content filter logs'},
+                                     'uri' => '/cgi-bin/logs.cgi/dansguardian.dat',
+                                     'title' => "$tr{'content filter log viewer'}",
+                                     'enabled' => 1
+                                     };
+    $sublogs->{'07.urlfilter'} = {
+                                     'caption' => $tr{'urlfilter log'},
+                                     'uri' => '/cgi-bin/logs.cgi/urlfilter.dat',
+                                     'title' => "$tr{'urlfilter log'}",
+                                     'enabled' => 1,
+                                      };
+    $sublogs->{'08.openvpn'} = {'caption' => $tr{'openvpn log'},
+                                     'uri' => '/cgi-bin/logs.cgi/openvpn.dat',
+                                     'title' => "$tr{'openvpn log'}",
+                                     'enabled' => 1
+                                     };
+    $sublogs->{'09.system'} = {'caption' => $tr{'system logs'},
+                                     'uri' => '/cgi-bin/logs.cgi/log.dat',
+                                     'title' => "$tr{'system log viewer'}",
+                                     'enabled' => 1
+                                     };
+    $sublogs->{'10.userlog'} = {'caption' => $tr{'user proxy logs'},
+                                      'uri' => '/cgi-bin/logs.cgi/userlog.dat',
+                                      'title' => "$tr{'user log viewer'}",
+                                      'enabled' => 1
+                                       };
+
+    my %subipfirehash = ();
+    my $subipfire = \%subipfirehash;
+    $subipfire->{'01.pakfire'} = {'caption' => $tr{'pakfire'},
+                                 'uri' => '/cgi-bin/pakfire.cgi',
+                                 'title' => "$tr{'paketmanager'}",
+                                 'enabled' => 1,
+                                 };
+    $subipfire->{'02.samba'} = {'caption' => $tr{'samba'},
+                                 'uri' => '/cgi-bin/samba.cgi',
+                                 'title' => "$tr{'samba'}",
+                                 'enabled' => 1,
+                                 };
+
+
+
+    $menu->{'01.system'} = {'caption' => $tr{'alt system'},
+                           'enabled' => 1,
+                           'subMenu' => $subsystem
+                           };
+    $menu->{'02.status'} = {'caption' => $tr{'status'},
+                           'enabled' => 1,
+                           'subMenu' => $substatus
+                           };
+    $menu->{'03.network'} = {'caption' => $tr{'network'},
+                            'enabled' => 1,
+                            'subMenu' => $subnetwork
+                            };
+    $menu->{'04.services'} = {'caption' => $tr{'alt services'},
+                             'enabled' => 1,
+                             'subMenu' => $subservices
+                             };
+    $menu->{'05.firewall'} = {'caption' => $tr{'firewall'},
+                             'enabled' => 1,
+                             'subMenu' => $subfirewall
+                             };
+    $menu->{'06.proxy'} = {'caption' => $tr{'alt proxy'},
+                          'enabled' => 1,
+                          'subMenu' => $subproxy
+                          };
+    $menu->{'07.vpn'} = {'caption' => 'VPN',
+                        'enabled' => 1,
+                        'subMenu' => $subvpn
+                        };
+    $menu->{'08.logs'} = {'caption' => $tr{'alt logs'},
+                         'enabled' => 1,
+                         'subMenu' => $sublogs
+                         };
+    $menu->{'09.ipfire'} = {'caption' => 'IPFire'},
+                         'enabled' => 1,
+                         'subMenu' => $subipfire
+                         };
+
+
+
+    if (! blue_used() && ! orange_used()) {
+       $menu->{'05.firewall'}{'subMenu'}->{'03.dmz'}{'enabled'} = 0;
+    }
+    if (-e '/etc/FLASH') {
+       $menu{'06.proxy'}{'subMenu'}->{'01.http'}{'subMenu'}->{'01.proxy'}{'enabled'} = 0;  #disable squid
+       $menu{'04.services'}{'subMenu'}->{'05.ids'}{'enabled'} = 0;  #disable ids
+       $menu{'08.logs'}{'subMenu'}->{'05.ids'}{'enabled'} = 0;  #disable ids
+    }
+}
+
+sub showhttpheaders
+{
+       print "Pragma: no-cache\n";
+       print "Cache-control: no-cache\n";
+       print "Connection: close\n";
+       print "Content-type: text/html\n\n";
+}
+
+sub is_menu_visible($) {
+    my $link = shift;
+    $link =~ s#\?.*$##;
+    return (-e $ENV{'DOCUMENT_ROOT'}."/../$link");
+}
+
+
+sub getlink($) {
+    my $root = shift;
+    if (! $root->{'enabled'}) {
+       return '';
+    }
+    if ($root->{'uri'} !~ /^$/) {
+       my $vars = '';
+       if ($root->{'vars'} !~ /^$/) {
+           $vars = '?'. $root->{'vars'};
+       }
+       if (! is_menu_visible($root->{'uri'})) {
+           return '';
+       }
+       return $root->{'uri'}.$vars;
+    }
+    my $submenus = $root->{'subMenu'};
+    if (! $submenus) {
+       return '';
+    }
+    foreach my $item (sort keys %$submenus) {
+       my $link = getlink($submenus->{$item});
+       if ($link ne '') {
+           return $link;
+       }
+    }
+    return '';
+}
+
+
+sub compare_url($) {
+    my $conf = shift;
+
+    my $uri = $conf->{'uri'};
+    my $vars = $conf->{'vars'};
+    my $novars = $conf->{'novars'};
+
+    if ($uri eq '') {
+       return 0;
+    }
+    if ($uri ne $URI[0]) {
+       return 0;
+    }
+    if ($novars) {
+       if ($URI[1] !~ /^$/) {
+           return 0;
+       }
+    }
+    if (! $vars) {
+       return 1;
+    }
+    return ($URI[1] eq $vars);
+}
+
+
+sub gettitle($) {
+    my $root = shift;
+
+    if (! $root) {
+       return '';
+    }
+    foreach my $item (sort keys %$root) {
+       my $val = $root->{$item};
+       if (compare_url($val)) {
+           $val->{'selected'} = 1;
+           if ($val->{'title'} !~ /^$/) {
+               return $val->{'title'};
+           }
+           return 'EMPTY TITLE';
+       }
+
+       my $title = gettitle($val->{'subMenu'});
+       if ($title ne '') {
+           $val->{'selected'} = 1;
+           return $title;
+       }
+    }
+    return '';
+}
+
+
+sub showmenu() {
+    print <<EOF
+  <div id="menu-top">
+    <ul>
+EOF
+;
+    foreach my $k1 ( sort keys %$menu ) {
+       if (! $menu->{$k1}{'enabled'}) {
+           next;
+       }
+
+       my $link = getlink($menu->{$k1});
+       if ($link eq '') {
+           next;
+       }
+       if (! is_menu_visible($link)) {
+           next;
+       }
+       if ($menu->{$k1}->{'selected'}) {
+           print '<li class="selected">';
+       } else {
+           print '<li>';
+       }
+
+       print <<EOF
+    <div class="rcorner">
+      <a href="$link">$menu->{$k1}{'caption'}</a>
+    </div>
+  </li>
+EOF
+;
+    }
+
+    print <<EOF
+    </ul>
+  </div>
+EOF
+;    
+}
+
+sub getselected($) {
+    my $root = shift;
+    if (!$root) {
+       return 0;
+    }
+
+    foreach my $item (%$root) {
+       if ($root->{$item}{'selected'}) {
+           return $root->{$item};
+       }
+    }
+}
+
+sub showsubsection($$) {
+    my $root = shift;
+    my $id = shift;
+    if ($id eq '') {
+       $id = 'menu-left';
+    }
+
+    if (! $root) {
+       return;
+    }
+    my $selected = getselected($root);
+    if (! $selected) {
+       return;
+    }
+    my $submenus = $selected->{'subMenu'};
+    if (! $submenus) {
+       return;
+    }
+
+    print <<EOF
+  <div id="$id">
+    <ul>
+EOF
+;
+    foreach my $item (sort keys %$submenus) {
+       my $hash = $submenus->{$item};
+       if (! $hash->{'enabled'}) {
+           next;
+       }
+
+       my $link = getlink($hash);
+       if ($link eq '') {
+           next;
+       }
+       if (! is_menu_visible($link)) {
+           next;
+       }
+       if ($hash->{'selected'}) {
+           print '<li class="selected">';
+       } else {
+           print '<li>';
+       }
+
+       print <<EOF
+      <a href="$link">$hash->{'caption'}</a>
+  </li>
+EOF
+;
+    }
+
+    print <<EOF
+    </ul>
+  </div>
+EOF
+;    
+
+}
+
+
+sub showsubsubsection($) {
+    my $root = shift;
+    if (!$root) {
+       return;
+    }
+    my $selected = getselected($root);
+    if (! $selected) {
+       return
+    }
+    if (! $selected->{'subMenu'}) {
+       return
+    }
+
+    showsubsection($selected->{'subMenu'}, 'menu-subtop');
+}
+
+
+sub get_helpuri() {
+    my $helpfile = '';
+    if ($URI[0] =~ /.*\/([^\/]+)\.cgi/) {
+       $helpfile = $1;
+    } else {
+       return '';
+    }
+    $helpfile .= '.help.html';
+
+    my $helpuri = '/doc/'.$language.'/'.$helpfile;
+    if (! -e $ENV{'DOCUMENT_ROOT'}.$helpuri) {
+       return '';
+    }
+    return $helpuri;
+}
+
+
+sub openpage {
+    my $title = shift;
+    my $boh = shift;
+    my $extrahead = shift;
+
+    @URI=split ('\?',  $ENV{'REQUEST_URI'} );
+    &readhash("${swroot}/main/settings", \%settings);
+    &genmenu();
+
+    my $h2 = gettitle($menu);
+    my $helpuri = get_helpuri();
+
+    $title = "IPFire - $title";
+    if ($settings{'WINDOWWITHHOSTNAME'} eq 'on') {
+        $title =  "$settings{'HOSTNAME'}.$settings{'DOMAINNAME'} - $title"; 
+    }
+
+    print <<END
+<!DOCTYPE html 
+     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+  <head>
+  <title>$title</title>
+
+    $extrahead
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <link rel="shortcut icon" href="/favicon.ico" />
+    <style type="text/css">\@import url(/include/style.css);</style>
+    <style type="text/css">\@import url(/include/menu.css);</style>
+    <style type="text/css">\@import url(/include/content.css);</style>
+
+    <script language="javascript" type="text/javascript">
+      
+        function swapVisibility(id) {
+            el = document.getElementById(id);
+           if(el.style.display != 'block') {
+               el.style.display = 'block'
+           }
+           else {
+               el.style.display = 'none'
+           }
+        }
+    </script>
+
+  </head>
+  <body>
+<!-- IPFIRE HEADER -->
+
+<div id="main">
+
+<div id="header">
+       <img id="logo-product" src="/images/logo_ipfire.gif">
+   <div id="header-icons">
+END
+;
+
+    if ($helpuri ne '') {
+       print <<END
+           <a href="$helpuri" target="_blank"><img border="0" src="/images/help.gif"></a>
+END
+;
+    } else {
+       print '<img src="/images/help.gif">';
+    }
+
+print <<END
+   </div>
+</div>
+
+END
+;
+
+    &showmenu();
+
+print <<END
+<div id="content">
+  <table width="90%">
+    <tr>
+      <td valign="top">
+END
+;
+       
+    &showsubsection($menu);
+
+    print <<END
+
+      </td>
+        <td width="100%" valign="top">
+        <div id="page-content">
+            <h2>$h2</h2>
+END
+    ;
+    
+    &showsubsubsection($menu);
+
+    eval {
+       require 'ipfire-network.pl';
+       $supported = check_support();
+       warn_unsupported($supported);
+    };
+}
+
+sub closepage () {
+    my $status = &connectionstatus();
+    $uptime = `/usr/bin/uptime`;
+       
+    print <<END
+         <div align="center">
+            <p>
+             <div style="font-size: 9px"><b>Status:</b> $status <b>Uptime:</b>$uptime</div>
+            </p>
+            <p><a href="http://www.ipfire.org">IPFire</a> $version (c)</p>
+          </div>
+       </body>
+       <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0,Transition=12)">
+       <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0,Transition=12)">
+</html>
+END
+;
+}
+
+sub openbigbox
+{
+    my $width = $_[0];
+    my $align = $_[1];
+    my $sideimg = $_[2];
+
+    if ($errormessage) {
+       $bgcolor = "style='background-color: $colourerr;'";
+    } else {
+       $bgcolor = '';
+    }
+}
+
+sub closebigbox
+{
+#      print "</td></tr></table></td></tr></table>\n" 
+}
+
+sub openbox
+{
+       $width = $_[0];
+       $align = $_[1];
+       $caption = $_[2];
+
+       if ($caption) { print "<h3>$caption</h3>\n"; } else { print "&nbsp;"; }
+       
+       print "<table class=\"list\"><tr><td align=\"$align\">\n";
+}
+
+sub closebox
+{
+       print "</td></tr></table><br><br>";
+}
+
+sub writehash
+{
+       my $filename = $_[0];
+       my $hash = $_[1];
+       
+       # write cgi vars to the file.
+       open(FILE, ">${filename}") or die "Unable to write file $filename";
+       flock FILE, 2;
+       foreach $var (keys %$hash) 
+       {
+               $val = $hash->{$var};
+               # Darren Critchley Jan 17, 2003 added the following because when submitting with a graphic, the x and y
+               # location of the mouse are submitted as well, this was being written to the settings file causing
+               # some serious grief! This skips the variable.x and variable.y
+               if (!($var =~ /(.x|.y)$/)) {
+                       if ($val =~ / /) {
+                               $val = "\'$val\'"; }
+                       if (!($var =~ /^ACTION/)) {
+                               print FILE "${var}=${val}\n"; }
+               }
+       }
+       close FILE;
+}
+
+sub readhash
+{
+       my $filename = $_[0];
+       my $hash = $_[1];
+       my ($var, $val);
+
+       open(FILE, $filename) or die "Unable to read file $filename";
+       
+       while (<FILE>)
+       {
+               chop;
+               ($var, $val) = split /=/, $_, 2;
+               if ($var)
+               {
+                       $val =~ s/^\'//g;
+                       $val =~ s/\'$//g;
+
+                       # Untaint variables read from hash
+                       $var =~ /([A-Za-z0-9_-]*)/;        $var = $1;
+                       $val =~ /([\w\W]*)/; $val = $1;
+                       $hash->{$var} = $val;
+               }
+       }
+       close FILE;
+}
+
+sub getcgihash {
+       my ($hash, $params) = @_;
+       my $cgi = CGI->new ();
+       $hash->{'__CGI__'} = $cgi;
+       return if ($ENV{'REQUEST_METHOD'} ne 'POST');
+       if (!$params->{'wantfile'}) {
+               $CGI::DISABLE_UPLOADS = 1;
+               $CGI::POST_MAX        = 512 * 1024;
+       } else {
+               $CGI::POST_MAX = 10 * 1024 * 1024;
+       }
+
+       $cgi->referer() =~ m/^https?\:\/\/([^\/]+)/;
+       my $referer = $1;
+       $cgi->url() =~ m/^https?\:\/\/([^\/]+)/;
+       my $servername = $1;
+       return if ($referer ne $servername);
+
+       ### Modified for getting multi-vars, split by |
+       %temp = $cgi->Vars();
+        foreach my $key (keys %temp) {
+               $hash->{$key} = $temp{$key};
+               $hash->{$key} =~ s/\0/|/g;
+               $hash->{$key} =~ s/^\s*(.*?)\s*$/$1/;
+        }
+
+       if (($params->{'wantfile'})&&($params->{'filevar'})) {
+               $hash->{$params->{'filevar'}} = $cgi->upload
+                                               ($params->{'filevar'});
+       }
+       return;
+}
+
+sub log
+{
+       my $logmessage = $_[0];
+       $logmessage =~ /([\w\W]*)/;
+       $logmessage = $1;
+       system('/usr/bin/logger', '-t', 'ipfire', $logmessage);
+}
+
+sub age
+{
+       my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
+               $atime, $mtime, $ctime, $blksize, $blocks) = stat $_[0];
+       my $now = time;
+
+       my $totalsecs = $now - $mtime;
+       my $days = int($totalsecs / 86400);
+       my $totalhours = int($totalsecs / 3600);
+       my $hours = $totalhours % 24;
+       my $totalmins = int($totalsecs / 60);
+       my $mins = $totalmins % 60;
+       my $secs = $totalsecs % 60;
+
+       return "${days}d ${hours}h ${mins}m ${secs}s";
+}
+
+sub validip
+{
+       my $ip = $_[0];
+
+       if (!($ip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/)) {
+               return 0; }
+       else 
+       {
+               @octets = ($1, $2, $3, $4);
+               foreach $_ (@octets)
+               {
+                       if (/^0./) {
+                               return 0; }
+                       if ($_ < 0 || $_ > 255) {
+                               return 0; }
+               }
+               return 1;
+       }
+}
+
+sub validmask
+{
+       my $mask = $_[0];
+
+       # secord part an ip?
+       if (&validip($mask)) {
+               return 1; }
+       # second part a number?
+       if (/^0/) {
+               return 0; }
+       if (!($mask =~ /^\d+$/)) {
+               return 0; }
+       if ($mask >= 0 && $mask <= 32) {
+               return 1; }
+       return 0;
+}
+
+sub validipormask
+{
+       my $ipormask = $_[0];
+
+       # see if it is a IP only.
+       if (&validip($ipormask)) {
+               return 1; }
+       # split it into number and mask.
+       if (!($ipormask =~ /^(.*?)\/(.*?)$/)) {
+               return 0; }
+       $ip = $1;
+       $mask = $2;
+       # first part not a ip?
+       if (!(&validip($ip))) {
+               return 0; }
+       return &validmask($mask);
+}
+
+sub validipandmask
+{
+       my $ipandmask = $_[0];
+
+       # split it into number and mask.
+       if (!($ipandmask =~ /^(.*?)\/(.*?)$/)) {
+               return 0; }
+       $ip = $1;
+       $mask = $2;
+       # first part not a ip?
+       if (!(&validip($ip))) {
+               return 0; }
+       return &validmask($mask);
+}
+
+sub validport
+{
+       $_ = $_[0];
+
+       if (!/^\d+$/) {
+               return 0; }
+       if (/^0./) {
+               return 0; }
+       if ($_ >= 1 && $_ <= 65535) {
+               return 1; }
+       return 0;
+}
+
+sub validmac
+{
+       my $checkmac = $_[0];
+       my $ot = '[0-9a-f]{2}'; # 2 Hex digits (one octet)
+       if ($checkmac !~ /^$ot:$ot:$ot:$ot:$ot:$ot$/i)
+       {
+               return 0;
+       }
+       return 1;
+}
+
+sub validhostname
+{
+       # Checks a hostname against RFC1035
+        my $hostname = $_[0];
+
+       # Each part should be at least two characters in length
+       # but no more than 63 characters
+       if (length ($hostname) < 2 || length ($hostname) > 63) {
+               return 0;}
+       # Only valid characters are a-z, A-Z, 0-9 and -
+       if ($hostname !~ /^[a-zA-Z0-9-]*$/) {
+               return 0;}
+       # First character can only be a letter or a digit
+       if (substr ($hostname, 0, 1) !~ /^[a-zA-Z0-9]*$/) {
+               return 0;}
+       # Last character can only be a letter or a digit
+       if (substr ($hostname, -1, 1) !~ /^[a-zA-Z0-9]*$/) {
+               return 0;}
+       return 1;
+}
+
+sub validdomainname
+{
+       # Checks a domain name against RFC1035
+        my $domainname = $_[0];
+       my @parts = split (/\./, $domainname);  # Split hostname at the '.'
+
+       foreach $part (@parts) {
+               # Each part should be at least two characters in length
+               # but no more than 63 characters
+               if (length ($part) < 2 || length ($part) > 63) {
+                       return 0;}
+               # Only valid characters are a-z, A-Z, 0-9 and -
+               if ($part !~ /^[a-zA-Z0-9-]*$/) {
+                       return 0;}
+               # First character can only be a letter or a digit
+               if (substr ($part, 0, 1) !~ /^[a-zA-Z0-9]*$/) {
+                       return 0;}
+               # Last character can only be a letter or a digit
+               if (substr ($part, -1, 1) !~ /^[a-zA-Z0-9]*$/) {
+                       return 0;}
+       }
+       return 1;
+}
+
+sub validfqdn
+{
+       # Checks a fully qualified domain name against RFC1035
+        my $fqdn = $_[0];
+       my @parts = split (/\./, $fqdn);        # Split hostname at the '.'
+       if (scalar(@parts) < 2) {               # At least two parts should
+               return 0;}                      # exist in a FQDN
+                                               # (i.e. hostname.domain)
+       foreach $part (@parts) {
+               # Each part should be at least two characters in length
+               # but no more than 63 characters
+               if (length ($part) < 2 || length ($part) > 63) {
+                       return 0;}
+               # Only valid characters are a-z, A-Z, 0-9 and -
+               if ($part !~ /^[a-zA-Z0-9-]*$/) {
+                       return 0;}
+               # First character can only be a letter or a digit
+               if (substr ($part, 0, 1) !~ /^[a-zA-Z0-9]*$/) {
+                       return 0;}
+               # Last character can only be a letter or a digit
+               if (substr ($part, -1, 1) !~ /^[a-zA-Z0-9]*$/) {
+                       return 0;}
+       }
+       return 1;
+}
+
+sub validportrange # used to check a port range 
+{
+       my $port = $_[0]; # port values
+       $port =~ tr/-/:/; # replace all - with colons just in case someone used -
+       my $srcdst = $_[1]; # is it a source or destination port
+
+       if (!($port =~ /^(\d+)\:(\d+)$/)) {
+       
+               if (!(&validport($port))) {      
+                       if ($srcdst eq 'src'){
+                               return $tr{'source port numbers'};
+                       } else  {
+                               return $tr{'destination port numbers'};
+                       } 
+               }
+       }
+       else 
+       {
+               @ports = ($1, $2);
+               if ($1 >= $2){
+                       if ($srcdst eq 'src'){
+                               return $tr{'bad source range'};
+                       } else  {
+                               return $tr{'bad destination range'};
+                       } 
+               }
+               foreach $_ (@ports)
+               {
+                       if (!(&validport($_))) {
+                               if ($srcdst eq 'src'){
+                                       return $tr{'source port numbers'}; 
+                               } else  {
+                                       return $tr{'destination port numbers'};
+                               } 
+                       }
+               }
+               return;
+       }
+}
+
+# Test if IP is within a subnet
+# Call: IpInSubnet (Addr, Subnet, Subnet Mask)
+#       Subnet can be an IP of the subnet: 10.0.0.0 or 10.0.0.1
+#       Everything in dottted notation
+# Return: TRUE/FALSE
+sub IpInSubnet
+{
+    $ip = unpack('N', inet_aton(shift));
+    $start = unpack('N', inet_aton(shift));
+    $mask  = unpack('N', inet_aton(shift));
+    $start &= $mask;  # base of subnet...
+    $end   = $start + ~$mask;
+    return (($ip >= $start) && ($ip <= $end));
+}
+
+sub validemail {
+    my $mail = shift;
+    return 0 if ( $mail !~ /^[0-9a-zA-Z\.\-\_]+\@[0-9a-zA-Z\.\-]+$/ );
+    return 0 if ( $mail =~ /^[^0-9a-zA-Z]|[^0-9a-zA-Z]$/);
+    return 0 if ( $mail !~ /([0-9a-zA-Z]{1})\@./ );
+    return 0 if ( $mail !~ /.\@([0-9a-zA-Z]{1})/ );
+    return 0 if ( $mail =~ /.\.\-.|.\-\..|.\.\..|.\-\-./g );
+    return 0 if ( $mail =~ /.\.\_.|.\-\_.|.\_\..|.\_\-.|.\_\_./g );
+    return 0 if ( $mail !~ /\.([a-zA-Z]{2,3})$/ );
+    return 1;
+}
+
+sub readhasharray {
+    my ($filename, $hash) = @_;
+
+    open(FILE, $filename) or die "Unable to read file $filename";
+
+    while (<FILE>) {
+       my ($key, $rest, @temp);
+       chomp;
+       ($key, $rest) = split (/,/, $_, 2);
+       if ($key =~ /^[0-9]+$/ && $rest) {
+           @temp = split (/,/, $rest);
+           $hash->{$key} = \@temp;
+        }
+    }
+    close FILE;
+    return;
+}
+
+sub writehasharray {
+    my ($filename, $hash) = @_;
+    my ($key, @temp);
+
+    open(FILE, ">$filename") or die "Unable to write to file $filename";
+
+    foreach $key (keys %$hash) {
+       if ( $hash->{$key} ) {
+           print FILE "$key";
+           foreach $i (0 .. $#{$hash->{$key}}) {
+               print FILE ",$hash->{$key}[$i]";
+           }
+       }
+       print FILE "\n";
+    }
+    close FILE;
+    return;
+}
+
+sub findhasharraykey {
+    foreach my $i (1 .. 1000000) {
+       if ( ! exists $_[0]{$i}) {
+            return $i;
+       }
+    }
+}
+
+sub cleanhtml
+{
+       my $outstring =$_[0];
+       $outstring =~ tr/,/ / if not defined $_[1] or $_[1] ne 'y';
+       $outstring =~ s/&/&amp;/g;
+       $outstring =~ s/\'/&#039;/g;
+       $outstring =~ s/\"/&quot;/g;
+       $outstring =~ s/</&lt;/g;
+       $outstring =~ s/>/&gt;/g;
+       return $outstring;
+}
+sub connectionstatus
+{
+        my $status;
+        opendir UPLINKS, "/var/ipfire/uplinks" or die "Cannot read uplinks: $!";
+                foreach my $uplink (sort grep !/^\./, readdir UPLINKS) {
+                    if ( -f "${swroot}/uplinks/${uplink}/active") {
+                        if ( ! $status ) {
+                                $timestr = &age("${swroot}/uplinks/${uplink}/active");
+                                $status = "$tr{'connected'}: $uplink (<span class='ipcop_StatusBigRed'>$timestr</span>) ";
+                        } else {
+                                $timestr = &age("${swroot}/uplinks/${uplink}/active");
+                                $status = "$status , $uplink (<span class='ipcop_StatusBigRed'>$timestr</span>) ";
+                        }
+                    } elsif ( -f "${swroot}/uplinks/${uplink}/connecting") {
+                        if ( ! $status ) {
+                                $status = "$tr{'connecting'} $uplink";
+                        } else {
+                                $status = "$status , $tr{'connecting'} $uplink (<span class='ipcop_StatusBigRed'>$timestr</span>) ";
+                        }
+                    }
+                    $lines++;
+                }
+                closedir(UPLINKS);
+                if ( ! $status ) {
+                        $status = "$tr{'idle'}";
+                }
+                $connstate = "<span class='ipcop_StatusBig'>$status</span>";
+    return $connstate;
+}
+
+sub srtarray 
+# Darren Critchley - darrenc@telus.net - (c) 2003
+# &srtarray(SortOrder, AlphaNumeric, SortDirection, ArrayToBeSorted)
+# This subroutine will take the following parameters:
+#   ColumnNumber = the column which you want to sort on, starts at 1
+#   AlphaNumberic = a or n (lowercase) defines whether the sort should be alpha or numberic
+#   SortDirection = asc or dsc (lowercase) Ascending or Descending sort
+#   ArrayToBeSorted = the array that wants sorting
+#
+#   Returns an array that is sorted to your specs
+#
+#   If SortOrder is greater than the elements in array, then it defaults to the first element
+# 
+{
+       my ($colno, $alpnum, $srtdir, @tobesorted) = @_;
+       my @tmparray;
+       my @srtedarray;
+       my $line;
+       my $newline;
+       my $ttlitems = scalar @tobesorted; # want to know the number of rows in the passed array
+       if ($ttlitems < 1){ # if no items, don't waste our time lets leave
+               return (@tobesorted);
+       }
+       my @tmp = split(/\,/,$tobesorted[0]);
+       $ttlitems = scalar @tmp; # this should be the number of elements in each row of the passed in array
+
+       # Darren Critchley - validate parameters
+       if ($colno > $ttlitems){$colno = '1';}
+       $colno--; # remove one from colno to deal with arrays starting at 0
+       if($colno < 0){$colno = '0';}
+       if ($alpnum ne '') { $alpnum = lc($alpnum); } else { $alpnum = 'a'; }
+       if ($srtdir ne '') { $srtdir = lc($srtdir); } else { $srtdir = 'src'; }
+
+       foreach $line (@tobesorted)
+       {
+               chomp($line);
+               if ($line ne '') {
+                       my @temp = split(/\,/,$line);
+                       # Darren Critchley - juggle the fields so that the one we want to sort on is first
+                       my $tmpholder = $temp[0];
+                       $temp[0] = $temp[$colno];
+                       $temp[$colno] = $tmpholder;
+                       $newline = "";
+                       for ($ctr=0; $ctr < $ttlitems ; $ctr++) {
+                               $newline=$newline . $temp[$ctr] . ",";
+                       }
+                       chop($newline);
+                       push(@tmparray,$newline);
+               }
+       }
+       if ($alpnum eq 'n') {
+               @tmparray = sort {$a <=> $b} @tmparray;
+       } else {
+               @tmparray = (sort @tmparray);
+       }
+       foreach $line (@tmparray)
+       {
+               chomp($line);
+               if ($line ne '') {
+                       my @temp = split(/\,/,$line);
+                       my $tmpholder = $temp[0];
+                       $temp[0] = $temp[$colno];
+                       $temp[$colno] = $tmpholder;
+                       $newline = "";
+                       for ($ctr=0; $ctr < $ttlitems ; $ctr++){
+                               $newline=$newline . $temp[$ctr] . ",";
+                       }
+                       chop($newline);
+                       push(@srtedarray,$newline);
+               }
+       }
+
+       if ($srtdir eq 'dsc') {
+               @tmparray = reverse(@srtedarray);
+               return (@tmparray);
+       } else {
+               return (@srtedarray);
+       }
+}
+
+sub speedtouchversion
+{
+       if (-f "/proc/bus/usb/devices")
+       {
+               $speedtouch=`/bin/cat /proc/bus/usb/devices | /bin/grep 'Vendor=06b9 ProdID=4061' | /usr/bin/cut -d ' ' -f6`;
+               if ($speedtouch eq '') {
+                       $speedtouch= $tr{'connect the modem'};
+               }
+       } else {
+               $speedtouch='USB '.$tr{'not running'};
+       }
+       return $speedtouch
+}
+
+sub CheckSortOrder {
+#Sorting of allocated leases
+    if ($ENV{'QUERY_STRING'} =~ /^IPADDR|^ETHER|^HOSTNAME|^ENDTIME/ ) {
+       my $newsort=$ENV{'QUERY_STRING'};
+        &readhash("${swroot}/dhcp/settings", \%dhcpsettings);
+        $act=$dhcpsettings{'SORT_LEASELIST'};
+        #Reverse actual ?
+        if ($act =~ $newsort) {
+            if ($act !~ 'Rev') {$Rev='Rev'};
+            $newsort.=$Rev
+        };
+
+        $dhcpsettings{'SORT_LEASELIST'}=$newsort;
+       &writehash("${swroot}/dhcp/settings", \%dhcpsettings);
+        $dhcpsettings{'ACTION'} = 'SORT';  # avoid the next test "First lauch"
+    }
+
+}
+
+sub PrintActualLeases
+{
+    &openbox('100%', 'left', $tr{'current dynamic leases'});
+    print <<END
+<table width='100%'>
+<tr>
+<td width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IPADDR'><b>$tr{'ip address'}</b></a></td>
+<td width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ETHER'><b>$tr{'mac address'}</b></a></td>
+<td width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOSTNAME'><b>$tr{'hostname'}</b></a></td>
+<td width='30%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ENDTIME'><b>$tr{'lease expires'} (local time d/m/y)</b></a></td>
+</tr>
+END
+    ;
+
+    open(LEASES,"/var/lib/dhcp/dhcpd.leases") or die "Can't open dhcpd.leases";
+    while ($line = <LEASES>) {
+       next if( $line =~ /^\s*#/ );
+       chomp($line);
+       @temp = split (' ', $line);
+
+       if ($line =~ /^\s*lease/) {
+           $ip = $temp[1];
+           #All field are not necessarily read. Clear everything
+           $endtime = 0;
+           $ether = "";
+           $hostname = "";
+       }
+
+       if ($line =~ /^\s*ends/) {
+           $line =~ /(\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/;
+           $endtime = timegm($6, $5, $4, $3, $2 - 1, $1 - 1900);
+       }
+
+       if ($line =~ /^\s*hardware ethernet/) {
+           $ether = $temp[2];
+           $ether =~ s/;//g;
+       }
+
+       if ($line =~ /^\s*client-hostname/) {
+           $hostname = "$temp[1] $temp[2] $temp[3]";
+           $hostname =~ s/;//g;
+           $hostname =~ s/\"//g;
+       }
+
+       if ($line eq "}") {
+           @record = ('IPADDR',$ip,'ENDTIME',$endtime,'ETHER',$ether,'HOSTNAME',$hostname);
+           $record = {};                                       # create a reference to empty hash
+           %{$record} = @record;                               # populate that hash with @record
+           $entries{$record->{'IPADDR'}} = $record;    # add this to a hash of hashes
+       }
+    }
+    close(LEASES);
+
+    my $id = 0;
+    foreach my $key (sort leasesort keys %entries) {
+
+       my $hostname = &cleanhtml($entries{$key}->{HOSTNAME},"y");
+
+       if ($id % 2) {
+           print "<tr bgcolor='$table1colour'>"; 
+       }
+       else {
+           print "<tr bgcolor='$table2colour'>"; 
+       }
+
+       print <<END
+<td align='center'>$entries{$key}->{IPADDR}</td>
+<td align='center'>$entries{$key}->{ETHER}</td>
+<td align='center'>&nbsp;$hostname </td>
+<td align='center'>
+END
+       ;
+
+       ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dst) = localtime ($entries{$key}->{ENDTIME});
+       $enddate = sprintf ("%02d/%02d/%d %02d:%02d:%02d",$mday,$mon+1,$year+1900,$hour,$min,$sec);
+
+       if ($entries{$key}->{ENDTIME} < time() ){
+           print "<strike>$enddate</strike>";
+       } else {
+           print "$enddate";
+       }
+       print "</td></tr>";
+       $id++;
+    }
+
+    print "</table>";
+    &closebox();
+}
+
+
+# This sub is used during display of actives leases
+sub leasesort {
+    if (rindex ($dhcpsettings{'SORT_LEASELIST'},'Rev') != -1)
+    {
+        $qs=substr ($dhcpsettings{'SORT_LEASELIST'},0,length($dhcpsettings{'SORT_LEASELIST'})-3);
+        if ($qs eq 'IPADDR') {
+            @a = split(/\./,$entries{$a}->{$qs});
+            @b = split(/\./,$entries{$b}->{$qs});
+            ($b[0]<=>$a[0]) ||
+            ($b[1]<=>$a[1]) ||
+            ($b[2]<=>$a[2]) ||
+            ($b[3]<=>$a[3]);
+        }else {
+            $entries{$b}->{$qs} cmp $entries{$a}->{$qs};
+        }
+    }
+    else #not reverse
+    {
+        $qs=$dhcpsettings{'SORT_LEASELIST'};
+        if ($qs eq 'IPADDR') {
+           @a = split(/\./,$entries{$a}->{$qs});
+           @b = split(/\./,$entries{$b}->{$qs});
+           ($a[0]<=>$b[0]) ||
+           ($a[1]<=>$b[1]) ||
+           ($a[2]<=>$b[2]) ||
+           ($a[3]<=>$b[3]);
+       }else {
+           $entries{$a}->{$qs} cmp $entries{$b}->{$qs};
+       }
+    }
+}
+
+sub get_uplinks() {
+    my @uplinks = ();
+    opendir(DIR, "${swroot}/uplinks/") || return \@uplinks;
+    foreach my $dir (readdir(DIR)) {
+       next if ($dir =~ /^\./);
+       next if (-f "${swroot}/uplinks/$dir");
+       push(@uplinks, $dir);
+    }
+    closedir(DIR);
+    return \@uplinks;
+}
+
+sub get_iface($) {
+    my $filename = shift;
+    chomp($filename);
+    open (F, $filename) || return "";
+    my $iface = <F>;
+    close(F);
+    chomp($iface);
+    return $iface;
+}
+
+sub get_red_ifaces_by_type($) {
+    my $type=shift;
+    my @gottypeiface = ();
+    my @gottypeuplink = ();
+    my @gottype = ();
+
+    my $ref=get_uplinks();
+    my @uplinks=@$ref;
+    my %set = ();
+    foreach my $link (@uplinks) {
+       eval {
+           &readhash("${swroot}/uplinks/$link/settings", \%set);
+       };
+       push(@gottype, $link);
+
+       my $iface = $set{'RED_DEV'};
+       if (!$iface) {
+           $iface = get_iface("${swroot}/uplinks/$link/interface");
+       }
+       next if (!$iface);
+
+       if ($set{'RED_TYPE'} eq $type) {
+           push(@gottypeiface, $iface);
+           push(@gottypeuplink, $link);
+       }
+    }
+    return (\@gottypeiface, \@gottypeuplink, \@gottype);
+}
+
+sub get_red_ifaces() {
+    return `cat ${swroot}/uplinks/*/interface 2>/dev/null`;
+}
+
+sub get_zone_devices($) {
+    my $bridge = shift;
+    my @ifaces = ();
+    open (FILE, "${swroot}/ethernet/$bridge") || return "";
+    foreach my $line (<FILE>) {
+       chomp($line);
+       next if (!$line);
+       push(@ifaces, $line);
+    }
+    close(FILE);
+    return \@ifaces;
+}
diff --git a/config/etc/aliases b/config/etc/aliases
new file mode 100644 (file)
index 0000000..6363e24
--- /dev/null
@@ -0,0 +1,3 @@
+# /etc/aliases
+postmaster: root
+
index 6ff6506..495d4a9 100644 (file)
@@ -18,3 +18,6 @@ local7.*                                              /var/log/boot.log
 
 # Optionally log to a remote host
 #*.*                                                   @hostname.domain
+
+# Postfix logs
+mail.*                                                 /var/log/mail
index 11e5438..801672c 100644 (file)
-##\r
-## httpd.conf -- Apache HTTP server configuration file\r
-##\r
-## $Id: httpd.conf,v 1.15.2.7 2005/04/16 11:40:15 rkerr Exp $\r
-##\r
-ServerType standalone\r
-ServerRoot /etc/httpd\r
-\r
-LockFile /var/lock/httpd.lock\r
-PidFile /var/run/httpd.pid\r
-ScoreBoardFile /var/run/httpd.scoreboard\r
-Timeout 900\r
-KeepAlive On\r
-MaxKeepAliveRequests 100\r
-KeepAliveTimeout 15\r
-MinSpareServers 1\r
-MaxSpareServers 2\r
-StartServers 2\r
-MaxClients 10\r
-MaxRequestsPerChild 100\r
-Port 81\r
-Listen 81\r
-Listen 444\r
-User nobody\r
-Group nobody\r
-ServerAdmin root@localhost\r
-ServerTokens Prod\r
-DocumentRoot /home/httpd/html\r
-# Limit track/trace requests\r
-RewriteEngine on\r
-RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)\r
-RewriteRule .* - [F]\r
-\r
-<Directory />\r
-    Options None\r
-    AllowOverride None\r
-</Directory>\r
-<Directory /home/httpd/html>\r
-    Options ExecCGI\r
-    AllowOverride None\r
-    Order allow,deny\r
-    Allow from all\r
-</Directory>\r
-<DirectoryMatch "/home/httpd/html/(graphs|sgraph)">\r
-    AuthName "Restricted"\r
-    AuthType Basic\r
-    AuthUserFile CONFIG_ROOT/auth/users\r
-    require user admin\r
-</DirectoryMatch>\r
-ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/\r
-<Directory /home/httpd/cgi-bin>\r
-    AllowOverride None\r
-    Options None\r
-    AuthName "Restricted"\r
-    AuthType Basic\r
-    AuthUserFile CONFIG_ROOT/auth/users\r
-    Require user admin\r
-    <Files index.cgi>\r
-        Satisfy Any\r
-        Allow from All\r
-    </Files>\r
-    <Files credits.cgi>\r
-        Satisfy Any\r
-        Allow from All\r
-    </Files>\r
-    <Files dial.cgi>\r
-        Require user admin dial\r
-    </Files>\r
-</Directory>\r
-<IfModule mod_dir.c>\r
-    DirectoryIndex index.html index.htm index.shtml index.cgi\r
-</IfModule>\r
-AccessFileName .htaccess\r
-<Files ~ "^\.ht">\r
-    Order allow,deny\r
-    Deny from all\r
-</Files>\r
-<IfModule mod_mime.c>\r
-    TypesConfig /etc/mime.types\r
-</IfModule>\r
-DefaultType text/plain\r
-\r
-HostnameLookups Off\r
-ErrorLog /var/log/httpd/error_log\r
-LogLevel warn\r
-LogFormat "%h %l %u %t \"%r\" %>s %b" common\r
-CustomLog /var/log/httpd/access_log common\r
-ServerSignature Off\r
-AddHandler cgi-script .cgi\r
-<IfModule mod_setenvif.c>\r
-    BrowserMatch "Mozilla/2" nokeepalive\r
-    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0\r
-    BrowserMatch "RealPlayer 4\.0" force-response-1.0\r
-    BrowserMatch "Java/1\.0" force-response-1.0\r
-    BrowserMatch "JDK/1\.0" force-response-1.0\r
-</IfModule>\r
-\r
-###\r
-### SSL Configuration\r
-###\r
-AddType application/x-x509-ca-cert .crt\r
-AddType application/x-pkcs7-crl    .crl\r
-\r
-SSLPassPhraseDialog  builtin\r
-SSLSessionCache         dbm:/var/log/httpd/ssl_scache\r
-SSLSessionCacheTimeout  900\r
-SSLMutex  file:/var/log/httpd/ssl_mutex\r
-SSLRandomSeed startup builtin\r
-SSLRandomSeed connect builtin\r
-SSLLog      /var/log/httpd/ssl_engine_log\r
-SSLLogLevel info\r
-\r
-<VirtualHost _default_:444>\r
-    RewriteEngine on\r
-    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)\r
-    RewriteRule .* - [F]\r
-    DocumentRoot /home/httpd/html\r
-    ServerAdmin root@localhost\r
-    ErrorLog /var/log/httpd/error_log\r
-    TransferLog /var/log/httpd/access_log\r
-    SSLEngine on\r
-    SSLProtocol all -SSLv2\r
-    SSLCipherSuite ALL:!ADH:!EXPORT56:!eNULL:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP\r
-    SSLCertificateFile /etc/httpd/server.crt\r
-    SSLCertificateKeyFile /etc/httpd/server.key\r
-    <Files ~ "\.(cgi|shtml?)$">\r
-       SSLOptions +StdEnvVars\r
-    </Files>\r
-    <Directory /home/httpd/cgi-bin>\r
-       SSLOptions +StdEnvVars\r
-    </Directory>\r
-    SetEnv HOME /home/nobody\r
-    SetEnvIf User-Agent ".*MSIE.*" \\r
-       nokeepalive ssl-unclean-shutdown \\r
-       downgrade-1.0 force-response-1.0\r
-    CustomLog /var/log/httpd/ssl_request_log \\r
-       "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"\r
-</VirtualHost>\r
-\r
-<Directory /home/httpd/html/backup>\r
-    Options None\r
-    AllowOverride None\r
-    AuthName "Restricted"\r
-    AuthType Basic\r
-    AuthUserFile /var/ipcop/auth/users\r
-    require user admin\r
-</Directory>\r
-\r
-include /etc/httpd/conf/hostname.conf\r
+##
+## httpd.conf -- Apache HTTP server configuration file
+##
+## $Id: httpd.conf,v 1.15.2.7 2005/04/16 11:40:15 rkerr Exp $
+##
+ServerType standalone
+ServerRoot /etc/httpd
+
+LockFile /var/lock/httpd.lock
+PidFile /var/run/httpd.pid
+ScoreBoardFile /var/run/httpd.scoreboard
+Timeout 900
+KeepAlive On
+MaxKeepAliveRequests 100
+KeepAliveTimeout 15
+MinSpareServers 1
+MaxSpareServers 2
+StartServers 2
+MaxClients 10
+MaxRequestsPerChild 100
+Port 81
+Listen 81
+Listen 444
+User nobody
+Group nobody
+ServerAdmin root@localhost
+ServerTokens Prod
+DocumentRoot /home/httpd/html
+# Limit track/trace requests
+RewriteEngine on
+RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
+RewriteRule .* - [F]
+
+<Directory />
+    Options None
+    AllowOverride None
+</Directory>
+<Directory /home/httpd/html>
+    Options ExecCGI
+    AllowOverride None
+    Order allow,deny
+    Allow from all
+</Directory>
+<DirectoryMatch "/home/httpd/html/(graphs|sgraph)">
+    AuthName "Restricted"
+    AuthType Basic
+    AuthUserFile CONFIG_ROOT/auth/users
+    require user admin
+</DirectoryMatch>
+ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
+<Directory /home/httpd/cgi-bin>
+    AllowOverride None
+    Options None
+    AuthName "Restricted"
+    AuthType Basic
+    AuthUserFile /var/ipfire/auth/users
+    Require user admin
+#    <Files index.cgi>
+#        Satisfy Any
+#        Allow from All
+#    </Files>
+    <Files credits.cgi>
+        Satisfy Any
+        Allow from All
+    </Files>
+    <Files dial.cgi>
+        Require user admin dial
+    </Files>
+</Directory>
+<IfModule mod_dir.c>
+    DirectoryIndex index.html index.htm index.shtml index.cgi
+</IfModule>
+AccessFileName .htaccess
+<Files ~ "^\.ht">
+    Order allow,deny
+    Deny from all
+</Files>
+<IfModule mod_mime.c>
+    TypesConfig /etc/mime.types
+</IfModule>
+DefaultType text/plain
+
+HostnameLookups Off
+ErrorLog /var/log/httpd/error_log
+LogLevel warn
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+CustomLog /var/log/httpd/access_log common
+ServerSignature Off
+AddHandler cgi-script .cgi
+<IfModule mod_setenvif.c>
+    BrowserMatch "Mozilla/2" nokeepalive
+    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
+    BrowserMatch "RealPlayer 4\.0" force-response-1.0
+    BrowserMatch "Java/1\.0" force-response-1.0
+    BrowserMatch "JDK/1\.0" force-response-1.0
+</IfModule>
+
+###
+### SSL Configuration
+###
+AddType application/x-x509-ca-cert .crt
+AddType application/x-pkcs7-crl    .crl
+
+SSLPassPhraseDialog  builtin
+SSLSessionCache         dbm:/var/log/httpd/ssl_scache
+SSLSessionCacheTimeout  900
+SSLMutex  file:/var/log/httpd/ssl_mutex
+SSLRandomSeed startup builtin
+SSLRandomSeed connect builtin
+SSLLog      /var/log/httpd/ssl_engine_log
+SSLLogLevel info
+
+<VirtualHost _default_:444>
+    RewriteEngine on
+    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
+    RewriteRule .* - [F]
+    DocumentRoot /home/httpd/html
+    ServerAdmin root@localhost
+    ErrorLog /var/log/httpd/error_log
+    TransferLog /var/log/httpd/access_log
+    SSLEngine on
+    SSLProtocol all -SSLv2
+    SSLCipherSuite ALL:!ADH:!EXPORT56:!eNULL:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP
+    SSLCertificateFile /etc/httpd/server.crt
+    SSLCertificateKeyFile /etc/httpd/server.key
+    <Files ~ "\.(cgi|shtml?)$">
+       SSLOptions +StdEnvVars
+    </Files>
+    <Directory /home/httpd/cgi-bin>
+       SSLOptions +StdEnvVars
+    </Directory>
+    SetEnv HOME /home/nobody
+    SetEnvIf User-Agent ".*MSIE.*" \
+       nokeepalive ssl-unclean-shutdown \
+       downgrade-1.0 force-response-1.0
+    CustomLog /var/log/httpd/ssl_request_log \
+       "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
+</VirtualHost>
+
+<Directory /home/httpd/html/backup>
+    Options None
+    AllowOverride None
+    AuthName "Restricted"
+    AuthType Basic
+    AuthUserFile /var/ipfire/auth/users
+    require user admin
+</Directory>
+
+include /etc/httpd/conf/hostname.conf
index ce96d56..88b4191 100644 (file)
@@ -90,6 +90,7 @@
 * libpcap-0.8.3
 * libpng-1.2.8
 * libsafe-2.0-16
+* libsafe_2.0-16
 * libtool-1.5.6
 * libusb-0.1.7
 * libwww-perl-5.803
index 8a83de9..7811e57 100644 (file)
@@ -28,7 +28,7 @@ require "${General::swroot}/header.pl";
 &Header::openbox('100%', 'left', $Lang::tr{'credits'});
 
 print <<END
-<br /><center><b>Visit us on <a href='http://www.ipcop.org/'>http://www.ipcop.org/</a></b></center>
+<br /><center><b>Besuchen sie uns auf <a href='http://www.ipfire.org/'>http://www.ipfire.org/</a></b></center>
 
 <p><b>Main Credits</b><br />
 Project Member - Mark Wormgoor
diff --git a/html/cgi-bin/pakfire.cgi b/html/cgi-bin/pakfire.cgi
new file mode 100644 (file)
index 0000000..7b4722b
--- /dev/null
@@ -0,0 +1,103 @@
+#!/usr/bin/perl
+#
+# IPCop CGIs
+#
+# This file is part of the IPCop Project
+# 
+# This code is distributed under the terms of the GPL
+#
+# (c) Eric Oberlander June 2002
+#
+# (c) Darren Critchley June 2003 - added real time clock setting, etc
+#
+
+use strict;
+
+# enable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
+
+require 'CONFIG_ROOT/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+
+my %pakfiresettings=();
+my $errormessage = '';
+
+&Header::showhttpheaders();
+
+$pakfiresettings{'ACTION'} = '';
+$pakfiresettings{'VALID'} = '';
+
+$pakfiresettings{'INSTALLED'} = '';
+$pakfiresettings{'AVAIL'} = '';
+$pakfiresettings{'AUTOUPD'} = '';
+
+&Header::getcgihash(\%pakfiresettings);
+
+if ($pakfiresettings{'ACTION'} eq $Lang::tr{'save'})
+{
+
+}
+
+&General::readhash("${General::swroot}/pakfire/settings", \%pakfiresettings);
+
+
+my %selected=();
+my %checked=();
+
+$checked{'AUTOUPD'}{'off'} = '';
+$checked{'AUTOUPD'}{'on'} = '';
+$checked{'AUTOUPD'}{$pakfiresettings{'AUTOUPD'}} = "checked='checked'";
+
+&Header::openpage($Lang::tr{'pakfire configuration'}, 1, $refresh);
+
+&Header::openbigbox('100%', 'left', '', $errormessage);
+
+# DPC move error message to top so it is seen!
+if ($errormessage) {
+       &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
+       print "<font class='base'>$errormessage&nbsp;</font>\n";
+       &Header::closebox();
+       }
+
+print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";
+
+&Header::openbox('100%', 'left', $Lang::tr{'network pakfire'});
+print <<END
+<table width='100%'>
+<tr>
+       <td><input type='checkbox' name='ENABLENTP' $checked{'ENABLENTP'}{'on'} /></td>
+       <td width='100%' colspan='4' class='base'>$Lang::tr{'network pakfire from'}</td>
+</tr>
+<tr>
+       <td>&nbsp;</td>
+       <td width='100%' class='base' colspan='4'>
+END
+;
+
+
+print <<END
+</table>
+<br />
+<hr />
+<table width='100%'>
+<tr>
+       <td width='30%'><img src='/blob.gif' alt='*' /> $Lang::tr{'this field may be blank'}</td>
+       <td width='33%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td>
+       <td width='33%' align='right'>
+               <a href='${General::adminmanualurl}/services.html#services_pakfire' target='_blank'><img src='/images/web-support.png' title='$Lang::tr{'online help en'}' /></a>
+       </td>
+</tr>
+</table>
+END
+;
+
+&Header::closebox();
+
+print "</form>\n";
+
+&Header::closebigbox();
+
+&Header::closepage();
+
diff --git a/html/cgi-bin/updates.cgi b/html/cgi-bin/updates.cgi
deleted file mode 100644 (file)
index 8651194..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-#!/usr/bin/perl
-#
-# SmoothWall CGIs
-#
-# This code is distributed under the terms of the GPL
-#
-# (c) The SmoothWall Team
-#
-# $Id: updates.cgi,v 1.9.2.22 2005/12/01 20:41:53 franck78 Exp $
-#
-
-use LWP::UserAgent;
-use File::Copy;
-use strict;
-
-# enable only the following on debugging purpose
-#use warnings;
-#use CGI::Carp 'fatalsToBrowser';
-
-require 'CONFIG_ROOT/general-functions.pl';
-require "${General::swroot}/lang.pl";
-require "${General::swroot}/header.pl";
-
-#workaround to suppress a warning when a variable is used only once
-my @dummy = ( $General::version );
-undef (@dummy);
-my $warnmessage='';
-my $errormessage='';
-my @av=('');
-my @pf=('');
-
-&Header::showhttpheaders();
-
-my %uploadsettings=();
-$uploadsettings{'ACTION'} = '';
-
-&Header::getcgihash(\%uploadsettings, {'wantfile' => 1, 'filevar' => 'FH'});
-
-if ($uploadsettings{'ACTION'} eq $Lang::tr{'upload'}) {
-# This code do not serve a lot because $General::version cannot change while the module is loaded. So no change
-# can appear. More, this call should be called 'after' update is done !
-#      my $return = &downloadlist();
-#      if ($return && $return->is_success) {
-#              if (open(LIST, ">${General::swroot}/patches/available")){
-#                      flock LIST, 2;
-#                      my @this = split(/----START LIST----\n/,$return->content);
-#                      print LIST $this[1];
-#                      close(LIST);
-#              } else {
-#                      $errormessage = $Lang::tr{'could not open available updates file'};
-#              }
-#      } else {
-#              if (open(LIST, "<${General::swroot}/patches/available")) {
-#                      my @list = <LIST>;
-#                      close(LIST);
-#              }
-#              $warnmessage = $Lang::tr{'could not download the available updates list'};
-#      }
-
-
-       if (copy ($uploadsettings{'FH'}, "/var/patches/patch-$$.tar.gz.gpg") != 1) {
-               $errormessage = $!;
-       } else {
-               my $exitcode = system("/usr/local/bin/installpackage $$ > /dev/null") >> 8;
-               if ($exitcode == 0) {
-                       #Hack to get correct version displayed after update
-                       open (XX,"perl -e \"require'${General::swroot}/general-functions.pl';print \\\$General::version\"|");
-                       $General::version=<XX>;
-                       close (XX);
-                       &General::log("$Lang::tr{'the following update was successfully installed'} ($General::version)");
-               }
-               elsif($exitcode == 2) {
-                       $errormessage = "$Lang::tr{'could not create directory'}";
-               }
-               elsif($exitcode == 3) {
-                       $errormessage = "$Lang::tr{'this is not an authorised update'}";
-               }
-               elsif($exitcode == 4) {
-                       $errormessage = "$Lang::tr{'this is not a valid archive'}";
-               }
-               elsif($exitcode == 5) {
-                       $errormessage = "$Lang::tr{'could not open update information file'}";
-               }
-               elsif($exitcode == 6) {
-                       $errormessage = "$Lang::tr{'could not open installed updates file'}";
-               }
-               elsif($exitcode == 7) {
-                       $errormessage = "$Lang::tr{'this update is already installed'}";
-               }
-               elsif($exitcode == 11) {
-                       $errormessage = "$Lang::tr{'not enough disk space'}";
-               } else {
-                       $errormessage = "$Lang::tr{'package failed to install'}";
-               }
-       }
-}
-elsif ($uploadsettings{'ACTION'} eq $Lang::tr{'refresh update list'}) {
-       my $return = &downloadlist();
-       if ($return && $return->is_success) {
-               if (open(LIST, ">${General::swroot}/patches/available")) {
-                       flock LIST, 2;
-                       my @this = split(/----START LIST----\n/,$return->content);
-                       print LIST $this[1];
-                       close(LIST);
-                       &General::log($Lang::tr{'successfully refreshed updates list'});
-               } else {
-                       $errormessage = $Lang::tr{'could not open available updates file'};
-               }
-       } else {
-               $errormessage = $Lang::tr{'could not download the available updates list'}; 
-       }
-}
-elsif ($uploadsettings{'ACTION'} eq "$Lang::tr{'clear cache'} (squid)") {
-        system('/usr/local/bin/restartsquid','-f');
-}
-               
-if (!open(AV, "<${General::swroot}/patches/available")) {
-    $errormessage = $Lang::tr{'could not open available updates file'};
-} else {
-    @av = <AV>;
-    close(AV);
-}
-if (!open (PF, "<${General::swroot}/patches/installed")) {
-    $errormessage = $Lang::tr{'could not open installed updates file'};
-} else {
-    @pf = <PF>;
-    close (PF);
-    #substract installed patch from list displayed (AV list may not be updated)
-    foreach my $P (@pf) {
-       $P =~ /^(...)/;
-       my $order=$1;
-       my $idx=0;
-       foreach my $A (@av) {
-           $A =~ /^(...)/;
-           if ($1 eq $order) { # match
-               splice (@av,$idx,1);
-               last;
-           }
-           $idx++;
-       }       
-    }
-}
-
-&Header::openpage($Lang::tr{'updates'}, 1, '');
-
-&Header::openbigbox('100%', 'left', 'download.png', $errormessage);
-
-if ($errormessage) {
-       &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
-       print $errormessage;
-       print "&nbsp;";
-       &Header::closebox();
-}
-
-if ($warnmessage) {
-       &Header::openbox('100%', 'LEFT', "$Lang::tr{'warning messages'}:");
-       print "<CLASS NAME='base'>$warnmessage \n";
-       print "&nbsp;</CLASS>\n";
-       &Header::closebox();
-}
-
-
-&Header::openbox('100%', 'left', $Lang::tr{'available updates'});
-
-if ( defined $av[0] ) {
-       print $Lang::tr{'there are updates available'};
-       print qq|<table width='100%' border='0' cellpadding='2' cellspacing='0'>
-<tr>
-<td width='5%'><b>$Lang::tr{'id'}</b></td>
-<td width='15%'><b>$Lang::tr{'title'}</b></td>
-<td width='50%'><b>$Lang::tr{'description'}</b></td>
-<td width='15%'><b>$Lang::tr{'released'}</b></td>
-<td width='15%'>&nbsp;</td>
-</tr>
-|;
-       foreach (@av) {
-               my @temp = split(/\|/,$_);
-               print "<tr><td valign='top'>$temp[0]</td><td valign='top'>$temp[1]</td><td valign='top'>$temp[2]</td><td valign='top'>$temp[3]</td><td valign='top'><a href='$temp[4]' target='_new'>$Lang::tr{'info'}</a></td></tr>";
-       }
-       print "</table>";
-
-
-} else {
-       print $Lang::tr{'all updates installed'};
-}
-
-print qq|<hr /><br>
-$Lang::tr{'to install an update'}
-<br />
-<form method='post' action='/cgi-bin/updates.cgi' enctype='multipart/form-data'>
-<table>
-<tr>
-<td align='right' class='base'>
-<b>$Lang::tr{'upload update file'}</b></td>
-<td><input type="file" size='40' name="FH" /> <input type='submit' name='ACTION' value='$Lang::tr{'upload'}' />
-</td></tr>
-</table>|;
-
-print "<b>$Lang::tr{'disk usage'}</b>";
-open (XX,'df -h / /var/log|');
-my @df=<XX>;
-close (XX);
-print "<table cellpadding='2'>";
-map ( $_ =~ s/ +/<td>/g,@df);  # tablify each line!
-print "<tr><td>$df[0]</tr>";
-print "<tr><td>$df[1]</tr>";
-print "<tr><td>$df[2]<td><input type='submit' name='ACTION' value='$Lang::tr{'clear cache'} (squid)' /></tr>";
-print "</table>";
-
-print "\n<hr />";
-print "\n<table width='100%'>\n<tr>";
-print "\n\t<td width='50%'>&nbsp;</td>";
-print "\n\t<td width='50%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'refresh update list'}' /></td></tr>";
-print "\n</table>\n";
-print "</form>";
-
-&Header::closebox();
-
-&Header::openbox('100%', 'LEFT', $Lang::tr{'installed updates'});
-
-print qq|<table width='100%' border='0' cellpadding='2' cellspacing='0'>
-<tr>
-<td width='5%'><b>$Lang::tr{'id'}</b></td>
-<td width='15%'><b>$Lang::tr{'title'}</b></td>
-<td width='50%'><b>$Lang::tr{'description'}</b></td>
-<td width='15%'><b>$Lang::tr{'released'}</b></td>
-<td width='15%'><b>$Lang::tr{'installed'}</b></td>
-</tr>
-|;
-
-foreach my $pf (@pf) {
-       next if $pf =~ m/^#/;
-       my @temp = split(/\|/,$pf);
-#???   @av = grep(!/^$temp[0]/, @av);
-       print "<tr><td valign='top'>" . join("</td><td valign='top'>",@temp) . "</td></tr>";
-}
-close(PF);
-
-print "</table>";
-
-&Header::closebox();
-
-&Header::closebigbox();
-
-&Header::closepage();
-
-sub downloadlist {
-       unless (-e "${General::swroot}/red/active") {
-               return 0;
-       }
-
-       my $downloader = LWP::UserAgent->new;
-       $downloader->timeout(5);
-
-       my %proxysettings=();
-       &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
-
-       if ($_=$proxysettings{'UPSTREAM_PROXY'}) {
-               my ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/);
-               if ($proxysettings{'UPSTREAM_USER'}) {
-                       $downloader->proxy("http","http://$proxysettings{'UPSTREAM_USER'}:$proxysettings{'UPSTREAM_PASSWORD'}@"."$peer:$peerport/");
-               } else {
-                       $downloader->proxy("http","http://$peer:$peerport/");
-               }
-       }
-
-       return $downloader->get("http://www.ipcop.org/patches/${General::version}", 'Cache-Control', 'no-cache');
-
-}
diff --git a/html/html/images/logo_ipfire2.gif b/html/html/images/logo_ipfire2.gif
deleted file mode 100644 (file)
index 8ad1664..0000000
Binary files a/html/html/images/logo_ipfire2.gif and /dev/null differ
index 30cbd81..afc8990 100644 (file)
-# German (de) Data File \r
-#\r
-# This file is part of the IPCop Firewall.\r
-# \r
-# IPCop is free software; you can redistribute it and/or modify\r
-# it under the terms of the GNU General Public License as published by\r
-# the Free Software Foundation; either version 2 of the License, or\r
-# (at your option) any later version.\r
-# \r
-# IPCop is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-# GNU General Public License for more details.\r
-# \r
-# You should have received a copy of the GNU General Public License\r
-# along with IPCop; if not, write to the Free Software\r
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
-# \r
-# (c) The SmoothWall Team\r
-# \r
-# IPCop translation\r
-# (c) 2003 Dirk Loss, Ludwig Steininger, Michael Knappe, Michael Linke,\r
-# Richard Hartmann, Ufuk Altinkaynak, Gerhard Abrahams, Benjamin Kohberg,\r
-# Samuel Wiktor \r
-#\r
-\r
-%tr = ( \r
-%tr, \r
\r
-'a ca certificate with this name already exists' => 'Ein CA-Zertifikat mit diesem Namen existiert bereits.', \r
-'a connection with this common name already exists' => 'Eine Verbindung mit diesem gemeinsamen Namen existiert bereits.', \r
-'a connection with this name already exists' => 'Eine Verbindung mit diesem Namen existiert bereits.', \r
-'access allowed' => 'Zugriff erlaubt von:', \r
-'access refused with this oinkcode' => 'Zugriff mit diesem Oink Code verweigert', \r
-'action' => 'Aktion', \r
-'add' => 'Hinzufügen', \r
-'add a host' => 'Host hinzufügen:', \r
-'add a new rule' => 'Neue Regel hinzufügen:', \r
-'add device' => 'Gerät hinzufügen', \r
-'add network' => 'Netzwerk hinzufügen', \r
-'add new alias' => 'Neue Alias-Adresse hinzufügen:', \r
-'add new lease' => 'Neue Zuordnung definieren', \r
-'add service' => 'Dienst hinzufügen', \r
-'add xtaccess' => 'Externen Zugang hinzugefügt', \r
-'added from dhcp lease list' => 'hinzugefügt von der DHCP Zuordnungsliste', \r
-'admin user password has been changed' => 'Passwort für Benutzer admin wurde geändert.', \r
-'administrator user password' => 'Passwort für Benutzer &quot;admin&quot;:', \r
-'adsl settings' => 'ADSL-Einstellungen', \r
-'advanced' => 'Erweitert', \r
-'again' => 'Wiederholung:', \r
-'alcatelusb help' => 'Um das Speedtouch USB Modem zu verwenden, müssen Sie die Firmware in Ihre IPCop Box hochladen. Bitte laden sie das <b>Embedded Firmware</b> Paket von speedtouch.com herunter, entpacken es und laden dann die passende Datei für Ihr Modem hoch: KQD6_3.xxx für Revisionsnummern <4 oder ZZZL_3.xxx für Rev.=4 mittels des unten angegebenen Formulars.', \r
-'alcatelusb upload' => 'Speedtouch USB Firmware hochladen', \r
-'alias ip' => 'Alias-IP-Adresse', \r
-'aliases' => 'Aliase', \r
-'aliases not active' => 'Aliase-Adresse wird erst aktiviert, wenn Ihr ROTES Interface STATISCH ist', \r
-'all' => 'Alle', \r
-'all interfaces' => 'Alle Schnittstellen', \r
-'all updates installed' => 'Alle Updates installiert', \r
-'alt dialup' => 'Einwahl', \r
-'alt home' => 'Startseite', \r
-'alt information' => 'Information', \r
-'alt logs' => 'Logs', \r
-'alt services' => 'Dienste', \r
-'alt system' => 'System', \r
-'alt vpn' => 'VPNs', \r
-'and' => 'Und', \r
-'ansi t1.483' => 'ANSI T1.483', \r
-'apply' => 'Jetzt anwenden', \r
-'april' => 'April', \r
-'archive not exist' => 'Konfigurationsarchiv existiert nicht', \r
-'are you sure' => 'Sind Sie sicher?', \r
-'arp table entries' => 'Einträge der ARP-Tabelle:', \r
-'august' => 'August', \r
-'authentication' => 'Authentifizierung:', \r
-'automatic' => 'Automatisch', \r
-'available updates' => 'Verfügbare Updates:', \r
-'average' => 'Durchschnitt', \r
-'avoid dod' => 'Benutzen Sie diese Option nicht mit Dial on Demand! Wird hautpsächlich verwendet, wenn ihr IPCop sich hinter einem Router befindet. Ihre ROTE IP muß sich innerhalb eines der drei reservierten Netzwerkbereiche befinden z.B. 10/8, 172.16/12, 192.168/16.', \r
-'back' => 'ZURÜCK', \r
-'backup' => 'Datensicherung', \r
-'backup config floppy' => 'Backup-Konfiguration - Diskette', \r
-'backup configuration' => 'Backup-Konfiguration:', \r
-'backup sets' => 'Datensicherungssätze', \r
-'backup to floppy' => 'Datensicherung auf Diskette', \r
-'backupprofile' => 'Falls die Wiederverbindung scheitert, auf Profil umschalten', \r
-'bad characters in script field' => 'Nicht erlaubte Zeichen im Skriptnamen', \r
-'bad characters in the telephone number field' => 'Nicht erlaubte(s) Zeichen im Feld Telefonnummer.', \r
-'bad destination range' => 'Der erste Wert des Zielportbereichs ist größer oder gleich dem zweiten Wert.', \r
-'bad ignore filter' => 'Falscher &quot;Ignorieren&quot;-Filter:', \r
-'bad return code' => 'Das Hilfsprogramm hat einen Fehlercode gemeldet', \r
-'bad source range' => 'Der erste Wert des Quellportbereich ist größer oder gleich dem zweiten Wert.', \r
-'beep when ppp connects or disconnects' => 'Piepen, wenn IPCop verbindet oder trennt', \r
-'behind a proxy' => 'Hinter einem Proxy:', \r
-'bewan adsl pci st' => 'Bewan ADSL PCI ST', \r
-'bewan adsl usb' => 'Bewan ADSL USB', \r
-'blue' => 'BLAU', \r
-'blue access' => 'Zugriff auf Blau', \r
-'blue interface' => 'Blaues Interface', \r
-'broadcast' => 'Broadcast', \r
-'broken pipe' => 'Zerbrochene Pipe', \r
-'buffered memory' => 'Gepuff. Speicher', \r
-'buffers' => 'Puffer', \r
-'bytes per second' => 'Bytes pro Sekunde', \r
-'ca certificate' => 'CA Zertifikat', \r
-'ca name' => 'CA Name', \r
-'cache management' => 'Cache Verwaltung', \r
-'cache size' => 'Cache-Größe (MB):', \r
-'cached' => 'zwischengespeichert', \r
-'cached memory' => 'Cache Speicher', \r
-'cancel' => 'Abbrechen', \r
-'cannot enable both nat traversal and compression' => 'NAT Traversal und Kompression können nicht gleichzeitig aktiviert sein.', \r
-'cannot enable ntp without specifying primary' => 'NTP kann nicht aktiviert werden, ohne vorherige Eingabe in \'primär\'.', \r
-'cannot specify secondary dns without specifying primary' => 'Sekundärer DNS kann nicht ohne primären angegeben werden.', \r
-'cannot specify secondary ntp without specifying primary' => 'Kann ohne ersten NTP Server keinen zweiten spezifizieren', \r
-'cannot specify secondary wins without specifying primary' => 'Sekundärer WINS kann ohne einen primären nicht angegeben werden.', \r
-'cant change certificates' => 'Kann Zertifikate nicht ändern.', \r
-'cant enable xtaccess' => 'Die zugehörige Port-Weiterleitungsregel ist deaktiviert, daher können Sie den externen Zugang für diese Regel nicht aktivieren.', \r
-'cant start openssl' => 'Kann OpenSSL nicht starten', \r
-'caps all' => 'ALLE', \r
-'capsclosed' => 'BEENDET', \r
-'capsopen' => 'OFFEN', \r
-'capswarning' => 'WARNUNG', \r
-'cert' => 'Zertifikat', \r
-'certificate' => 'Zertifikat', \r
-'certificate authorities' => 'Zertifizierungsstellen (CAs)', \r
-'certificate does not have a valid ca associated with it' => 'Mit dem Zertifikat ist keine gültige CA verbunden.', \r
-'certificate file move failed' => 'Verschieben der Zertifikatsdatei fehlgeschlagen', \r
-'cfg restart' => 'Nach dem Wiederherstellen eines Konfigurationsarchivs wird ein Neustart empfohlen.', \r
-'chain' => 'Verknüpfung', \r
-'change passwords' => 'Passwörter&nbsp;ändern', \r
-'check vpn lr' => 'Überprüfen', \r
-'city' => 'Stadt', \r
-'clear cache' => 'Zwischenspeicher löschen', \r
-'clenabled' => 'Uhrzeit dem lokalen Netzwerk zur Verfügung stellen', \r
-'click to disable' => 'Aktiviert (klicken, um zu deaktivieren)', \r
-'click to enable' => 'Deaktiviert (klicken, um zu aktivieren)', \r
-'clock has not been synchronized' => 'Die Uhr wurde nicht synchronisiert', \r
-'clock last synchronized at' => 'Die Uhr wurde zuletzt synchronisiert um', \r
-'common name' => 'Gemeinsamer Name', \r
-'compression' => 'Kompression:', \r
-'computer to modem rate' => 'Übertragungsrate zwischen Computer und Modem:', \r
-'concentrator name' => 'Name des Konzentrators:', \r
-'confirmation' => 'Bestätigung', \r
-'connect on ipcop restart' => 'Verbinden bei IPCop-Neustart', \r
-'connect the modem' => 'Das Modem anschließen', \r
-'connect timeout' => 'Anwahl-Wartezeit:', \r
-'connected' => 'Verbunden', \r
-'connecting' => 'Baue Verbindung auf...', \r
-'connection' => 'Verbindung', \r
-'connection debugging' => 'Verbindungs-Debugging', \r
-'connection status and controlc' => 'Verbindungsstatus und -kontrolle:', \r
-'connection tracking' => 'IPTables-Verbindungsverfolgung', \r
-'connection type' => 'Verbindungstyp', \r
-'connection type is invalid' => 'Verbindungstyp ist ungültig', \r
-'connections' => 'Verbindungen', \r
-'connections are associated with this ca.  deleting the ca will delete these connections as well.' => 'Es sind noch Verbindungen mit dieser CA verknüpft.  Das Löschen dieser CA wird diese Verbindungen ebenfalls löschen.', \r
-'could not be opened' => 'konnte nicht geöffnet werden', \r
-'could not connect to' => 'Konnte keine Verbindung herstellen mit', \r
-'could not connect to www ipcop org' => 'Keine Verbindung zu www.ipcop.org möglich', \r
-'could not create directory' => 'Verzeichnis konnte nicht erzeugt werden.', \r
-'could not download latest patch list' => 'Die neueste Update-Liste konnte nicht heruntergeladen werden (keine Verbindung).', \r
-'could not download latest updates' => 'Konnte die neuesten Updates nicht downloaden.', \r
-'could not download the available updates list' => 'Die Update-Liste konnte nicht heruntergeladen werden.', \r
-'could not open available updates file' => 'Die vorhandene Update-Datei konnte nicht geöffnet werden.', \r
-'could not open installed updates file' => 'Datei mit Update-Liste konnte nicht geöffnet werden', \r
-'could not open update information file' => 'Datei mit den Update-Information konnte nicht geöffnet werden. Die Update-Datei ist beschädigt.', \r
-'could not retrieve common name from certificate' => 'Der Gemeinsame Name (CN) konnte nicht aus dem Zertifikat gelesen werden.', \r
-'country' => 'Land', \r
-'cpu usage per' => 'CPU-Nutzung pro', \r
-'create' => 'Erzeuge', \r
-'credits' => 'Dank an ..', \r
-'cron server' => 'Cron-Server', \r
-'current' => 'Aktuell', \r
-'current aliases' => 'Aktuelle Alias-Adresse:', \r
-'current dhcp leases on blue' => 'Aktuelle DHCP Zuordnungen auf Blau', \r
-'current dynamic leases' => 'Aktuelle dynamische Zuordnungen', \r
-'current fixed leases' => 'Aktuelle feste Zuordnungen', \r
-'current hosts' => 'Aktuelle Hosts:', \r
-'current profile' => 'Aktuelles Profil:', \r
-'current rules' => 'Aktuelle Regeln:', \r
-'custom networks' => 'Benutzerdefinierte Netzwerke', \r
-'custom services' => 'Benutzerdefinierte Dienste', \r
-'dat without key' => 'Ein verschlüsseltes Archiv kann ohne Schlüssel nicht wiederhergestellt werden.', \r
-'date' => 'Datum', \r
-'date not in logs' => 'Für den gesuchten Tag existiert kein (oder nur ein unvollständiges) Log', \r
-'day' => 'Tag', \r
-'day after' => 'Tag danach', \r
-'day before' => 'Tag davor', \r
-'days' => 'Tage', \r
-'ddns hostname added' => 'Hostname für dynamischen DNS hinzugefügt', \r
-'ddns hostname modified' => 'Hostname für dynamischen DNS geändert', \r
-'ddns hostname removed' => 'Hostname für dynamischen DNS gelöscht', \r
-'ddns minimize updates' => 'Updates minimieren: Vergleicht vor einem Update die DNS-IP-Adresse für Hostname "[host.]domain" gegen die ROTE IP-Addresse.', \r
-'ddns noip prefix' => 'Um no-ip im Gruppenmodus zu benutzen, dem Hostnamen <b>%</b> hinzufügen', \r
-'december' => 'Dezember', \r
-'def lease time' => 'Standardzeit für Zuordnung', \r
-'default lease time' => 'Haltezeit-Voreinstellung in min:', \r
-'default networks' => 'Standard Netzwerke', \r
-'default renewal time' => 'Standard-Aktualisierungszeit', \r
-'default services' => 'Standard Dienste', \r
-'delete' => 'Löschen', \r
-'demon login script' => 'Demon-Anmeldeskript', \r
-'description' => 'Beschreibung', \r
-'dest ip and port' => 'Ziel-IP:Port', \r
-'destination' => 'Ziel', \r
-'destination ip' => 'Ziel-IP-Adresse', \r
-'destination ip bad' => 'Ungültige Ziel-IP-Adresse', \r
-'destination ip or net' => 'Ziel-IP oder Netz', \r
-'destination net' => 'Ziel-Netz', \r
-'destination port' => 'Ziel-Port', \r
-'destination port numbers' => 'Zielport muß ein(e) gültige(r) Portnummer oder Portbereich sein.', \r
-'destination port overlaps' => 'Der Zielportbereich überlappt einen bereits bestehenden Portbereich.', \r
-'detail level' => 'Detaillierungsgrad', \r
-'device' => 'Gerät', \r
-'devices on blue' => 'Geräte auf Blau', \r
-'dhcp advopt add' => 'DHCP Option hinzufügen', \r
-'dhcp advopt added' => 'DHCP Option hinzugefügt', \r
-'dhcp advopt blank value' => 'Wert für DHCP Option darf nicht leer sein', \r
-'dhcp advopt custom definition' => 'Definition ihrer benutzerdefinierten Option ', \r
-'dhcp advopt definition' => 'Definition', \r
-'dhcp advopt definition exists' => 'Definitionsoption existiert bereits. Sie können sie nur bearbeiten oder entfernen.', \r
-'dhcp advopt edit' => 'DHCP Option editieren', \r
-'dhcp advopt help' => 'Optionen auflisten', \r
-'dhcp advopt list' => 'Liste der DHCP Optionen', \r
-'dhcp advopt modified' => 'DHCP Option modifiziert', \r
-'dhcp advopt name' => 'Optionsname', \r
-'dhcp advopt removed' => 'DHCP Option entfernt', \r
-'dhcp advopt scope' => 'Options-Wertebereich', \r
-'dhcp advopt scope global' => 'Global', \r
-'dhcp advopt scope help' => 'Globaler Bereich oder begenze Bereich auf überprüfte Schnittstellen', \r
-'dhcp advopt unknown' => 'Name der DHCP Option wurde nicht erkannt', \r
-'dhcp advopt value' => 'Optionswert', \r
-'dhcp allow bootp' => 'BOOTP Clients zulassen', \r
-'dhcp bootp pxe data' => 'Geben Sie optionale BOOTP PXE-Daten für diese feste Zuordnung ein', \r
-'dhcp configuration' => 'DHCP-Konfiguration', \r
-'dhcp mode' => 'DHCP', \r
-'dhcp server' => 'DHCP-Server', \r
-'dhcp server disabled' => 'DHCP-Server deaktiviert. Angehalten.', \r
-'dhcp server disabled on blue interface' => 'DHCP-Server auf BLAUER Schnittstelle deaktiviert', \r
-'dhcp server enabled' => 'DHCP-Server aktiviert. Starte neu.', \r
-'dhcp server enabled on blue interface' => 'DHCP-Server auf BLAUER Schnittstelle aktviert', \r
-'dial' => 'Verbinden', \r
-'dial user password' => 'Passwort für Benutzer &quot;dial&quot;:', \r
-'dial user password has been changed' => 'Passwort für Benutzer -dial- wurde geändert.', \r
-'dialing mode' => 'Wählmodus:', \r
-'dialup settings' => 'Einwahl-Einstellungen', \r
-'disk access per' => 'Plattenzugriff je', \r
-'disk usage' => 'Festplattenbelegung:', \r
-'display' => 'Anzeige', \r
-'display hostname in window title' => 'Hostname im Fenstertitel anzeigen', \r
-'dmz' => 'DMZ', \r
-'dmz pinhole configuration' => 'Einstellungen des DMZ-Schlupfloches', \r
-'dmz pinhole rule added' => 'Regel für DMZ-Schlupfloch hinzugefügt; Starte DMZ-Schlupfloch neu', \r
-'dmz pinhole rule removed' => 'Regel für DMZ-Schlupfloch entfernt; Starte DMZ-Schlupfloch neu', \r
-'dmzpinholes for same net not necessary' => 'DMZ-Schlupflöcher werden im gleichen Netz nicht benötigt. Wählen Sie ein anderes Quell- oder Ziel-Netz.', \r
-'dns check failed' => 'Fehler bei DNS-Überprüfung', \r
-'dns proxy server' => 'DNS-Proxyserver', \r
-'do not log this port list' => 'Verwerfe diese Port-Liste kurz bevor sie protokolliert werden (reduziert Protokollgröße)', \r
-'dod' => 'Dial-on-Demand-Modus', \r
-'dod for dns' => 'Dial-on-Demand für DNS:', \r
-'dod not compatible with ddns' => 'Dial on Demand ist nicht kompatibel mit dynamischen DNS Diensten', \r
-'dod waiting' => 'Dial On Demand wartet', \r
-'domain' => 'Domain', \r
-'domain name' => 'Domainname', \r
-'domain name suffix' => 'Domain-Name-Suffix:', \r
-'domain not set' => 'Domain nicht eingegeben.', \r
-'downlink speed' => 'Downlink-Geschwindigkeit (kBit/sek)', \r
-'download ca certificate' => 'CA Zertifikat herunterladen', \r
-'download certificate' => 'Zertifikate herunterladen', \r
-'download host certificate' => 'Host Zertifikat herunterladen', \r
-'download new ruleset' => 'Neuen Regelsatz herunterladen', \r
-'download pkcs12 file' => 'PKCS12 Datei herunterladen', \r
-'download root certificate' => 'Root Zertifikat herunterladen', \r
-'dpd action' => 'Aktion für Dead Peer Detection', \r
-'driver' => 'Treiber', \r
-'dst port' => 'Ziel-Port', \r
-'dstprt range overlaps' => 'Der Zielportbereich überlappt mit einem bereits definierten Port.', \r
-'dstprt within existing' => 'Der Zielport liegt innerhalb eines bereits definierten Portbereichs.', \r
-'duplicate ip' => 'IP-Adresse doppelt eingegeben', \r
-'duplicate ip bold' => 'Doppelte Adressen sind <b>fett</b> gedruckt', \r
-'duplicate mac' => 'Doppelte MAC-Adresse eingegeben', \r
-'duplicate name' => 'Dieser Name wird bereits benutzt. Bitte wählen Sie einen anderen.', \r
-'dyn dns source choice' => 'Dynamic DNS Anbieter werden eine IP-Adresse für diesen IPCop erhalten von:', \r
-'dynamic dns' => 'Dynamischer DNS', \r
-'dynamic dns client' => 'Dynamischer DNS-Client', \r
-'e-mail address too long' => 'E-mail Adresse ist zu lang; sie sollte nicht länger als 40 Zeichen sein.', \r
-'eciadsl help' => 'Um ein ECI PCI-Modem nutzen zu können, müssen Sie zuerst die Treiber-Software zur IPCop-Box hochladen. Laden Sie zuerst den Tarball von ECIADSL herunter und laden Sie dann die Datei <B>synch.bin</B> über das untenstehende Formblatt zu IPCop hoch.', \r
-'eciadsl upload' => 'Hochladen der ECI ADSL Datei synch.bin', \r
-'edit' => 'Bearbeiten', \r
-'edit a rule' => 'Existierende Regel bearbeiten:', \r
-'edit advanced settings when done' => 'Erweiterte Einstellungen bearbeiten, wenn fertig.', \r
-'edit an existing alias' => 'Einen bestehenden Alias bearbeiten', \r
-'edit an existing host' => 'Einen bestehenden Host hinzufügen', \r
-'edit an existing lease' => 'Eine existierende Zuordnung bearbeiten', \r
-'edit device' => 'Gerät bearbeiten', \r
-'edit hosts' => 'Hosts bearbeiten', \r
-'edit network' => 'Netzwerk bearbeiten', \r
-'edit service' => 'Dienst bearbeiten', \r
-'eg' => 'z.B.:', \r
-'empty' => 'Leer', \r
-'enable ignore filter' => '&quot;Ignorieren&quot;-Filter ein', \r
-'enable javascript' => 'Javascript aktivieren', \r
-'enable wildcards' => 'Wildcards erlauben:', \r
-'enabled' => 'Aktiviert:', \r
-'enabled on' => 'Aktiviert auf', \r
-'enabledtitle' => 'Aktiviert', \r
-'encapsulation' => 'Encapsulation', \r
-'encrypted' => 'Verschlüsselt', \r
-'end address' => 'Endadresse:', \r
-'err bk 1' => 'Fehler beim Erzeugen des Archivs', \r
-'err bk 2 key' => 'Fehler beim Erzeugen der Schlüsseldatei', \r
-'err bk 3 tar' => 'Fehler beim Anhängen der Datei ans Archiv', \r
-'err bk 4 gz' => 'Fehler beim Komprimieren des Archivs', \r
-'err bk 5 encrypt' => 'Fehler beim Verschlüsseln des Archivs', \r
-'err rs 1' => 'Fehler beim Wiederherstellen des Archivs', \r
-'err rs 6 decrypt' => 'Fehler beim Entschlüsseln des Archivs', \r
-'err rs 7 untartst' => 'Ungültiges entschlüsseltes Archiv', \r
-'err rs 8 untar' => 'Fehler beim un-tar-en des Archivs', \r
-'error messages' => 'Fehlermeldungen:', \r
-'esp encryption' => 'ESP Verschlüsselung:', \r
-'esp grouptype' => 'ESP Gruppentyp:', \r
-'esp integrity' => 'ESP Integrität:', \r
-'esp keylife' => 'Lebensdauer des ESP Schlüssels:', \r
-'esp keylife should be between 1 and 24 hours' => 'ESP Schlüssel-Lebensdauer sollte zwischen 1 und 24 Stunden betragen.', \r
-'every' => 'Jeden', \r
-'excluding buffers and cache' => '-/+ Puffer/Zwischenspeicher', \r
-'expected' => 'Erwartet', \r
-'expires' => 'Ablaufdatum', \r
-'export' => 'Export', \r
-'external access' => 'Externer Zugang', \r
-'external access configuration' => 'Einstellungen für externen Zugang', \r
-'external access rule added' => 'Regel für externen Zugang hinzugefügt; Starte Zugangskontroller neu', \r
-'external access rule removed' => ' Regel für externen Zugang entfernt; Starte Zugangskontroller neu', \r
-'external aliases configuration' => 'Externe Alias-Konfiguration', \r
-'february' => 'Februar', \r
-'fetch ip from' => 'Schätze die echte öffentliche IP-Adresse mit Hilfe eines externen Servers', \r
-'filename' => 'Dateiname', \r
-'filesystem full' => 'Dateisystem voll', \r
-'firewall' => 'Firewall', \r
-'firewall hits' => 'Gesamtanzahl der Firewall-Treffer für', \r
-'firewall log' => 'Firewall-Protokoll', \r
-'firewall log viewer' => 'Betrachter der Firewall-Logdateien', \r
-'firewall logs' => 'Firewall-Logdateien', \r
-'firmware' => 'Firmware', \r
-'firmware upload' => 'Hochladen der Firmware/Treiber', \r
-'fixed ip lease added' => 'Feste IP-Zuordnung hinzugefügt', \r
-'fixed ip lease modified' => 'Feste IP-Zuordnung geändert', \r
-'fixed ip lease removed' => 'Feste IP-Zuordnung gelöscht', \r
-'force update' => 'Aktualisierung erzwingen', \r
-'forwarding rule added' => 'Weiterleitungsregel hinzugefügt. Starte Weiterleitung neu', \r
-'forwarding rule removed' => 'Weiterleitungsregel entfernt. Starte Weiterleitung neu', \r
-'forwarding rule updated' => 'Weiterleitungsregel aktualisiert; starte Weiterleitung neu', \r
-'free' => 'Frei', \r
-'free memory' => 'Freier Speicher', \r
-'free swap' => 'Freier Swap', \r
-'friday' => 'Freitag', \r
-'fritzdsl help' => 'Um eines der folgenden Fritz!DSL Modems (Fritz!Card DSL=fcdsl / Fritz!CardDSL SL=fcdslsl / Fritz!Card DSL V2.0=fcdsl2 / Fritz!Card DSL USB=fcdslusb / Fritz!Card DSL USB SL=fcdslslusb) nutzen zu können, müssen Sie ein Paket auf Ihre IPCop-Box laden. Bitte laden Sie den tarball entsprechend Ihrer Version von der IPCop-Webseite herunter und laden Sie dann die gesamte <b>fcdsl-(ihre_version).tgz</b> mit dem folgenden Formular hoch.', \r
-'fritzdsl upload' => 'Fritz!DSL-Treiber hochladen', \r
-'from' => 'Von', \r
-'g.dtm' => 'G.dmt', \r
-'g.lite' => 'G.lite', \r
-'gateway' => 'Gateway', \r
-'gateway ip' => 'Gateway-IP', \r
-'generate a certificate' => 'Erzeuge ein Zertifikat:', \r
-'generate root/host certificates' => 'Erzeuge Root/Host Zertifikate', \r
-'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Die Erzeugung der Root und Host Zertifikate kann lange Zeit dauern.  Auf älterer Hardware kann es mehrere Minuten lang dauern. Bitte haben Sie etwas Geduld.', \r
-'global settings' => 'Globale Einstellungen', \r
-'graph' => 'Diagramm', \r
-'graph per' => 'Diagramm pro', \r
-'green' => 'GRÜN', \r
-'green interface' => 'Grünes Interface', \r
-'gui settings' => 'Einstellungen der  Benutzeroberfläche', \r
-'gz with key' => 'Nur ein verschlüsseltes Archiv kann auf dieser Maschine wiederhergestellt werden.', \r
-'hangup' => 'Trennen', \r
-'hangup string' => 'Auflegen:', \r
-'high' => 'Hoch', \r
-'high memory usage' => 'Speicher wird knapp', \r
-'holdoff' => 'Holdoff-Zeit in (Sekunden)', \r
-'host' => 'Host', \r
-'host certificate' => 'Host Zertifikat', \r
-'host configuration' => 'Host-Konfiguration', \r
-'host ip' => 'Host IP-Adresse', \r
-'host to net vpn' => 'Host-zu-Netz Virtual Private Network (RoadWarrior)', \r
-'hostname' => 'Hostname', \r
-'hostname and domain already in use' => 'Hostname und Domain sind werden bereits benutzt.', \r
-'hostname cant be empty' => 'Hostname darf nicht leer bleiben.', \r
-'hostname not set' => 'Hostname nicht eingegeben.', \r
-'hosts config added' => 'Hosts-Konfiguration hinzugefügt', \r
-'hosts config changed' => 'Hosts-Konfiguration geändert', \r
-'hours' => 'Stunden', \r
-'hours2' => 'Stunden', \r
-'ibod for dual isdn only' => 'iBOD kann nur bei ISDN-Kanalbündelung genutzt werden.', \r
-'icmp selected but no type' => 'ICMP wurde zwar als Protokoll gewählt, es wurde aber kein ICMP-Typ angegeben.', \r
-'icmp type' => 'ICMP-Typ', \r
-'id' => 'ID', \r
-'idle' => 'Leerlauf', \r
-'idle cpu' => 'CPU Leerlauf', \r
-'idle cpu usage' => 'Leerlauf CPU Nutzung', \r
-'idle timeout' => 'Leerlauf-Wartezeit in min (0 zum Deaktivieren):', \r
-'idle timeout not set' => 'Leerlauf-Wartezeit nicht angegeben.', \r
-'ids log viewer' => 'Ansicht IDS-Log', \r
-'ids logs' => 'IDS-Logdateien', \r
-'ids rules license' => 'Um  Sourcefire VRT Zertifizierte Regeln zu nutzen, müssen Sie ich registrieren auf', \r
-'ids rules license2' => 'Bestätigen Sie die Lizenz, empfangen Sie Ihr Passwort per email und gehen Sie auf die Website. Gehen Sie zu', \r
-'ids rules license3' => 'klicken Sie den \'Get Code\' Knopf am Fuß und kopieren den 40-Zeichen Oink Code in das untere Feld.', \r
-'ids rules update' => 'Snort Regeln Update', \r
-'iface' => 'Iface', \r
-'ignore filter' => '&quot;Ignorieren&quot;-Filter', \r
-'ike encryption' => 'IKE Verschlüsselung:', \r
-'ike grouptype' => 'IKE Gruppentyp:', \r
-'ike integrity' => 'IKE Integrität:', \r
-'ike lifetime' => 'IKE Lebensdauer:', \r
-'ike lifetime should be between 1 and 8 hours' => 'IKE Lebensdauer sollte zwischen 1 und 8 Stunden betragen.', \r
-'import' => 'Import', \r
-'in' => 'Ein', \r
-'incoming traffic in bytes per second' => 'Eingehender Verkehr in Bytes pro Sekunde', \r
-'info' => 'Info', \r
-'init string' => 'Initialisierung:', \r
-'insert floppy' => 'Legen Sie eine formatierte Diskette in das Floppy-Laufwerk in IPCop und klicken auf <i>Datensicherung auf Diskette</i>, um die Systemeinstellungen zu sichern.  Überprüfen Sie das Ergebnis sorgfältig, um sicher zu sein, dass die Datensicherung vollständig und erfolgreich abgeschlossen wurde.<p>', \r
-'install new update' => 'Installiere neues Update:', \r
-'installed' => 'Installiert', \r
-'installed updates' => 'Installierte Updates:', \r
-'instant update' => 'Sofortiges Update', \r
-'interface' => 'Schnittstelle', \r
-'interfaces' => 'Schnittstellen:', \r
-'internet' => 'INTERNET', \r
-'intrusion detection' => 'Einbruchdetektierung', \r
-'intrusion detection system' => 'Intrusion Detection System', \r
-'intrusion detection system log viewer' => 'Betrachter der IDS-Logfiles', \r
-'intrusion detection system2' => 'Intrusion Detection System:', \r
-'invalid broadcast ip' => 'Ungültige Broadcast-IP', \r
-'invalid cache size' => 'Ungültige Cache-Größe.', \r
-'invalid characters found in pre-shared key' => 'Ungültige Zeichen im Pre-Shared Schlüssel gefunden.', \r
-'invalid date entered' => 'Ungültiges Datum eingegeben.', \r
-'invalid default lease time' => 'Ungültige Haltezeit-Voreinstellung.', \r
-'invalid domain name' => 'Ungültiger Domainname.', \r
-'invalid downlink speed' => 'Ungültige Downlink-Gerschwindigkeit.', \r
-'invalid end address' => 'Ungültige Endadresse.', \r
-'invalid fixed ip address' => 'Ungültige feste IP-Adresse', \r
-'invalid fixed mac address' => 'Ungültige feste MAC-Adresse', \r
-'invalid hostname' => 'Ungültiger Hostname.', \r
-'invalid input' => 'Ungültige Eingabe', \r
-'invalid input for authentication method' => 'Ungültige Eingabe für Authentifizierungsmethode.', \r
-'invalid input for city' => 'Ungültige Eingabe für Stadt.', \r
-'invalid input for country' => 'Ungültige Eingabe für das Land', \r
-'invalid input for department' => 'Ungültige Eingabe für die Abteilung', \r
-'invalid input for e-mail address' => 'Ungültige Eingabe für die E-mail Adresse', \r
-'invalid input for esp keylife' => 'Ungültige Eingabe für ESP Schlüssel-Lebensdauer', \r
-'invalid input for hostname' => 'Ungültige Eingabe für Hostname', \r
-'invalid input for ike lifetime' => 'Ungültige Eingabe für IKE Lebensdauer', \r
-'invalid input for name' => 'Ungültige Eingabe für vollen Namen des Benutzers oder des System Hostnamens', \r
-'invalid input for oink code' => 'Ungültige Eingabe für Oink Code', \r
-'invalid input for organization' => 'Ungültige Eingabe für Organisation', \r
-'invalid input for remote host/ip' => 'Ungültige Eingabe für Remote Host/IP', \r
-'invalid input for state or province' => 'Ungültige Eingabe für Bundesstaat oder Provinz.', \r
-'invalid ip' => 'Ungültige IP-Adresse', \r
-'invalid keep time' => 'Die Aufbewahrungszeit muss eine gültige Zahl sein', \r
-'invalid key' => 'Ungültiger Schlüssel.', \r
-'invalid loaded file' => 'Ungültige geladene Datei', \r
-'invalid local-remote id' => 'Falls verwendet, dürfen leftid und rightid nicht gleich sein, und mit einem "@"-Zeichen beginnen. Dies sind leftid und rightid in der OpenSwan-Terminologie.', \r
-'invalid logserver address' => 'Ungültige syslogd server Adresse', \r
-'invalid max lease time' => 'Ungültige max. Haltezeit.', \r
-'invalid maximum incoming size' => 'Ungültige max. ankommende Größe.', \r
-'invalid maximum object size' => 'Ungültige max. Objektgröße.', \r
-'invalid maximum outgoing size' => 'Ungültige max. abgehende Größe.', \r
-'invalid md5sum' => 'Ungültige MD5-Summe.', \r
-'invalid minimum object size' => 'Ungültige min. Objektgröße.', \r
-'invalid netmask' => 'Ungültige Netzwerkmaske', \r
-'invalid port' => 'Ungültiger Port. Bitte gültige Portnummer eingeben.', \r
-'invalid port list' => 'Portlisten-Syntax lautet: port[,port]... wobei port in /etc/services vorkommt oder Nummer', \r
-'invalid primary dns' => 'Ungültiger primärer DNS.', \r
-'invalid primary ntp' => 'Ungültiger primärer NTP.', \r
-'invalid secondary dns' => 'Ungültiger sekundärer DNS.', \r
-'invalid secondary ntp' => 'Ungültiger sekundärer NTP.', \r
-'invalid start address' => 'Ungültige Anfangsadresse.', \r
-'invalid time entered' => 'Ungültige Zeit eingegeben.', \r
-'invalid time period' => 'Unzulässiger Zeitabschnitt.', \r
-'invalid uplink speed' => 'Ungültige Uplink-Geschwindigkeit.', \r
-'invalid upstream proxy username or password setting' => 'Ungültige/r Remote-Proxy-Benutzername oder Passwort-Einstellung', \r
-'invalid vpi vpci' => 'Ungültige VPI/VPCI-Einstellungen', \r
-'invalid wins address' => 'Ungültige WINS Server Addresse.', \r
-'invert' => 'Invertieren', \r
-'ip address' => 'IP-Adresse', \r
-'ip address in use' => 'IP-Adresse bereits vergeben', \r
-'ip address outside subnets' => 'IP-Adresse ausserhalb der(s) lokalen Subnetze(s)', \r
-'ip alias added' => 'Externer IP-Alias hinzugefügt', \r
-'ip alias changed' => 'Externer IP-Alias geändert', \r
-'ip alias removed' => 'Externer IP-Alias entfernt', \r
-'ip info' => 'IP-Information', \r
-'ipcop has now rebooted' => 'IPCop ist jetzt neu gestartet.', \r
-'ipcop has now shutdown' => 'IPCop ist jetzt heruntergefahren.', \r
-'ipcop side' => 'IPCop Seite:', \r
-'ipcop side is invalid' => 'IPCop Seite ist ungültig.', \r
-'ipcops hostname' => 'IPCop\'s Hostname', \r
-'ipinfo' => 'IP-Info', \r
-'isdn' => 'ISDN', \r
-'isdn settings' => 'Zusätzliche ISDN-Einstellungen:', \r
-'isdn1' => 'Einfaches ISDN', \r
-'isdn2' => 'ISDN-Kanalbündelung', \r
-'january' => 'Januar', \r
-'javascript menu error1' => 'Wenn die Drop-down-Menus nicht funktionieren, deaktivieren Sie Javascript auf der', \r
-'javascript menu error2' => 'Seite.', \r
-'july' => 'Juli', \r
-'june' => 'Juni', \r
-'kernel' => 'Kernel', \r
-'kernel logging server' => 'Kernel-Protokollierungs-Server', \r
-'kernel version' => 'Kernel-Version:', \r
-'lan' => 'LAN', \r
-'languagepurpose' => 'Wählen Sie eine Sprache, in der IPCop angezeigt werden soll:', \r
-'lease expires' => 'Zuordnung verfällt', \r
-'legend' => 'Legende', \r
-'line' => 'Leitung', \r
-'loaded modules' => 'Geladene Module:', \r
-'local ntp server specified but not enabled' => 'Lokaler NTP Server angegeben aber nicht aktiviert', \r
-'local subnet' => 'Lokales Subnetz:', \r
-'local subnet is invalid' => 'Lokales Subnet ist ungültig.', \r
-'local vpn hostname/ip' => 'Lokaler VPN Hostname/IP', \r
-'log' => 'Protokoll:', \r
-'log enabled' => 'Log aktiviert', \r
-'log lines per page' => 'Zeilen pro Seite', \r
-'log server address' => 'Syslog Server', \r
-'log settings' => 'Logdatei-Einstellungen', \r
-'log summaries' => 'Log Übersicht', \r
-'log summary' => 'Log Zusammenfassung', \r
-'log viewer' => 'Protokollansicht', \r
-'log viewing options' => 'Log Ansichts-Optionen', \r
-'logging server' => 'Protokollierungs-Server', \r
-'loginlogout' => 'Login/Logout', \r
-'lookup failed' => 'Reverse Lookup gescheitert', \r
-'low' => 'Niedrig', \r
-'ls_dhcpd' => 'DHCP-Server:', \r
-'ls_disk space' => 'Plattenplatz:', \r
-'ls_free/swan' => 'VPN:', \r
-'ls_httpd' => 'HTTP-Server:', \r
-'ls_init' => 'Init:', \r
-'ls_kernel' => 'Kernel und Firewall:', \r
-'ls_modprobe' => 'Modul Ladeprogramm:', \r
-'ls_pam_unix' => 'Lokale Benutzeranmeldungen:', \r
-'ls_sshd' => 'Fern-Benutzeranmeldungen:', \r
-'ls_syslogd' => 'Syslogd:', \r
-'mac address' => 'MAC-Adresse', \r
-'mac address in use' => 'MAC-Adresse bereits vergeben', \r
-'main page' => 'Startseite', \r
-'manual' => 'Manuell', \r
-'manual control and status' => 'Manuelle Einstellung und Status:', \r
-'manually' => 'Manuell', \r
-'march' => 'März', \r
-'marked' => 'Markiert', \r
-'max incoming size' => 'Max. eingehende Größe (kB):', \r
-'max lease time' => 'Max. Haltezeit in min:', \r
-'max outgoing size' => 'Max. abgehende Größe (kB):', \r
-'max renewal time' => 'Maximale Aktualisierungszeit', \r
-'max retries not set' => 'Maximale Wiederholversuche nicht angegeben.', \r
-'max size' => 'Max. Objektgröße (kB):', \r
-'maximal' => 'Maximal', \r
-'maximum retries' => 'Maximale Wiederholversuche:', \r
-'may' => 'Mai', \r
-'medium' => 'Mittel', \r
-'memory' => 'Speicher:', \r
-'memory usage per' => 'Speichernutzung pro', \r
-'method' => 'Methode:', \r
-'min size' => 'Min. Objektgröße (kB):', \r
-'minutes' => 'Minuten', \r
-'missing dat' => 'Verschlüsseltes Archiv wurde nicht gefunden', \r
-'missing gz' => 'Nichtverschlüsseltes Archiv wurde nicht gefunden', \r
-'modem' => 'Modem', \r
-'modem configuration' => 'Modem-Konfiguration', \r
-'modem on com1' => 'Modem an COM1', \r
-'modem on com2' => 'Modem an COM2', \r
-'modem on com3' => 'Modem an COM3', \r
-'modem on com4' => 'Modem an COM4', \r
-'modem on com5' => 'Modem an COM5', \r
-'modem settings have errors' => 'Modemeinstellungen fehlerhaft', \r
-'modem speaker on' => 'Modemlautsprecher an:', \r
-'modulation' => 'Modulation', \r
-'monday' => 'Montag', \r
-'month' => 'Monat', \r
-'months' => 'Monate', \r
-'mounted on' => 'Mounted auf', \r
-'name' => 'Name', \r
-'name is invalid' => 'Name ist ungültig', \r
-'name must only contain characters' => 'Name darf nur Buchstaben enthalten.', \r
-'name too long' => 'Der volle Benutzername oder der System Hostname ist zu lang', \r
-'nat-traversal' => 'Nat Traversal:', \r
-'net' => 'Netz', \r
-'net to net vpn' => 'Netz-zu-Netz Virtual Private Network', \r
-'netmask' => 'Netzwerkmaske', \r
-'network' => 'Netzwerk', \r
-'network added' => 'Benutzerdefiniertes Netzwerk hinzugefügt', \r
-'network configuration' => 'Netzwerk Konfiguration', \r
-'network removed' => 'Benutzerdefiniertes Netzwerk entfernt', \r
-'network status information' => 'Netzwerk-Statusinformationen', \r
-'network time' => 'Benutze NTP-Server:', \r
-'network time from' => 'Uhrzeit von einem Netzwerk Zeitserver ermitteln', \r
-'network traffic graphs' => 'Diagramme zur Netzwerkauslastung', \r
-'network updated' => 'Benutzerdefiniertes Netzwerk aktualisiert', \r
-'networks settings' => 'Firewall - Netzwerkeinstellungen', \r
-'new optionsfw later' => 'Ihre Modifikation(en) wird (werden) beim nächsten Neustart aktiv werden', \r
-'new optionsfw must boot' => 'Sie müssen Ihren IPCop neu starten', \r
-'newer' => 'Neuer', \r
-'next address' => 'WIRD ENTFERNT', \r
-'no' => 'Nein', \r
-'no alcatelusb firmware' => 'Keine Alcatel USB ADSL-Firmware vorhanden. Bitte hochladen.', \r
-'no cfg upload' => 'Keine Daten wurden hochgeladen', \r
-'no dhcp lease' => 'Eine DHCP-Zuordnung konnte nicht empfangen werden', \r
-'no eciadsl synch.bin file' => 'Keine ECI ADSL Datei synch.bin vorhanden. Bitte hochladen.', \r
-'no fritzdsl driver' => 'Kein Fritz!DSL-Treiber vorhanden. Bitte hochladen.', \r
-'no information available' => 'Keine Informationen verfügbar.', \r
-'no modem selected' => 'Kein Modem ausgewählt', \r
-'no set selected' => 'Es wurde kein Satz ausgewählt', \r
-'no time limit' => 'unbregenzte Zeit', \r
-'none found' => 'nichts gefunden', \r
-'nonetworkname' => 'Kein Netzwerkname wurde eingegeben', \r
-'noservicename' => 'Kein Dienstname wurde eingegeben', \r
-'not a valid ca certificate' => 'Kein gültiges CA Zertifikat.', \r
-'not enough disk space' => 'Nicht genügend Plattenplatz vorhanden', \r
-'not present' => '<B>Nicht</B> vorhanden', \r
-'not running' => 'nicht gestartet', \r
-'november' => 'November', \r
-'ntp configuration' => 'NTP-Konfiguration', \r
-'ntp must be enabled to have clients' => 'Um Clients annehmen zu können, muß NTP vorher aktiviert sein.', \r
-'ntp server' => 'NTP-Server', \r
-'ntp syncro disabled' => 'NTP-Synchronisierung deaktiviert', \r
-'ntp syncro enabled' => 'NTP-Synchronisierung aktiviert', \r
-'ntpd restarted' => 'ntpd neu gestartet', \r
-'number' => 'Nummer:', \r
-'october' => 'Oktober', \r
-'older' => 'Älter', \r
-'online help en' => 'Online-Hilfe (auf Englisch)', \r
-'only digits allowed in holdoff field' => 'Im Holdoff-Feld sind nur Ziffern erlaubt', \r
-'only digits allowed in max retries field' => 'Im Feld &quot;Maximale Wiederholversuche&quot; sind nur Ziffern erlaubt.', \r
-'only digits allowed in the idle timeout' => 'Im Feld &quot;Leerlauf-Wartezeit&quot; sind nur Ziffern erlaubt.', \r
-'only red' => 'Nur ROT', \r
-'open to all' => 'Überschreibe externen Zugang zu ALL', \r
-'openssl produced an error' => 'OpenSSL hat einen Fehler verursacht', \r
-'options' => 'Optionen', \r
-'options fw' => 'Firewall Optionen', \r
-'optionsfw portlist hint' => 'Die Liste der Ports muss durch ein Komma getrennt werden (z.B. 137,138). Sie können maximal bis zu 15 Ports pro Protokoll angeben.', \r
-'optionsfw warning' => 'Verändern dieser Optionen bedingt einen Neustart der Firewall', \r
-'orange' => 'ORANGE', \r
-'organization cant be empty' => 'Organisation darf nicht leer sein.', \r
-'organization name' => 'Name der Organisation', \r
-'organization too long' => 'Organisation ist zu lang; sie sollte nicht länger als 60 Zeichen lang sein.', \r
-'original' => 'Original', \r
-'other countries' => 'Andere Länder', \r
-'other login script' => 'Anderes Anmeldeskript', \r
-'out' => 'Aus', \r
-'outgoing traffic in bytes per second' => 'Abgehender Verkehr in Bytes pro Sekunde', \r
-'override mtu' => 'Überschreibe Standard MTU', \r
-'package failed to install' => 'Programmpaket konnte nicht installiert werden.', \r
-'pap or chap' => 'PAP oder CHAP', \r
-'password' => 'Passwort:', \r
-'password contains illegal characters' => 'Passwort enthält ungültige(s) Zeichen.', \r
-'password not set' => 'Passwort nicht angegeben.', \r
-'password too short' => 'Passwort ist zu kurz.', \r
-'passwords do not match' => 'Die Passwörter stimmen nicht überein.', \r
-'passwords must be at least 6 characters in length' => 'Passwörter müssen mind. 6 Zeichen lang sein', \r
-'percentage' => 'Prozent', \r
-'persistent' => 'Dauerhaft', \r
-'pfs yes no' => 'Perfect Forward Secrecy (PFS)', \r
-'phase1 group' => 'Phase1 Gruppe', \r
-'phonebook entry' => 'Telefonbuch-Eintrag:', \r
-'ping disabled' => 'Ping Antwort deaktivieren', \r
-'pkcs12 file password' => 'PKCS12 Datei-Passwort', \r
-'port' => 'Port', \r
-'port forwarding configuration' => 'Konfiguration der Port-Weiterleitung', \r
-'ports' => 'Ports', \r
-'pots' => 'Analoges Telefon', \r
-'ppp setup' => 'PPP-Einstellungen', \r
-'pppoe' => 'PPPoE', \r
-'pppoe settings' => 'Zusätzliche PPPoE-Einstellungen:', \r
-'pptp settings' => 'Zusätzliche PPTP-Einstellungen:', \r
-'pre-shared key is too short' => 'Pre-shared Schlüsel ist zu kurz', \r
-'present' => 'Vorhanden', \r
-'primary dns' => 'Primärer DNS:', \r
-'primary ntp server' => 'Primärer NTP-Server', \r
-'primary wins server address' => 'Primäre WINS-Server Adresse', \r
-'priority' => 'Priorität', \r
-'profile' => 'Profil', \r
-'profile deleted' => 'Profil gelöscht: ', \r
-'profile has errors' => 'Profil fehlerhaft', \r
-'profile made current' => 'Profil ausgewählt: ', \r
-'profile name' => 'Profilname:', \r
-'profile name not given' => 'Profilname nicht angegeben.', \r
-'profile saved' => 'Profil gespeichert: ', \r
-'profiles' => 'Profile:', \r
-'proto' => 'Proto', \r
-'protocol' => 'Protokoll', \r
-'proxy' => 'Proxy', \r
-'proxy access graphs' => 'Diagramme zur Proxyauslastung', \r
-'proxy log viewer' => 'Ansicht Proxy-Log', \r
-'proxy logs' => 'Proxy-Logdateien', \r
-'proxy port' => 'Proxy-Port', \r
-'psk' => 'PSK', \r
-'pulse' => 'Puls', \r
-'pulse dial' => 'Pulswahl:', \r
-'ram' => 'RAM-Speicher', \r
-'read sectors' => 'Sektoren lesen', \r
-'reboot' => 'Neustart', \r
-'reboot schedule' => 'Zeitsteuerung für IPCop Neustarts', \r
-'rebooting' => 'Starte neu ...', \r
-'rebooting ipcop' => 'Starte IPCop neu', \r
-'reconnection' => 'Wiederverbindung', \r
-'references' => 'Referenzen', \r
-'refresh' => 'Aktualisieren', \r
-'refresh index page while connected' => 'Aktualisere index.cgi Seite während der Verbindung', \r
-'refresh update list' => 'Aktualisiere Update-Liste', \r
-'registered user rules' => 'Sourcefire VRT Regeln für registrierte Benutzer', \r
-'released' => 'Freigegeben', \r
-'remark' => 'Anmerkung', \r
-'remark title' => 'Anmerkung:', \r
-'remote access' => 'Fernwartung', \r
-'remote host/ip' => 'Remote Host/IP', \r
-'remote logging' => 'Remote logging', \r
-'remote subnet' => 'Remote Subnetz:', \r
-'remote subnet is invalid' => 'Remote Subnetz ist ungültig.', \r
-'remove' => 'Löschen', \r
-'remove ca certificate' => 'CA-Zertifikat entfernen', \r
-'reserved dst port' => 'Dieser Zielport ist für die ausschließliche Benutzung durch IPCop reserviert:', \r
-'reserved src port' => 'Dieser Quellport ist für die ausschließliche Benutzung durch IPCop reserviert:', \r
-'reset' => 'Zurücksetzen', \r
-'resetting the vpn configuration will remove the root ca, the host certificate and all certificate based connections' => 'Das Zurücksetzen der VPN-Konfiguration wird die Root-CA, die Host-Zertifikate und alle weiteren Zertifikate und alle zertifikatsbasierten Verbindungen entfernen', \r
-'restart' => 'Neustart', \r
-'restore' => 'Wiederherstellen', \r
-'restore defaults' => 'Voreinstellungen wiederherstellen', \r
-'restore hardware settings' => 'Hardware-Einstellungen wiederherstellen', \r
-'reverse sort' => 'In umgekehrter chronologischer Reihenfolge sortieren', \r
-'root certificate' => 'Root-Zertifikat', \r
-'root path' => 'Root-Pfad', \r
-'router ip' => 'IP-Adresse des Routers:', \r
-'routing table entries' => 'Einträge der Routing-Tabelle:', \r
-'rsvd dst port overlap' => 'Dieser Zielportbereich überlappt mit einem Port, der für die ausschließliche Benutzung durch IPCop reserviert ist:', \r
-'rsvd src port overlap' => 'Dieser Quellportbereich überlappt mit einem Port, der für die ausschließliche Benutzung durch IPCop reserviert ist:', \r
-'rules already up to date' => 'Regeln sind schon aktuell', \r
-'running' => 'LÄUFT', \r
-'saturday' => 'Samstag', \r
-'save' => 'Speichern', \r
-'save error' => 'Konfigurationsarchiv-Datei konnte nicht gespeichert werden', \r
-'script name' => 'Skriptname:', \r
-'secondary dns' => 'Sekundärer DNS:', \r
-'secondary ntp server' => 'Sekundärer NTP-Server', \r
-'secondary wins server address' => 'Sekundäre WINS-Server Adresse', \r
-'seconds' => 'sek.', \r
-'section' => 'Abschnitt', \r
-'sectors read from disk per second' => 'Von Platte gelesene Sektoren pro Sekunde', \r
-'sectors written to disk per second' => 'Auf Platte geschriebene Sektoren pro Sekunde', \r
-'secure shell server' => 'Secure Shell Server', \r
-'select' => 'Auswählen', \r
-'select dest net' => 'Auswahl Ziel-Netz', \r
-'select source net' => 'Auswahl Quell-Netz', \r
-'send cr' => 'ISP verlangt Zeilenrücklaufzeichen:', \r
-'september' => 'September', \r
-'serial' => 'serielle', \r
-'service' => 'Dienst', \r
-'service added' => 'Benutzerdefinierter Netzwerkdienst wurde hinzugefügt', \r
-'service name' => 'Name des Dienstes:', \r
-'service removed' => 'Benutzerdefinierter Netzwerkdienst wurde entfernt', \r
-'service updated' => 'Benutzerdefinierter Netzwerkdienst wurde aktualisiert', \r
-'servicename' => 'Dienstname', \r
-'services' => 'Dienste:', \r
-'services settings' => 'Firewall - Diensteeinstellungen', \r
-'set time now' => 'Stelle jetzt die Uhrzeit ein', \r
-'set time now help' => 'Um ein Synchronisationsereignis zu jeder Zeit in die Warteschlange zu stellen, drücken Sie die <i>Stelle jetzt die Uhrzeit ein</i> Schaltfläche. Bitte beachten Sie, daß Sie 5 Minuten, oder länger, warten müssen, bevor ein Sync-Ergeinis eintritt.', \r
-'settings' => 'Konfiguration', \r
-'shaping add options' => 'Dienst hinzufügen', \r
-'shaping list options' => 'Datenflußkontrolldienste', \r
-'shared' => 'shared', \r
-'shared memory' => 'Gemeins. Speicher', \r
-'show ca certificate' => 'CA Zertifikat anzeigen', \r
-'show certificate' => 'Zertifikat anzeigen', \r
-'show host certificate' => 'Host-Zertifikat anzeigen', \r
-'show root certificate' => 'Root-Zertifikat anzeigen', \r
-'shutdown' => 'Herunterfahren', \r
-'shutdown control' => 'Herunterfahren', \r
-'shutdown2' => 'Herunterfahren:', \r
-'shutting down' => 'Fahre herunter', \r
-'shutting down ipcop' => 'Fahre IPCop herunter', \r
-'size' => 'Größe', \r
-'snort hits' => 'Gesamtanzahl der aktivierten Intrusion-Regeln für', \r
-'sort ascending' => 'Sortiere aufsteigend', \r
-'sort descending' => 'Sortiere absteigend', \r
-'sound' => 'Klang', \r
-'source' => 'Quelle', \r
-'source ip' => 'Quell-IP-Adresse', \r
-'source ip and port' => 'Quell-IP:Port', \r
-'source ip bad' => 'Ungültige Quell-IP-Adresse.', \r
-'source ip in use' => 'Benutzte Quell-IP:', \r
-'source ip or net' => 'Quellen-IP oder Netz', \r
-'source net' => 'Quell-Netz', \r
-'source network' => 'Quell-IP, oder Netzwerk (leer für "ALL"):', \r
-'source port' => 'Quell-Port', \r
-'source port in use' => 'Benutzter Quell-Port:', \r
-'source port numbers' => 'Quell-Port muß ein(e) gültige(r) Port-Nummer oder Port-Bereich sein.', \r
-'source port overlaps' => 'Quell-Port-Bereich überlappt mit einem bereits definierten Port-Bereich.', \r
-'speaker off' => 'Lautsprecher aus:', \r
-'speaker on' => 'Lautsprecher ein:', \r
-'squid extension methods' => 'Ihre <tt>extension_methods</tt> Liste', \r
-'squid extension methods invalid' => 'Ihre  \'extension_methods\' Liste darf nur Worte aus Großbuchstaben und Ziffer enthalten, die mittels eines Leerzeichens getrennt werden.', \r
-'src port' => 'Quell-Port', \r
-'srcprt range overlaps' => 'Quell-Port-Bereich überlappt mit einem bereits definierten Port.', \r
-'srcprt within existing' => 'Quell-Port befindet sich innnerhalb eines bereits definierten Port-Bereichs.', \r
-'ssdmz pinholes' => 'DMZ-Schlupflöcher', \r
-'ssh access' => 'SSH-Zugriff', \r
-'ssh fingerprint' => 'Fingerabdruck', \r
-'ssh host keys' => 'SSH Host Schlüssel', \r
-'ssh is disabled' => 'Secure Shell ist deaktiviert.  Halte an.', \r
-'ssh is enabled' => 'Secure Shell ist aktiviert.  Starte neu.', \r
-'ssh key' => 'Schlüssel', \r
-'ssh key size' => 'Länge (bits)', \r
-'ssh keys' => 'Authentifizierung auf Basis öffentlicher Schlüssel zulassen', \r
-'ssh no auth' => 'Sie haben keinerlei Authentifizierungverfahren zugelassen; dies wird Ihre Anmeldung verhindern', \r
-'ssh passwords' => 'Passwortbasierte Authentifizierung zulassen', \r
-'ssh portfw' => 'TCP-Weiterleitung zulassen', \r
-'ssh1 disabled' => 'SSHv1 ist deaktiviert, ein Client der Version 2 wird benötigt.', \r
-'ssh1 enabled' => 'SSHv1 ist aktiviert, Clients mit alten Versionen werden unterstützt.', \r
-'ssh1 support' => 'Unterstützung für Version 1 des SSH-Protokolls (wird nur für alte Clients benötigt)', \r
-'ssnetwork status' => 'Netzwerk-Status', \r
-'sspasswords' => 'Passwörter', \r
-'ssport forwarding' => 'Port-Weiterleitung', \r
-'ssproxy graphs' => 'Proxy-Diagramme', \r
-'sssystem status' => 'System-Status', \r
-'sstraffic graphs' => 'Netzwerk-Diagramme', \r
-'standard login script' => 'Standard-Anmeldeskript', \r
-'start address' => 'Anfangsadresse:', \r
-'state or province' => 'Bundesstat oder Provinz', \r
-'static ip' => 'Statisch IP', \r
-'status' => 'Status', \r
-'status information' => 'Statusinformationen', \r
-'stopped' => 'ANGEHALTEN', \r
-'subject' => 'Betreff', \r
-'subnet is invalid' => 'Netzmaske ist ungültig', \r
-'subscripted user rules' => 'Sourcefire VRT Regeln mit Abonnement', \r
-'successfully refreshed updates list' => 'Update-Liste erfolgreich aktualisiert.', \r
-'summaries kept' => 'Zusammenfassungen aufheben für', \r
-'sunday' => 'Sonntag', \r
-'swap' => 'Swap', \r
-'swap usage per' => 'Nutzung von Auslagerungsspeicher (Swap) pro', \r
-'system cpu' => 'System CPU', \r
-'system cpu usage' => 'System CPU Nutzung', \r
-'system graphs' => 'System-Diagramme', \r
-'system log viewer' => 'Betrachter der System-Logdateien', \r
-'system logs' => 'System-Logdateien', \r
-'system status information' => 'System-Statusinformationen', \r
-'telephone not set' => 'Telefonnummer nicht angegeben.', \r
-'the following update was successfully installed' => 'Das folgende Update wurde erfolgreich installiert', \r
-'the statistics were last updated at' => 'Die Statistik wurde zuletzt aktualisiert am', \r
-'there are updates' => 'Für Ihr System sind Updates verfügbar. Im Abschnitt &quot;Updates&quot; erhalten Sie weitere Informationen dazu.', \r
-'there are updates available' => 'Für Ihr System sind Programm-Updates verfügbar. Es wird dringend empfohlen, daß Sie Ihr System baldmöglichst aktualisieren.', \r
-'there was no file upload' => 'Es wurde keine Datei hochgeladen', \r
-'this feature has been sponsored by' => 'Diese Funktion wurde gesponsort von', \r
-'this field may be blank' => 'Dieses Feld kann leer bleiben.', \r
-'this is not a valid archive' => 'Dies ist kein gültiges Archiv.', \r
-'this is not an authorised update' => 'Dies ist kein autorisiertes Update.', \r
-'this update is already installed' => 'Dieses Update wurde bereits installiert.', \r
-'thursday' => 'Donnerstag', \r
-'time' => 'Uhrzeit', \r
-'time date manually reset' => 'Datum/Zeit wurden manuell zurückgesetzt.', \r
-'time server' => 'Zeitserver', \r
-'timeout must be a number' => 'Wartezeit muss eine Zahl sein.', \r
-'title' => 'Titel', \r
-'to' => 'Bis', \r
-'to install an update' => 'Um ein Update zu installieren, laden Sie zuerst die folgende .tgz.gpg Datei hoch:', \r
-'toggle enable disable' => 'Aktivieren oder Deaktivieren', \r
-'tone' => 'Ton', \r
-'tone dial' => 'Tonwahl:', \r
-'total hits for log section' => 'Gesamte Treffer für Log Sektion', \r
-'traffic on' => 'Verkehr auf', \r
-'traffic shaping' => 'Traffic Shaping', \r
-'traffic shaping settings' => 'Einstellungen der Datenflußkontrolle', \r
-'transfer limits' => 'Transferbeschränkungen', \r
-'transparent on' => 'Transparent auf', \r
-'tuesday' => 'Dienstag', \r
-'type' => 'Typ', \r
-'unable to alter profiles while red is active' => 'Profile können nicht geändert werden, solange ROT aktiv ist.', \r
-'unable to contact' => 'Kann nicht erreicht werden', \r
-'unencrypted' => 'Nichtverschlüsselt', \r
-'unknown' => 'Unbekannt', \r
-'unnamed' => 'Unbenannt', \r
-'update' => 'Aktualisieren', \r
-'update time' => 'Aktualisiere die Uhrzeit:', \r
-'update transcript' => 'Aktualisieren', \r
-'updates' => 'Updates', \r
-'updates installed' => 'Updates wurden installiert', \r
-'updates is old1' => 'Ihre Update-Datei ist ', \r
-'updates is old2' => 'Tage alt. Wir empfehlen Ihnen, Ihr System über die &quot;Updates&quot;-Seite zu aktualisieren.', \r
-'uplink speed' => 'Uplink-Geschwindigkeit (kBit/sek)', \r
-'upload' => 'Hochladen', \r
-'upload a certificate' => 'Ein Zertifikat hochladen:', \r
-'upload a certificate request' => 'Eine Zertifikatsanfrage hochladen:', \r
-'upload ca certificate' => 'CA Zertifikat hochladen', \r
-'upload fcdsl.o' => 'Fcdsl.o hochladen', \r
-'upload file' => 'Datei zum hochladen', \r
-'upload p12 file' => 'PKCS12 Datei hochladen', \r
-'upload successful' => 'Erfolgreich hochgeladen.', \r
-'upload synch.bin' => 'Synch.bin hochladen', \r
-'upload update file' => 'Lade die Update-Datei hoch:', \r
-'upstream password' => 'Proxy-Passwort:', \r
-'upstream proxy host:port' => 'Vorgelagerter Proxy (hostname:port)', \r
-'upstream username' => 'Proxy-Benutzername:', \r
-'uptime and users' => 'Uptime und Benutzer:', \r
-'usb modem on acm0' => 'USB Modem an ACM0', \r
-'usb modem on acm1' => 'USB Modem an ACM1', \r
-'usb modem on acm2' => 'USB Modem an ACM2', \r
-'usb modem on acm3' => 'USB Modem an ACM3', \r
-'use' => 'Einsatz', \r
-'use a pre-shared key' => 'Verwenden Sie einen Pre-Shared Schlüssel:', \r
-'use dov' => 'DOV (Data Over Voice) benutzen:', \r
-'use ibod' => 'Bandwidth on Demand (iBOD) benutzen:', \r
-'use ipcop red ip' => 'Die klassische ROTE IP, welche von IPCop während der Verbindung verwendet wird', \r
-'use only proposed settings' => 'Verwenden Sie nur die vorgeschlagenen Einstellungen.', \r
-'used' => 'Benutzt', \r
-'used memory' => 'Genutzter Speicher', \r
-'used swap' => 'Genutzter Swap', \r
-'user cpu' => 'Benutzer CPU', \r
-'user cpu usage' => 'Benutzer CPU', \r
-'username' => 'Benutzername:', \r
-'username not set' => 'Benutzername nicht angegeben.', \r
-'users department' => 'Abteilung des Benutzers', \r
-'users email' => 'E-mail Adresse des Benutzers', \r
-'users fullname or system hostname' => 'Voller Name oder System Hostaname des Benutzers', \r
-'valid root certificate already exists' => 'Ein gültiges Root-Zertifikat existiert bereits.', \r
-'vci number' => 'VCI-Nummer:', \r
-'virtual private networking' => 'Virtuelles Privates Netzwerk', \r
-'vpi number' => 'VPI-Nummer:', \r
-'vpn' => 'VPN', \r
-'vpn configuration main' => 'VPN-Konfiguration - Übersicht', \r
-'vpn delayed start' => 'Verzögerung bevor VPN gestartet wird (Sekunden)', \r
-'vpn delayed start help' => 'Falls notwendig, kann diese Verzögerung dazu verwendet werden, um Dynamic DNS Updates ordnungsgemäß anzuwenden. 60 ist ein gängiger Wert, wenn ROT (RED) eine dynamische IP Adresse ist.', \r
-'vpn mtu invalid' => 'MTU muß ein numerischer Wert sein!', \r
-'vpn on blue' => 'VPN auf BLAU', \r
-'waiting to synchronize clock' => 'Bitte warten, die Uhr wird synchronisiert', \r
-'warning messages' => 'Warnhinweise', \r
-'web hits' => 'Gesamtanzahl der Websites zum ausgewählten Kriterium', \r
-'web proxy' => 'Web-Proxy', \r
-'web proxy configuration' => 'Webproxy-Konfiguration', \r
-'web server' => 'Web-Server', \r
-'website' => 'Website', \r
-'wednesday' => 'Mittwoch', \r
-'week' => 'Woche', \r
-'weeks' => 'Wochen', \r
-'wildcards' => 'Wildcards', \r
-'wireless' => 'Wireless', \r
-'wireless config added' => 'Wireless Konfiguration hinzugefügt', \r
-'wireless config changed' => 'Wireless Konfiguration geändert', \r
-'wireless configuration' => 'Wireless-Konfiguration', \r
-'written sectors' => 'Sektoren schr.', \r
-'xtaccess all error' => 'Sie können einen externen Zugang nicht auf \'ALL\' setzen - dies erfolgt in den Port-Weiterleitungsregeln.', \r
-'year' => 'Jahr', \r
-'yes' => 'Ja', \r
-'you can only define one roadwarrior connection when using pre-shared key authentication' => 'Sie können nur eine Roadwarrior Verbindung definieren, wenn die Pre-shared Schlüsselauthentifizierung verwendet wird.<br/>Entweder haben Sie bereits eine Roadwarrior Verbindung mit Pre-shared Schlüsselauthentifizierung, oder Sie versuchen gerade eine hinzuzufügen.', \r
-'your department' => 'Ihre Abteilung', \r
-'your e-mail' => 'Ihre E-mail Adresse', \r
\r
-); \r
+# German (de) Data File 
+#
+# This file is part of the IPCop Firewall.
+# 
+# IPCop 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.
+# 
+# IPCop 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 IPCop; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+# 
+# (c) The SmoothWall Team
+# 
+# IPCop translation
+# (c) 2003 Dirk Loss, Ludwig Steininger, Michael Knappe, Michael Linke,
+# Richard Hartmann, Ufuk Altinkaynak, Gerhard Abrahams, Benjamin Kohberg,
+# Samuel Wiktor 
+#
+
+%tr = ( 
+%tr, 
+'a ca certificate with this name already exists' => 'Ein CA-Zertifikat mit diesem Namen existiert bereits.', 
+'a connection with this common name already exists' => 'Eine Verbindung mit diesem gemeinsamen Namen existiert bereits.', 
+'a connection with this name already exists' => 'Eine Verbindung mit diesem Namen existiert bereits.', 
+'access allowed' => 'Zugriff erlaubt von:', 
+'access refused with this oinkcode' => 'Zugriff mit diesem Oink Code verweigert', 
+'action' => 'Aktion', 
+'add' => 'Hinzufügen', 
+'add a host' => 'Host hinzufügen:', 
+'add a new rule' => 'Neue Regel hinzufügen:', 
+'add device' => 'Gerät hinzufügen', 
+'add network' => 'Netzwerk hinzufügen', 
+'add new alias' => 'Neue Alias-Adresse hinzufügen:', 
+'add new lease' => 'Neue Zuordnung definieren', 
+'add service' => 'Dienst hinzufügen', 
+'add xtaccess' => 'Externen Zugang hinzugefügt', 
+'added from dhcp lease list' => 'hinzugefügt von der DHCP Zuordnungsliste', 
+'admin user password has been changed' => 'Passwort für Benutzer admin wurde geändert.', 
+'administrator user password' => 'Passwort für Benutzer &quot;admin&quot;:', 
+'adsl settings' => 'ADSL-Einstellungen', 
+'advanced' => 'Erweitert', 
+'again' => 'Wiederholung:', 
+'alcatelusb help' => 'Um das Speedtouch USB Modem zu verwenden, müssen Sie die Firmware in Ihre IPCop Box hochladen. Bitte laden sie das <b>Embedded Firmware</b> Paket von speedtouch.com herunter, entpacken es und laden dann die passende Datei für Ihr Modem hoch: KQD6_3.xxx für Revisionsnummern <4 oder ZZZL_3.xxx für Rev.=4 mittels des unten angegebenen Formulars.', 
+'alcatelusb upload' => 'Speedtouch USB Firmware hochladen', 
+'alias ip' => 'Alias-IP-Adresse', 
+'aliases' => 'Aliase', 
+'aliases not active' => 'Aliase-Adresse wird erst aktiviert, wenn Ihr ROTES Interface STATISCH ist', 
+'all' => 'Alle', 
+'all interfaces' => 'Alle Schnittstellen', 
+'all updates installed' => 'Alle Updates installiert', 
+'alt dialup' => 'Einwahl', 
+'alt home' => 'Startseite', 
+'alt information' => 'Information', 
+'alt logs' => 'Logs', 
+'alt services' => 'Dienste', 
+'alt system' => 'System', 
+'alt vpn' => 'VPNs', 
+'and' => 'Und', 
+'ansi t1.483' => 'ANSI T1.483', 
+'apply' => 'Jetzt anwenden', 
+'april' => 'April', 
+'archive not exist' => 'Konfigurationsarchiv existiert nicht', 
+'are you sure' => 'Sind Sie sicher?', 
+'arp table entries' => 'Einträge der ARP-Tabelle:', 
+'august' => 'August', 
+'authentication' => 'Authentifizierung:', 
+'automatic' => 'Automatisch', 
+'available updates' => 'Verfügbare Updates:', 
+'average' => 'Durchschnitt', 
+'avoid dod' => 'Benutzen Sie diese Option nicht mit Dial on Demand! Wird hautpsächlich verwendet, wenn ihr IPCop sich hinter einem Router befindet. Ihre ROTE IP muß sich innerhalb eines der drei reservierten Netzwerkbereiche befinden z.B. 10/8, 172.16/12, 192.168/16.', 
+'back' => 'ZURÜCK', 
+'backup' => 'Datensicherung', 
+'backup config floppy' => 'Backup-Konfiguration - Diskette', 
+'backup configuration' => 'Backup-Konfiguration:', 
+'backup sets' => 'Datensicherungssätze', 
+'backup to floppy' => 'Datensicherung auf Diskette', 
+'backupprofile' => 'Falls die Wiederverbindung scheitert, auf Profil umschalten', 
+'bad characters in script field' => 'Nicht erlaubte Zeichen im Skriptnamen', 
+'bad characters in the telephone number field' => 'Nicht erlaubte(s) Zeichen im Feld Telefonnummer.', 
+'bad destination range' => 'Der erste Wert des Zielportbereichs ist größer oder gleich dem zweiten Wert.', 
+'bad ignore filter' => 'Falscher &quot;Ignorieren&quot;-Filter:', 
+'bad return code' => 'Das Hilfsprogramm hat einen Fehlercode gemeldet', 
+'bad source range' => 'Der erste Wert des Quellportbereich ist größer oder gleich dem zweiten Wert.', 
+'beep when ppp connects or disconnects' => 'Piepen, wenn IPCop verbindet oder trennt', 
+'behind a proxy' => 'Hinter einem Proxy:', 
+'bewan adsl pci st' => 'Bewan ADSL PCI ST', 
+'bewan adsl usb' => 'Bewan ADSL USB', 
+'blue' => 'BLAU', 
+'blue access' => 'Zugriff auf Blau', 
+'blue interface' => 'Blaues Interface', 
+'broadcast' => 'Broadcast', 
+'broken pipe' => 'Zerbrochene Pipe', 
+'buffered memory' => 'Gepuff. Speicher', 
+'buffers' => 'Puffer', 
+'bytes per second' => 'Bytes pro Sekunde', 
+'ca certificate' => 'CA Zertifikat', 
+'ca name' => 'CA Name', 
+'cache management' => 'Cache Verwaltung', 
+'cache size' => 'Cache-Größe (MB):', 
+'cached' => 'zwischengespeichert', 
+'cached memory' => 'Cache Speicher', 
+'cancel' => 'Abbrechen', 
+'cannot enable both nat traversal and compression' => 'NAT Traversal und Kompression können nicht gleichzeitig aktiviert sein.', 
+'cannot enable ntp without specifying primary' => 'NTP kann nicht aktiviert werden, ohne vorherige Eingabe in \'primär\'.', 
+'cannot specify secondary dns without specifying primary' => 'Sekundärer DNS kann nicht ohne primären angegeben werden.', 
+'cannot specify secondary ntp without specifying primary' => 'Kann ohne ersten NTP Server keinen zweiten spezifizieren', 
+'cannot specify secondary wins without specifying primary' => 'Sekundärer WINS kann ohne einen primären nicht angegeben werden.', 
+'cant change certificates' => 'Kann Zertifikate nicht ändern.', 
+'cant enable xtaccess' => 'Die zugehörige Port-Weiterleitungsregel ist deaktiviert, daher können Sie den externen Zugang für diese Regel nicht aktivieren.', 
+'cant start openssl' => 'Kann OpenSSL nicht starten', 
+'caps all' => 'ALLE', 
+'capsclosed' => 'BEENDET', 
+'capsopen' => 'OFFEN', 
+'capswarning' => 'WARNUNG', 
+'cert' => 'Zertifikat', 
+'certificate' => 'Zertifikat', 
+'certificate authorities' => 'Zertifizierungsstellen (CAs)', 
+'certificate does not have a valid ca associated with it' => 'Mit dem Zertifikat ist keine gültige CA verbunden.', 
+'certificate file move failed' => 'Verschieben der Zertifikatsdatei fehlgeschlagen', 
+'cfg restart' => 'Nach dem Wiederherstellen eines Konfigurationsarchivs wird ein Neustart empfohlen.', 
+'chain' => 'Verknüpfung', 
+'change passwords' => 'Passwörter&nbsp;ändern', 
+'check vpn lr' => 'Überprüfen', 
+'city' => 'Stadt', 
+'clear cache' => 'Zwischenspeicher löschen', 
+'clenabled' => 'Uhrzeit dem lokalen Netzwerk zur Verfügung stellen', 
+'click to disable' => 'Aktiviert (klicken, um zu deaktivieren)', 
+'click to enable' => 'Deaktiviert (klicken, um zu aktivieren)', 
+'clock has not been synchronized' => 'Die Uhr wurde nicht synchronisiert', 
+'clock last synchronized at' => 'Die Uhr wurde zuletzt synchronisiert um', 
+'common name' => 'Gemeinsamer Name', 
+'compression' => 'Kompression:', 
+'computer to modem rate' => 'Übertragungsrate zwischen Computer und Modem:', 
+'concentrator name' => 'Name des Konzentrators:', 
+'confirmation' => 'Bestätigung', 
+'connect on ipcop restart' => 'Verbinden bei IPCop-Neustart', 
+'connect the modem' => 'Das Modem anschließen', 
+'connect timeout' => 'Anwahl-Wartezeit:', 
+'connected' => 'Verbunden', 
+'connecting' => 'Baue Verbindung auf...', 
+'connection' => 'Verbindung', 
+'connection debugging' => 'Verbindungs-Debugging', 
+'connection status and controlc' => 'Verbindungsstatus und -kontrolle:', 
+'connection tracking' => 'IPTables-Verbindungsverfolgung', 
+'connection type' => 'Verbindungstyp', 
+'connection type is invalid' => 'Verbindungstyp ist ungültig', 
+'connections' => 'Verbindungen', 
+'connections are associated with this ca.  deleting the ca will delete these connections as well.' => 'Es sind noch Verbindungen mit dieser CA verknüpft.  Das Löschen dieser CA wird diese Verbindungen ebenfalls löschen.', 
+'could not be opened' => 'konnte nicht geöffnet werden', 
+'could not connect to' => 'Konnte keine Verbindung herstellen mit', 
+'could not connect to www ipcop org' => 'Keine Verbindung zu www.ipcop.org möglich', 
+'could not create directory' => 'Verzeichnis konnte nicht erzeugt werden.', 
+'could not download latest patch list' => 'Die neueste Update-Liste konnte nicht heruntergeladen werden (keine Verbindung).', 
+'could not download latest updates' => 'Konnte die neuesten Updates nicht downloaden.', 
+'could not download the available updates list' => 'Die Update-Liste konnte nicht heruntergeladen werden.', 
+'could not open available updates file' => 'Die vorhandene Update-Datei konnte nicht geöffnet werden.', 
+'could not open installed updates file' => 'Datei mit Update-Liste konnte nicht geöffnet werden', 
+'could not open update information file' => 'Datei mit den Update-Information konnte nicht geöffnet werden. Die Update-Datei ist beschädigt.', 
+'could not retrieve common name from certificate' => 'Der Gemeinsame Name (CN) konnte nicht aus dem Zertifikat gelesen werden.', 
+'country' => 'Land', 
+'cpu usage per' => 'CPU-Nutzung pro', 
+'create' => 'Erzeuge', 
+'credits' => 'Dank an ..', 
+'cron server' => 'Cron-Server', 
+'current' => 'Aktuell', 
+'current aliases' => 'Aktuelle Alias-Adresse:', 
+'current dhcp leases on blue' => 'Aktuelle DHCP Zuordnungen auf Blau', 
+'current dynamic leases' => 'Aktuelle dynamische Zuordnungen', 
+'current fixed leases' => 'Aktuelle feste Zuordnungen', 
+'current hosts' => 'Aktuelle Hosts:', 
+'current profile' => 'Aktuelles Profil:', 
+'current rules' => 'Aktuelle Regeln:', 
+'custom networks' => 'Benutzerdefinierte Netzwerke', 
+'custom services' => 'Benutzerdefinierte Dienste', 
+'dat without key' => 'Ein verschlüsseltes Archiv kann ohne Schlüssel nicht wiederhergestellt werden.', 
+'date' => 'Datum', 
+'date not in logs' => 'Für den gesuchten Tag existiert kein (oder nur ein unvollständiges) Log', 
+'day' => 'Tag', 
+'day after' => 'Tag danach', 
+'day before' => 'Tag davor', 
+'days' => 'Tage', 
+'ddns hostname added' => 'Hostname für dynamischen DNS hinzugefügt', 
+'ddns hostname modified' => 'Hostname für dynamischen DNS geändert', 
+'ddns hostname removed' => 'Hostname für dynamischen DNS gelöscht', 
+'ddns minimize updates' => 'Updates minimieren: Vergleicht vor einem Update die DNS-IP-Adresse für Hostname "[host.]domain" gegen die ROTE IP-Addresse.', 
+'ddns noip prefix' => 'Um no-ip im Gruppenmodus zu benutzen, dem Hostnamen <b>%</b> hinzufügen', 
+'december' => 'Dezember', 
+'def lease time' => 'Standardzeit für Zuordnung', 
+'default lease time' => 'Haltezeit-Voreinstellung in min:', 
+'default networks' => 'Standard Netzwerke', 
+'default renewal time' => 'Standard-Aktualisierungszeit', 
+'default services' => 'Standard Dienste', 
+'delete' => 'Löschen', 
+'demon login script' => 'Demon-Anmeldeskript', 
+'description' => 'Beschreibung', 
+'dest ip and port' => 'Ziel-IP:Port', 
+'destination' => 'Ziel', 
+'destination ip' => 'Ziel-IP-Adresse', 
+'destination ip bad' => 'Ungültige Ziel-IP-Adresse', 
+'destination ip or net' => 'Ziel-IP oder Netz', 
+'destination net' => 'Ziel-Netz', 
+'destination port' => 'Ziel-Port', 
+'destination port numbers' => 'Zielport muß ein(e) gültige(r) Portnummer oder Portbereich sein.', 
+'destination port overlaps' => 'Der Zielportbereich überlappt einen bereits bestehenden Portbereich.', 
+'detail level' => 'Detaillierungsgrad', 
+'device' => 'Gerät', 
+'devices on blue' => 'Geräte auf Blau', 
+'dhcp advopt add' => 'DHCP Option hinzufügen', 
+'dhcp advopt added' => 'DHCP Option hinzugefügt', 
+'dhcp advopt blank value' => 'Wert für DHCP Option darf nicht leer sein', 
+'dhcp advopt custom definition' => 'Definition ihrer benutzerdefinierten Option ', 
+'dhcp advopt definition' => 'Definition', 
+'dhcp advopt definition exists' => 'Definitionsoption existiert bereits. Sie können sie nur bearbeiten oder entfernen.', 
+'dhcp advopt edit' => 'DHCP Option editieren', 
+'dhcp advopt help' => 'Optionen auflisten', 
+'dhcp advopt list' => 'Liste der DHCP Optionen', 
+'dhcp advopt modified' => 'DHCP Option modifiziert', 
+'dhcp advopt name' => 'Optionsname', 
+'dhcp advopt removed' => 'DHCP Option entfernt', 
+'dhcp advopt scope' => 'Options-Wertebereich', 
+'dhcp advopt scope global' => 'Global', 
+'dhcp advopt scope help' => 'Globaler Bereich oder begenze Bereich auf überprüfte Schnittstellen', 
+'dhcp advopt unknown' => 'Name der DHCP Option wurde nicht erkannt', 
+'dhcp advopt value' => 'Optionswert', 
+'dhcp allow bootp' => 'BOOTP Clients zulassen', 
+'dhcp bootp pxe data' => 'Geben Sie optionale BOOTP PXE-Daten für diese feste Zuordnung ein', 
+'dhcp configuration' => 'DHCP-Konfiguration', 
+'dhcp mode' => 'DHCP', 
+'dhcp server' => 'DHCP-Server', 
+'dhcp server disabled' => 'DHCP-Server deaktiviert. Angehalten.', 
+'dhcp server disabled on blue interface' => 'DHCP-Server auf BLAUER Schnittstelle deaktiviert', 
+'dhcp server enabled' => 'DHCP-Server aktiviert. Starte neu.', 
+'dhcp server enabled on blue interface' => 'DHCP-Server auf BLAUER Schnittstelle aktviert', 
+'dial' => 'Verbinden', 
+'dial user password' => 'Passwort für Benutzer &quot;dial&quot;:', 
+'dial user password has been changed' => 'Passwort für Benutzer -dial- wurde geändert.', 
+'dialing mode' => 'Wählmodus:', 
+'dialup settings' => 'Einwahl-Einstellungen', 
+'disk access per' => 'Plattenzugriff je', 
+'disk usage' => 'Festplattenbelegung:', 
+'display' => 'Anzeige', 
+'display hostname in window title' => 'Hostname im Fenstertitel anzeigen', 
+'dmz' => 'DMZ', 
+'dmz pinhole configuration' => 'Einstellungen des DMZ-Schlupfloches', 
+'dmz pinhole rule added' => 'Regel für DMZ-Schlupfloch hinzugefügt; Starte DMZ-Schlupfloch neu', 
+'dmz pinhole rule removed' => 'Regel für DMZ-Schlupfloch entfernt; Starte DMZ-Schlupfloch neu', 
+'dmzpinholes for same net not necessary' => 'DMZ-Schlupflöcher werden im gleichen Netz nicht benötigt. Wählen Sie ein anderes Quell- oder Ziel-Netz.', 
+'dns check failed' => 'Fehler bei DNS-Überprüfung', 
+'dns proxy server' => 'DNS-Proxyserver', 
+'do not log this port list' => 'Verwerfe diese Port-Liste kurz bevor sie protokolliert werden (reduziert Protokollgröße)', 
+'dod' => 'Dial-on-Demand-Modus', 
+'dod for dns' => 'Dial-on-Demand für DNS:', 
+'dod not compatible with ddns' => 'Dial on Demand ist nicht kompatibel mit dynamischen DNS Diensten', 
+'dod waiting' => 'Dial On Demand wartet', 
+'domain' => 'Domain', 
+'domain name' => 'Domainname', 
+'domain name suffix' => 'Domain-Name-Suffix:', 
+'domain not set' => 'Domain nicht eingegeben.', 
+'downlink speed' => 'Downlink-Geschwindigkeit (kBit/sek)', 
+'download ca certificate' => 'CA Zertifikat herunterladen', 
+'download certificate' => 'Zertifikate herunterladen', 
+'download host certificate' => 'Host Zertifikat herunterladen', 
+'download new ruleset' => 'Neuen Regelsatz herunterladen', 
+'download pkcs12 file' => 'PKCS12 Datei herunterladen', 
+'download root certificate' => 'Root Zertifikat herunterladen', 
+'dpd action' => 'Aktion für Dead Peer Detection', 
+'driver' => 'Treiber', 
+'dst port' => 'Ziel-Port', 
+'dstprt range overlaps' => 'Der Zielportbereich überlappt mit einem bereits definierten Port.', 
+'dstprt within existing' => 'Der Zielport liegt innerhalb eines bereits definierten Portbereichs.', 
+'duplicate ip' => 'IP-Adresse doppelt eingegeben', 
+'duplicate ip bold' => 'Doppelte Adressen sind <b>fett</b> gedruckt', 
+'duplicate mac' => 'Doppelte MAC-Adresse eingegeben', 
+'duplicate name' => 'Dieser Name wird bereits benutzt. Bitte wählen Sie einen anderen.', 
+'dyn dns source choice' => 'Dynamic DNS Anbieter werden eine IP-Adresse für diesen IPCop erhalten von:', 
+'dynamic dns' => 'Dynamischer DNS', 
+'dynamic dns client' => 'Dynamischer DNS-Client', 
+'e-mail address too long' => 'E-mail Adresse ist zu lang; sie sollte nicht länger als 40 Zeichen sein.', 
+'eciadsl help' => 'Um ein ECI PCI-Modem nutzen zu können, müssen Sie zuerst die Treiber-Software zur IPCop-Box hochladen. Laden Sie zuerst den Tarball von ECIADSL herunter und laden Sie dann die Datei <B>synch.bin</B> über das untenstehende Formblatt zu IPCop hoch.', 
+'eciadsl upload' => 'Hochladen der ECI ADSL Datei synch.bin', 
+'edit' => 'Bearbeiten', 
+'edit a rule' => 'Existierende Regel bearbeiten:', 
+'edit advanced settings when done' => 'Erweiterte Einstellungen bearbeiten, wenn fertig.', 
+'edit an existing alias' => 'Einen bestehenden Alias bearbeiten', 
+'edit an existing host' => 'Einen bestehenden Host hinzufügen', 
+'edit an existing lease' => 'Eine existierende Zuordnung bearbeiten', 
+'edit device' => 'Gerät bearbeiten', 
+'edit hosts' => 'Hosts bearbeiten', 
+'edit network' => 'Netzwerk bearbeiten', 
+'edit service' => 'Dienst bearbeiten', 
+'eg' => 'z.B.:', 
+'empty' => 'Leer', 
+'enable ignore filter' => '&quot;Ignorieren&quot;-Filter ein', 
+'enable javascript' => 'Javascript aktivieren', 
+'enable wildcards' => 'Wildcards erlauben:', 
+'enabled' => 'Aktiviert:', 
+'enabled on' => 'Aktiviert auf', 
+'enabledtitle' => 'Aktiviert', 
+'encapsulation' => 'Encapsulation', 
+'encrypted' => 'Verschlüsselt', 
+'end address' => 'Endadresse:', 
+'err bk 1' => 'Fehler beim Erzeugen des Archivs', 
+'err bk 2 key' => 'Fehler beim Erzeugen der Schlüsseldatei', 
+'err bk 3 tar' => 'Fehler beim Anhängen der Datei ans Archiv', 
+'err bk 4 gz' => 'Fehler beim Komprimieren des Archivs', 
+'err bk 5 encrypt' => 'Fehler beim Verschlüsseln des Archivs', 
+'err rs 1' => 'Fehler beim Wiederherstellen des Archivs', 
+'err rs 6 decrypt' => 'Fehler beim Entschlüsseln des Archivs', 
+'err rs 7 untartst' => 'Ungültiges entschlüsseltes Archiv', 
+'err rs 8 untar' => 'Fehler beim un-tar-en des Archivs', 
+'error messages' => 'Fehlermeldungen:', 
+'esp encryption' => 'ESP Verschlüsselung:', 
+'esp grouptype' => 'ESP Gruppentyp:', 
+'esp integrity' => 'ESP Integrität:', 
+'esp keylife' => 'Lebensdauer des ESP Schlüssels:', 
+'esp keylife should be between 1 and 24 hours' => 'ESP Schlüssel-Lebensdauer sollte zwischen 1 und 24 Stunden betragen.', 
+'every' => 'Jeden', 
+'excluding buffers and cache' => '-/+ Puffer/Zwischenspeicher', 
+'expected' => 'Erwartet', 
+'expires' => 'Ablaufdatum', 
+'export' => 'Export', 
+'external access' => 'Externer Zugang', 
+'external access configuration' => 'Einstellungen für externen Zugang', 
+'external access rule added' => 'Regel für externen Zugang hinzugefügt; Starte Zugangskontroller neu', 
+'external access rule removed' => ' Regel für externen Zugang entfernt; Starte Zugangskontroller neu', 
+'external aliases configuration' => 'Externe Alias-Konfiguration', 
+'february' => 'Februar', 
+'fetch ip from' => 'Schätze die echte öffentliche IP-Adresse mit Hilfe eines externen Servers', 
+'filename' => 'Dateiname', 
+'filesystem full' => 'Dateisystem voll', 
+'firewall' => 'Firewall', 
+'firewall hits' => 'Gesamtanzahl der Firewall-Treffer für', 
+'firewall log' => 'Firewall-Protokoll', 
+'firewall log viewer' => 'Betrachter der Firewall-Logdateien', 
+'firewall logs' => 'Firewall-Logdateien', 
+'firmware' => 'Firmware', 
+'firmware upload' => 'Hochladen der Firmware/Treiber', 
+'fixed ip lease added' => 'Feste IP-Zuordnung hinzugefügt', 
+'fixed ip lease modified' => 'Feste IP-Zuordnung geändert', 
+'fixed ip lease removed' => 'Feste IP-Zuordnung gelöscht', 
+'force update' => 'Aktualisierung erzwingen', 
+'forwarding rule added' => 'Weiterleitungsregel hinzugefügt. Starte Weiterleitung neu', 
+'forwarding rule removed' => 'Weiterleitungsregel entfernt. Starte Weiterleitung neu', 
+'forwarding rule updated' => 'Weiterleitungsregel aktualisiert; starte Weiterleitung neu', 
+'free' => 'Frei', 
+'free memory' => 'Freier Speicher', 
+'free swap' => 'Freier Swap', 
+'friday' => 'Freitag', 
+'fritzdsl help' => 'Um eines der folgenden Fritz!DSL Modems (Fritz!Card DSL=fcdsl / Fritz!CardDSL SL=fcdslsl / Fritz!Card DSL V2.0=fcdsl2 / Fritz!Card DSL USB=fcdslusb / Fritz!Card DSL USB SL=fcdslslusb) nutzen zu können, müssen Sie ein Paket auf Ihre IPCop-Box laden. Bitte laden Sie den tarball entsprechend Ihrer Version von der IPCop-Webseite herunter und laden Sie dann die gesamte <b>fcdsl-(ihre_version).tgz</b> mit dem folgenden Formular hoch.', 
+'fritzdsl upload' => 'Fritz!DSL-Treiber hochladen', 
+'from' => 'Von', 
+'g.dtm' => 'G.dmt', 
+'g.lite' => 'G.lite', 
+'gateway' => 'Gateway', 
+'gateway ip' => 'Gateway-IP', 
+'generate a certificate' => 'Erzeuge ein Zertifikat:', 
+'generate root/host certificates' => 'Erzeuge Root/Host Zertifikate', 
+'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Die Erzeugung der Root und Host Zertifikate kann lange Zeit dauern.  Auf älterer Hardware kann es mehrere Minuten lang dauern. Bitte haben Sie etwas Geduld.', 
+'global settings' => 'Globale Einstellungen', 
+'graph' => 'Diagramm', 
+'graph per' => 'Diagramm pro', 
+'green' => 'GRÜN', 
+'green interface' => 'Grünes Interface', 
+'gui settings' => 'Benutzeroberfläche', 
+'gz with key' => 'Nur ein verschlüsseltes Archiv kann auf dieser Maschine wiederhergestellt werden.', 
+'hangup' => 'Trennen', 
+'hangup string' => 'Auflegen:', 
+'high' => 'Hoch', 
+'high memory usage' => 'Speicher wird knapp', 
+'holdoff' => 'Holdoff-Zeit in (Sekunden)', 
+'host' => 'Host', 
+'host certificate' => 'Host Zertifikat', 
+'host configuration' => 'Host-Konfiguration', 
+'host ip' => 'Host IP-Adresse', 
+'host to net vpn' => 'Host-zu-Netz Virtual Private Network (RoadWarrior)', 
+'hostname' => 'Hostname', 
+'hostname and domain already in use' => 'Hostname und Domain sind werden bereits benutzt.', 
+'hostname cant be empty' => 'Hostname darf nicht leer bleiben.', 
+'hostname not set' => 'Hostname nicht eingegeben.', 
+'hosts config added' => 'Hosts-Konfiguration hinzugefügt', 
+'hosts config changed' => 'Hosts-Konfiguration geändert', 
+'hours' => 'Stunden', 
+'hours2' => 'Stunden', 
+'ibod for dual isdn only' => 'iBOD kann nur bei ISDN-Kanalbündelung genutzt werden.', 
+'icmp selected but no type' => 'ICMP wurde zwar als Protokoll gewählt, es wurde aber kein ICMP-Typ angegeben.', 
+'icmp type' => 'ICMP-Typ', 
+'id' => 'ID', 
+'idle' => 'Leerlauf', 
+'idle cpu' => 'CPU Leerlauf', 
+'idle cpu usage' => 'Leerlauf CPU Nutzung', 
+'idle timeout' => 'Leerlauf-Wartezeit in min (0 zum Deaktivieren):', 
+'idle timeout not set' => 'Leerlauf-Wartezeit nicht angegeben.', 
+'ids log viewer' => 'Ansicht IDS-Log', 
+'ids logs' => 'IDS-Logdateien', 
+'ids rules license' => 'Um  Sourcefire VRT Zertifizierte Regeln zu nutzen, müssen Sie ich registrieren auf', 
+'ids rules license2' => 'Bestätigen Sie die Lizenz, empfangen Sie Ihr Passwort per email und gehen Sie auf die Website. Gehen Sie zu', 
+'ids rules license3' => 'klicken Sie den \'Get Code\' Knopf am Fuß und kopieren den 40-Zeichen Oink Code in das untere Feld.', 
+'ids rules update' => 'Snort Regeln Update', 
+'iface' => 'Iface', 
+'ignore filter' => '&quot;Ignorieren&quot;-Filter', 
+'ike encryption' => 'IKE Verschlüsselung:', 
+'ike grouptype' => 'IKE Gruppentyp:', 
+'ike integrity' => 'IKE Integrität:', 
+'ike lifetime' => 'IKE Lebensdauer:', 
+'ike lifetime should be between 1 and 8 hours' => 'IKE Lebensdauer sollte zwischen 1 und 8 Stunden betragen.', 
+'import' => 'Import', 
+'in' => 'Ein', 
+'incoming traffic in bytes per second' => 'Eingehender Verkehr in Bytes pro Sekunde', 
+'info' => 'Info', 
+'init string' => 'Initialisierung:', 
+'insert floppy' => 'Legen Sie eine formatierte Diskette in das Floppy-Laufwerk in IPCop und klicken auf <i>Datensicherung auf Diskette</i>, um die Systemeinstellungen zu sichern.  Überprüfen Sie das Ergebnis sorgfältig, um sicher zu sein, dass die Datensicherung vollständig und erfolgreich abgeschlossen wurde.<p>', 
+'install new update' => 'Installiere neues Update:', 
+'installed' => 'Installiert', 
+'installed updates' => 'Installierte Updates:', 
+'instant update' => 'Sofortiges Update', 
+'interface' => 'Schnittstelle', 
+'interfaces' => 'Schnittstellen:', 
+'internet' => 'INTERNET', 
+'intrusion detection' => 'Einbruchdetektierung', 
+'intrusion detection system' => 'Intrusion Detection System', 
+'intrusion detection system log viewer' => 'Betrachter der IDS-Logfiles', 
+'intrusion detection system2' => 'Intrusion Detection System:', 
+'invalid broadcast ip' => 'Ungültige Broadcast-IP', 
+'invalid cache size' => 'Ungültige Cache-Größe.', 
+'invalid characters found in pre-shared key' => 'Ungültige Zeichen im Pre-Shared Schlüssel gefunden.', 
+'invalid date entered' => 'Ungültiges Datum eingegeben.', 
+'invalid default lease time' => 'Ungültige Haltezeit-Voreinstellung.', 
+'invalid domain name' => 'Ungültiger Domainname.', 
+'invalid downlink speed' => 'Ungültige Downlink-Gerschwindigkeit.', 
+'invalid end address' => 'Ungültige Endadresse.', 
+'invalid fixed ip address' => 'Ungültige feste IP-Adresse', 
+'invalid fixed mac address' => 'Ungültige feste MAC-Adresse', 
+'invalid hostname' => 'Ungültiger Hostname.', 
+'invalid input' => 'Ungültige Eingabe', 
+'invalid input for authentication method' => 'Ungültige Eingabe für Authentifizierungsmethode.', 
+'invalid input for city' => 'Ungültige Eingabe für Stadt.', 
+'invalid input for country' => 'Ungültige Eingabe für das Land', 
+'invalid input for department' => 'Ungültige Eingabe für die Abteilung', 
+'invalid input for e-mail address' => 'Ungültige Eingabe für die E-mail Adresse', 
+'invalid input for esp keylife' => 'Ungültige Eingabe für ESP Schlüssel-Lebensdauer', 
+'invalid input for hostname' => 'Ungültige Eingabe für Hostname', 
+'invalid input for ike lifetime' => 'Ungültige Eingabe für IKE Lebensdauer', 
+'invalid input for name' => 'Ungültige Eingabe für vollen Namen des Benutzers oder des System Hostnamens', 
+'invalid input for oink code' => 'Ungültige Eingabe für Oink Code', 
+'invalid input for organization' => 'Ungültige Eingabe für Organisation', 
+'invalid input for remote host/ip' => 'Ungültige Eingabe für Remote Host/IP', 
+'invalid input for state or province' => 'Ungültige Eingabe für Bundesstaat oder Provinz.', 
+'invalid ip' => 'Ungültige IP-Adresse', 
+'invalid keep time' => 'Die Aufbewahrungszeit muss eine gültige Zahl sein', 
+'invalid key' => 'Ungültiger Schlüssel.', 
+'invalid loaded file' => 'Ungültige geladene Datei', 
+'invalid local-remote id' => 'Falls verwendet, dürfen leftid und rightid nicht gleich sein, und mit einem "@"-Zeichen beginnen. Dies sind leftid und rightid in der OpenSwan-Terminologie.', 
+'invalid logserver address' => 'Ungültige syslogd server Adresse', 
+'invalid max lease time' => 'Ungültige max. Haltezeit.', 
+'invalid maximum incoming size' => 'Ungültige max. ankommende Größe.', 
+'invalid maximum object size' => 'Ungültige max. Objektgröße.', 
+'invalid maximum outgoing size' => 'Ungültige max. abgehende Größe.', 
+'invalid md5sum' => 'Ungültige MD5-Summe.', 
+'invalid minimum object size' => 'Ungültige min. Objektgröße.', 
+'invalid netmask' => 'Ungültige Netzwerkmaske', 
+'invalid port' => 'Ungültiger Port. Bitte gültige Portnummer eingeben.', 
+'invalid port list' => 'Portlisten-Syntax lautet: port[,port]... wobei port in /etc/services vorkommt oder Nummer', 
+'invalid primary dns' => 'Ungültiger primärer DNS.', 
+'invalid primary ntp' => 'Ungültiger primärer NTP.', 
+'invalid secondary dns' => 'Ungültiger sekundärer DNS.', 
+'invalid secondary ntp' => 'Ungültiger sekundärer NTP.', 
+'invalid start address' => 'Ungültige Anfangsadresse.', 
+'invalid time entered' => 'Ungültige Zeit eingegeben.', 
+'invalid time period' => 'Unzulässiger Zeitabschnitt.', 
+'invalid uplink speed' => 'Ungültige Uplink-Geschwindigkeit.', 
+'invalid upstream proxy username or password setting' => 'Ungültige/r Remote-Proxy-Benutzername oder Passwort-Einstellung', 
+'invalid vpi vpci' => 'Ungültige VPI/VPCI-Einstellungen', 
+'invalid wins address' => 'Ungültige WINS Server Addresse.', 
+'invert' => 'Invertieren', 
+'ip address' => 'IP-Adresse', 
+'ip address in use' => 'IP-Adresse bereits vergeben', 
+'ip address outside subnets' => 'IP-Adresse ausserhalb der(s) lokalen Subnetze(s)', 
+'ip alias added' => 'Externer IP-Alias hinzugefügt', 
+'ip alias changed' => 'Externer IP-Alias geändert', 
+'ip alias removed' => 'Externer IP-Alias entfernt', 
+'ip info' => 'IP-Information', 
+'ipcop has now rebooted' => 'IPCop ist jetzt neu gestartet.', 
+'ipcop has now shutdown' => 'IPCop ist jetzt heruntergefahren.', 
+'ipcop side' => 'IPCop Seite:', 
+'ipcop side is invalid' => 'IPCop Seite ist ungültig.', 
+'ipcops hostname' => 'IPCop\'s Hostname', 
+'ipinfo' => 'IP-Info', 
+'isdn' => 'ISDN', 
+'isdn settings' => 'Zusätzliche ISDN-Einstellungen:', 
+'isdn1' => 'Einfaches ISDN', 
+'isdn2' => 'ISDN-Kanalbündelung', 
+'january' => 'Januar', 
+'javascript menu error1' => 'Wenn die Drop-down-Menus nicht funktionieren, deaktivieren Sie Javascript auf der', 
+'javascript menu error2' => 'Seite.', 
+'july' => 'Juli', 
+'june' => 'Juni', 
+'kernel' => 'Kernel', 
+'kernel logging server' => 'Kernel-Protokollierungs-Server', 
+'kernel version' => 'Kernel-Version:', 
+'lan' => 'LAN', 
+'languagepurpose' => 'Wählen Sie eine Sprache, in der IPCop angezeigt werden soll:', 
+'lease expires' => 'Zuordnung verfällt', 
+'legend' => 'Legende', 
+'line' => 'Leitung', 
+'loaded modules' => 'Geladene Module:', 
+'local ntp server specified but not enabled' => 'Lokaler NTP Server angegeben aber nicht aktiviert', 
+'local subnet' => 'Lokales Subnetz:', 
+'local subnet is invalid' => 'Lokales Subnet ist ungültig.', 
+'local vpn hostname/ip' => 'Lokaler VPN Hostname/IP', 
+'log' => 'Protokoll:', 
+'log enabled' => 'Log aktiviert', 
+'log lines per page' => 'Zeilen pro Seite', 
+'log server address' => 'Syslog Server', 
+'log settings' => 'Logdatei-Einstellungen', 
+'log summaries' => 'Log Übersicht', 
+'log summary' => 'Log Zusammenfassung', 
+'log viewer' => 'Protokollansicht', 
+'log viewing options' => 'Log Ansichts-Optionen', 
+'logging server' => 'Protokollierungs-Server', 
+'loginlogout' => 'Login/Logout', 
+'lookup failed' => 'Reverse Lookup gescheitert', 
+'low' => 'Niedrig', 
+'ls_dhcpd' => 'DHCP-Server:', 
+'ls_disk space' => 'Plattenplatz:', 
+'ls_free/swan' => 'VPN:', 
+'ls_httpd' => 'HTTP-Server:', 
+'ls_init' => 'Init:', 
+'ls_kernel' => 'Kernel und Firewall:', 
+'ls_modprobe' => 'Modul Ladeprogramm:', 
+'ls_pam_unix' => 'Lokale Benutzeranmeldungen:', 
+'ls_sshd' => 'Fern-Benutzeranmeldungen:', 
+'ls_syslogd' => 'Syslogd:', 
+'mac address' => 'MAC-Adresse', 
+'mac address in use' => 'MAC-Adresse bereits vergeben', 
+'main page' => 'Startseite', 
+'manual' => 'Manuell', 
+'manual control and status' => 'Manuelle Einstellung und Status:', 
+'manually' => 'Manuell', 
+'march' => 'März', 
+'marked' => 'Markiert', 
+'max incoming size' => 'Max. eingehende Größe (kB):', 
+'max lease time' => 'Max. Haltezeit in min:', 
+'max outgoing size' => 'Max. abgehende Größe (kB):', 
+'max renewal time' => 'Maximale Aktualisierungszeit', 
+'max retries not set' => 'Maximale Wiederholversuche nicht angegeben.', 
+'max size' => 'Max. Objektgröße (kB):', 
+'maximal' => 'Maximal', 
+'maximum retries' => 'Maximale Wiederholversuche:', 
+'may' => 'Mai', 
+'medium' => 'Mittel', 
+'memory' => 'Speicher:', 
+'memory usage per' => 'Speichernutzung pro', 
+'method' => 'Methode:', 
+'min size' => 'Min. Objektgröße (kB):', 
+'minutes' => 'Minuten', 
+'missing dat' => 'Verschlüsseltes Archiv wurde nicht gefunden', 
+'missing gz' => 'Nichtverschlüsseltes Archiv wurde nicht gefunden', 
+'modem' => 'Modem', 
+'modem configuration' => 'Modem-Konfiguration', 
+'modem on com1' => 'Modem an COM1', 
+'modem on com2' => 'Modem an COM2', 
+'modem on com3' => 'Modem an COM3', 
+'modem on com4' => 'Modem an COM4', 
+'modem on com5' => 'Modem an COM5', 
+'modem settings have errors' => 'Modemeinstellungen fehlerhaft', 
+'modem speaker on' => 'Modemlautsprecher an:', 
+'modulation' => 'Modulation', 
+'monday' => 'Montag', 
+'month' => 'Monat', 
+'months' => 'Monate', 
+'mounted on' => 'Mounted auf', 
+'name' => 'Name', 
+'name is invalid' => 'Name ist ungültig', 
+'name must only contain characters' => 'Name darf nur Buchstaben enthalten.', 
+'name too long' => 'Der volle Benutzername oder der System Hostname ist zu lang', 
+'nat-traversal' => 'Nat Traversal:', 
+'net' => 'Netz', 
+'net to net vpn' => 'Netz-zu-Netz Virtual Private Network', 
+'netmask' => 'Netzwerkmaske', 
+'network' => 'Netzwerk', 
+'network added' => 'Benutzerdefiniertes Netzwerk hinzugefügt', 
+'network configuration' => 'Netzwerk Konfiguration', 
+'network removed' => 'Benutzerdefiniertes Netzwerk entfernt', 
+'network status information' => 'Netzwerk-Statusinformationen', 
+'network time' => 'Benutze NTP-Server:', 
+'network time from' => 'Uhrzeit von einem Netzwerk Zeitserver ermitteln', 
+'network traffic graphs' => 'Diagramme zur Netzwerkauslastung', 
+'network updated' => 'Benutzerdefiniertes Netzwerk aktualisiert', 
+'networks settings' => 'Firewall - Netzwerkeinstellungen', 
+'new optionsfw later' => 'Ihre Modifikation(en) wird (werden) beim nächsten Neustart aktiv werden', 
+'new optionsfw must boot' => 'Sie müssen Ihren IPCop neu starten', 
+'newer' => 'Neuer', 
+'next address' => 'WIRD ENTFERNT', 
+'no' => 'Nein', 
+'no alcatelusb firmware' => 'Keine Alcatel USB ADSL-Firmware vorhanden. Bitte hochladen.', 
+'no cfg upload' => 'Keine Daten wurden hochgeladen', 
+'no dhcp lease' => 'Eine DHCP-Zuordnung konnte nicht empfangen werden', 
+'no eciadsl synch.bin file' => 'Keine ECI ADSL Datei synch.bin vorhanden. Bitte hochladen.', 
+'no fritzdsl driver' => 'Kein Fritz!DSL-Treiber vorhanden. Bitte hochladen.', 
+'no information available' => 'Keine Informationen verfügbar.', 
+'no modem selected' => 'Kein Modem ausgewählt', 
+'no set selected' => 'Es wurde kein Satz ausgewählt', 
+'no time limit' => 'unbregenzte Zeit', 
+'none found' => 'nichts gefunden', 
+'nonetworkname' => 'Kein Netzwerkname wurde eingegeben', 
+'noservicename' => 'Kein Dienstname wurde eingegeben', 
+'not a valid ca certificate' => 'Kein gültiges CA Zertifikat.', 
+'not enough disk space' => 'Nicht genügend Plattenplatz vorhanden', 
+'not present' => '<B>Nicht</B> vorhanden', 
+'not running' => 'nicht gestartet', 
+'november' => 'November', 
+'ntp configuration' => 'NTP-Konfiguration', 
+'ntp must be enabled to have clients' => 'Um Clients annehmen zu können, muß NTP vorher aktiviert sein.', 
+'ntp server' => 'NTP-Server', 
+'ntp syncro disabled' => 'NTP-Synchronisierung deaktiviert', 
+'ntp syncro enabled' => 'NTP-Synchronisierung aktiviert', 
+'ntpd restarted' => 'ntpd neu gestartet', 
+'number' => 'Nummer:', 
+'october' => 'Oktober', 
+'older' => 'Älter', 
+'online help en' => 'Online-Hilfe (auf Englisch)', 
+'only digits allowed in holdoff field' => 'Im Holdoff-Feld sind nur Ziffern erlaubt', 
+'only digits allowed in max retries field' => 'Im Feld &quot;Maximale Wiederholversuche&quot; sind nur Ziffern erlaubt.', 
+'only digits allowed in the idle timeout' => 'Im Feld &quot;Leerlauf-Wartezeit&quot; sind nur Ziffern erlaubt.', 
+'only red' => 'Nur ROT', 
+'open to all' => 'Überschreibe externen Zugang zu ALL', 
+'openssl produced an error' => 'OpenSSL hat einen Fehler verursacht', 
+'options' => 'Optionen', 
+'options fw' => 'Firewall Optionen', 
+'optionsfw portlist hint' => 'Die Liste der Ports muss durch ein Komma getrennt werden (z.B. 137,138). Sie können maximal bis zu 15 Ports pro Protokoll angeben.', 
+'optionsfw warning' => 'Verändern dieser Optionen bedingt einen Neustart der Firewall', 
+'orange' => 'ORANGE', 
+'organization cant be empty' => 'Organisation darf nicht leer sein.', 
+'organization name' => 'Name der Organisation', 
+'organization too long' => 'Organisation ist zu lang; sie sollte nicht länger als 60 Zeichen lang sein.', 
+'original' => 'Original', 
+'other countries' => 'Andere Länder', 
+'other login script' => 'Anderes Anmeldeskript', 
+'out' => 'Aus', 
+'outgoing traffic in bytes per second' => 'Abgehender Verkehr in Bytes pro Sekunde', 
+'override mtu' => 'Überschreibe Standard MTU', 
+'package failed to install' => 'Programmpaket konnte nicht installiert werden.', 
+'pap or chap' => 'PAP oder CHAP', 
+'password' => 'Passwort:', 
+'password contains illegal characters' => 'Passwort enthält ungültige(s) Zeichen.', 
+'password not set' => 'Passwort nicht angegeben.', 
+'password too short' => 'Passwort ist zu kurz.', 
+'passwords do not match' => 'Die Passwörter stimmen nicht überein.', 
+'passwords must be at least 6 characters in length' => 'Passwörter müssen mind. 6 Zeichen lang sein', 
+'percentage' => 'Prozent', 
+'persistent' => 'Dauerhaft', 
+'pfs yes no' => 'Perfect Forward Secrecy (PFS)', 
+'phase1 group' => 'Phase1 Gruppe', 
+'phonebook entry' => 'Telefonbuch-Eintrag:', 
+'ping disabled' => 'Ping Antwort deaktivieren', 
+'pkcs12 file password' => 'PKCS12 Datei-Passwort', 
+'port' => 'Port', 
+'port forwarding configuration' => 'Konfiguration der Port-Weiterleitung', 
+'ports' => 'Ports', 
+'pots' => 'Analoges Telefon', 
+'ppp setup' => 'PPP-Einstellungen', 
+'pppoe' => 'PPPoE', 
+'pppoe settings' => 'Zusätzliche PPPoE-Einstellungen:', 
+'pptp settings' => 'Zusätzliche PPTP-Einstellungen:', 
+'pre-shared key is too short' => 'Pre-shared Schlüsel ist zu kurz', 
+'present' => 'Vorhanden', 
+'primary dns' => 'Primärer DNS:', 
+'primary ntp server' => 'Primärer NTP-Server', 
+'primary wins server address' => 'Primäre WINS-Server Adresse', 
+'priority' => 'Priorität', 
+'profile' => 'Profil', 
+'profile deleted' => 'Profil gelöscht: ', 
+'profile has errors' => 'Profil fehlerhaft', 
+'profile made current' => 'Profil ausgewählt: ', 
+'profile name' => 'Profilname:', 
+'profile name not given' => 'Profilname nicht angegeben.', 
+'profile saved' => 'Profil gespeichert: ', 
+'profiles' => 'Profile:', 
+'proto' => 'Proto', 
+'protocol' => 'Protokoll', 
+'proxy' => 'Proxy', 
+'proxy access graphs' => 'Diagramme zur Proxyauslastung', 
+'proxy log viewer' => 'Ansicht Proxy-Log', 
+'proxy logs' => 'Proxy-Logdateien', 
+'proxy port' => 'Proxy-Port', 
+'psk' => 'PSK', 
+'pulse' => 'Puls', 
+'pulse dial' => 'Pulswahl:', 
+'ram' => 'RAM-Speicher', 
+'read sectors' => 'Sektoren lesen', 
+'reboot' => 'Neustart', 
+'reboot schedule' => 'Zeitsteuerung für IPCop Neustarts', 
+'rebooting' => 'Starte neu ...', 
+'rebooting ipcop' => 'Starte IPCop neu', 
+'reconnection' => 'Wiederverbindung', 
+'references' => 'Referenzen', 
+'refresh' => 'Aktualisieren', 
+'refresh index page while connected' => 'Aktualisere index.cgi Seite während der Verbindung', 
+'refresh update list' => 'Aktualisiere Update-Liste', 
+'registered user rules' => 'Sourcefire VRT Regeln für registrierte Benutzer', 
+'released' => 'Freigegeben', 
+'remark' => 'Anmerkung', 
+'remark title' => 'Anmerkung:', 
+'remote access' => 'Fernwartung', 
+'remote host/ip' => 'Remote Host/IP', 
+'remote logging' => 'Remote logging', 
+'remote subnet' => 'Remote Subnetz:', 
+'remote subnet is invalid' => 'Remote Subnetz ist ungültig.', 
+'remove' => 'Löschen', 
+'remove ca certificate' => 'CA-Zertifikat entfernen', 
+'reserved dst port' => 'Dieser Zielport ist für die ausschließliche Benutzung durch IPCop reserviert:', 
+'reserved src port' => 'Dieser Quellport ist für die ausschließliche Benutzung durch IPCop reserviert:', 
+'reset' => 'Zurücksetzen', 
+'resetting the vpn configuration will remove the root ca, the host certificate and all certificate based connections' => 'Das Zurücksetzen der VPN-Konfiguration wird die Root-CA, die Host-Zertifikate und alle weiteren Zertifikate und alle zertifikatsbasierten Verbindungen entfernen', 
+'restart' => 'Neustart', 
+'restore' => 'Wiederherstellen', 
+'restore defaults' => 'Voreinstellungen wiederherstellen', 
+'restore hardware settings' => 'Hardware-Einstellungen wiederherstellen', 
+'reverse sort' => 'In umgekehrter chronologischer Reihenfolge sortieren', 
+'root certificate' => 'Root-Zertifikat', 
+'root path' => 'Root-Pfad', 
+'router ip' => 'IP-Adresse des Routers:', 
+'routing table entries' => 'Einträge der Routing-Tabelle:', 
+'rsvd dst port overlap' => 'Dieser Zielportbereich überlappt mit einem Port, der für die ausschließliche Benutzung durch IPCop reserviert ist:', 
+'rsvd src port overlap' => 'Dieser Quellportbereich überlappt mit einem Port, der für die ausschließliche Benutzung durch IPCop reserviert ist:', 
+'rules already up to date' => 'Regeln sind schon aktuell', 
+'running' => 'LÄUFT', 
+'saturday' => 'Samstag', 
+'save' => 'Speichern', 
+'save error' => 'Konfigurationsarchiv-Datei konnte nicht gespeichert werden', 
+'script name' => 'Skriptname:', 
+'secondary dns' => 'Sekundärer DNS:', 
+'secondary ntp server' => 'Sekundärer NTP-Server', 
+'secondary wins server address' => 'Sekundäre WINS-Server Adresse', 
+'seconds' => 'sek.', 
+'section' => 'Abschnitt', 
+'sectors read from disk per second' => 'Von Platte gelesene Sektoren pro Sekunde', 
+'sectors written to disk per second' => 'Auf Platte geschriebene Sektoren pro Sekunde', 
+'secure shell server' => 'Secure Shell Server', 
+'select' => 'Auswählen', 
+'select dest net' => 'Auswahl Ziel-Netz', 
+'select source net' => 'Auswahl Quell-Netz', 
+'send cr' => 'ISP verlangt Zeilenrücklaufzeichen:', 
+'september' => 'September', 
+'serial' => 'serielle', 
+'service' => 'Dienst', 
+'service added' => 'Benutzerdefinierter Netzwerkdienst wurde hinzugefügt', 
+'service name' => 'Name des Dienstes:', 
+'service removed' => 'Benutzerdefinierter Netzwerkdienst wurde entfernt', 
+'service updated' => 'Benutzerdefinierter Netzwerkdienst wurde aktualisiert', 
+'servicename' => 'Dienstname', 
+'services' => 'Dienste:', 
+'services settings' => 'Firewall - Diensteeinstellungen', 
+'set time now' => 'Stelle jetzt die Uhrzeit ein', 
+'set time now help' => 'Um ein Synchronisationsereignis zu jeder Zeit in die Warteschlange zu stellen, drücken Sie die <i>Stelle jetzt die Uhrzeit ein</i> Schaltfläche. Bitte beachten Sie, daß Sie 5 Minuten, oder länger, warten müssen, bevor ein Sync-Ergeinis eintritt.', 
+'settings' => 'Konfiguration', 
+'shaping add options' => 'Dienst hinzufügen', 
+'shaping list options' => 'Datenflußkontrolldienste', 
+'shared' => 'shared', 
+'shared memory' => 'Gemeins. Speicher', 
+'show ca certificate' => 'CA Zertifikat anzeigen', 
+'show certificate' => 'Zertifikat anzeigen', 
+'show host certificate' => 'Host-Zertifikat anzeigen', 
+'show root certificate' => 'Root-Zertifikat anzeigen', 
+'shutdown' => 'Herunterfahren', 
+'shutdown control' => 'Herunterfahren', 
+'shutdown2' => 'Herunterfahren:', 
+'shutting down' => 'Fahre herunter', 
+'shutting down ipcop' => 'Fahre IPCop herunter', 
+'size' => 'Größe', 
+'snort hits' => 'Gesamtanzahl der aktivierten Intrusion-Regeln für', 
+'sort ascending' => 'Sortiere aufsteigend', 
+'sort descending' => 'Sortiere absteigend', 
+'sound' => 'Klang', 
+'source' => 'Quelle', 
+'source ip' => 'Quell-IP-Adresse', 
+'source ip and port' => 'Quell-IP:Port', 
+'source ip bad' => 'Ungültige Quell-IP-Adresse.', 
+'source ip in use' => 'Benutzte Quell-IP:', 
+'source ip or net' => 'Quellen-IP oder Netz', 
+'source net' => 'Quell-Netz', 
+'source network' => 'Quell-IP, oder Netzwerk (leer für "ALL"):', 
+'source port' => 'Quell-Port', 
+'source port in use' => 'Benutzter Quell-Port:', 
+'source port numbers' => 'Quell-Port muß ein(e) gültige(r) Port-Nummer oder Port-Bereich sein.', 
+'source port overlaps' => 'Quell-Port-Bereich überlappt mit einem bereits definierten Port-Bereich.', 
+'speaker off' => 'Lautsprecher aus:', 
+'speaker on' => 'Lautsprecher ein:', 
+'squid extension methods' => 'Ihre <tt>extension_methods</tt> Liste', 
+'squid extension methods invalid' => 'Ihre  \'extension_methods\' Liste darf nur Worte aus Großbuchstaben und Ziffer enthalten, die mittels eines Leerzeichens getrennt werden.', 
+'src port' => 'Quell-Port', 
+'srcprt range overlaps' => 'Quell-Port-Bereich überlappt mit einem bereits definierten Port.', 
+'srcprt within existing' => 'Quell-Port befindet sich innnerhalb eines bereits definierten Port-Bereichs.', 
+'ssdmz pinholes' => 'DMZ-Schlupflöcher', 
+'ssh access' => 'SSH-Zugriff', 
+'ssh fingerprint' => 'Fingerabdruck', 
+'ssh host keys' => 'SSH Host Schlüssel', 
+'ssh is disabled' => 'Secure Shell ist deaktiviert.  Halte an.', 
+'ssh is enabled' => 'Secure Shell ist aktiviert.  Starte neu.', 
+'ssh key' => 'Schlüssel', 
+'ssh key size' => 'Länge (bits)', 
+'ssh keys' => 'Authentifizierung auf Basis öffentlicher Schlüssel zulassen', 
+'ssh no auth' => 'Sie haben keinerlei Authentifizierungverfahren zugelassen; dies wird Ihre Anmeldung verhindern', 
+'ssh passwords' => 'Passwortbasierte Authentifizierung zulassen', 
+'ssh portfw' => 'TCP-Weiterleitung zulassen', 
+'ssh1 disabled' => 'SSHv1 ist deaktiviert, ein Client der Version 2 wird benötigt.', 
+'ssh1 enabled' => 'SSHv1 ist aktiviert, Clients mit alten Versionen werden unterstützt.', 
+'ssh1 support' => 'Unterstützung für Version 1 des SSH-Protokolls (wird nur für alte Clients benötigt)', 
+'ssnetwork status' => 'Netzwerk-Status', 
+'sspasswords' => 'Passwörter', 
+'ssport forwarding' => 'Port-Weiterleitung', 
+'ssproxy graphs' => 'Proxy-Diagramme', 
+'sssystem status' => 'System-Status', 
+'sstraffic graphs' => 'Netzwerk-Diagramme', 
+'standard login script' => 'Standard-Anmeldeskript', 
+'start address' => 'Anfangsadresse:', 
+'state or province' => 'Bundesstat oder Provinz', 
+'static ip' => 'Statisch IP', 
+'status' => 'Status', 
+'status information' => 'Statusinformationen', 
+'stopped' => 'ANGEHALTEN', 
+'subject' => 'Betreff', 
+'subnet is invalid' => 'Netzmaske ist ungültig', 
+'subscripted user rules' => 'Sourcefire VRT Regeln mit Abonnement', 
+'successfully refreshed updates list' => 'Update-Liste erfolgreich aktualisiert.', 
+'summaries kept' => 'Zusammenfassungen aufheben für', 
+'sunday' => 'Sonntag', 
+'swap' => 'Swap', 
+'swap usage per' => 'Nutzung von Auslagerungsspeicher (Swap) pro', 
+'system cpu' => 'System CPU', 
+'system cpu usage' => 'System CPU Nutzung', 
+'system graphs' => 'System-Diagramme', 
+'system log viewer' => 'Betrachter der System-Logdateien', 
+'system logs' => 'System-Logdateien', 
+'system status information' => 'System-Statusinformationen', 
+'telephone not set' => 'Telefonnummer nicht angegeben.', 
+'the following update was successfully installed' => 'Das folgende Update wurde erfolgreich installiert', 
+'the statistics were last updated at' => 'Die Statistik wurde zuletzt aktualisiert am', 
+'there are updates' => 'Für Ihr System sind Updates verfügbar. Im Abschnitt &quot;Updates&quot; erhalten Sie weitere Informationen dazu.', 
+'there are updates available' => 'Für Ihr System sind Programm-Updates verfügbar. Es wird dringend empfohlen, daß Sie Ihr System baldmöglichst aktualisieren.', 
+'there was no file upload' => 'Es wurde keine Datei hochgeladen', 
+'this feature has been sponsored by' => 'Diese Funktion wurde gesponsort von', 
+'this field may be blank' => 'Dieses Feld kann leer bleiben.', 
+'this is not a valid archive' => 'Dies ist kein gültiges Archiv.', 
+'this is not an authorised update' => 'Dies ist kein autorisiertes Update.', 
+'this update is already installed' => 'Dieses Update wurde bereits installiert.', 
+'thursday' => 'Donnerstag', 
+'time' => 'Uhrzeit', 
+'time date manually reset' => 'Datum/Zeit wurden manuell zurückgesetzt.', 
+'time server' => 'Zeitserver', 
+'timeout must be a number' => 'Wartezeit muss eine Zahl sein.', 
+'title' => 'Titel', 
+'to' => 'Bis', 
+'to install an update' => 'Um ein Update zu installieren, laden Sie zuerst die folgende .tgz.gpg Datei hoch:', 
+'toggle enable disable' => 'Aktivieren oder Deaktivieren', 
+'tone' => 'Ton', 
+'tone dial' => 'Tonwahl:', 
+'total hits for log section' => 'Gesamte Treffer für Log Sektion', 
+'traffic on' => 'Verkehr auf', 
+'traffic shaping' => 'Traffic Shaping', 
+'traffic shaping settings' => 'Einstellungen der Datenflußkontrolle', 
+'transfer limits' => 'Transferbeschränkungen', 
+'transparent on' => 'Transparent auf', 
+'tuesday' => 'Dienstag', 
+'type' => 'Typ', 
+'unable to alter profiles while red is active' => 'Profile können nicht geändert werden, solange ROT aktiv ist.', 
+'unable to contact' => 'Kann nicht erreicht werden', 
+'unencrypted' => 'Nichtverschlüsselt', 
+'unknown' => 'Unbekannt', 
+'unnamed' => 'Unbenannt', 
+'update' => 'Aktualisieren', 
+'update time' => 'Aktualisiere die Uhrzeit:', 
+'update transcript' => 'Aktualisieren', 
+'updates' => 'Updates', 
+'updates installed' => 'Updates wurden installiert', 
+'updates is old1' => 'Ihre Update-Datei ist ', 
+'updates is old2' => 'Tage alt. Wir empfehlen Ihnen, Ihr System über die &quot;Updates&quot;-Seite zu aktualisieren.', 
+'uplink speed' => 'Uplink-Geschwindigkeit (kBit/sek)', 
+'upload' => 'Hochladen', 
+'upload a certificate' => 'Ein Zertifikat hochladen:', 
+'upload a certificate request' => 'Eine Zertifikatsanfrage hochladen:', 
+'upload ca certificate' => 'CA Zertifikat hochladen', 
+'upload fcdsl.o' => 'Fcdsl.o hochladen', 
+'upload file' => 'Datei zum hochladen', 
+'upload p12 file' => 'PKCS12 Datei hochladen', 
+'upload successful' => 'Erfolgreich hochgeladen.', 
+'upload synch.bin' => 'Synch.bin hochladen', 
+'upload update file' => 'Lade die Update-Datei hoch:', 
+'upstream password' => 'Proxy-Passwort:', 
+'upstream proxy host:port' => 'Vorgelagerter Proxy (hostname:port)', 
+'upstream username' => 'Proxy-Benutzername:', 
+'uptime and users' => 'Uptime und Benutzer:', 
+'usb modem on acm0' => 'USB Modem an ACM0', 
+'usb modem on acm1' => 'USB Modem an ACM1', 
+'usb modem on acm2' => 'USB Modem an ACM2', 
+'usb modem on acm3' => 'USB Modem an ACM3', 
+'use' => 'Einsatz', 
+'use a pre-shared key' => 'Verwenden Sie einen Pre-Shared Schlüssel:', 
+'use dov' => 'DOV (Data Over Voice) benutzen:', 
+'use ibod' => 'Bandwidth on Demand (iBOD) benutzen:', 
+'use ipcop red ip' => 'Die klassische ROTE IP, welche von IPCop während der Verbindung verwendet wird', 
+'use only proposed settings' => 'Verwenden Sie nur die vorgeschlagenen Einstellungen.', 
+'used' => 'Benutzt', 
+'used memory' => 'Genutzter Speicher', 
+'used swap' => 'Genutzter Swap', 
+'user cpu' => 'Benutzer CPU', 
+'user cpu usage' => 'Benutzer CPU', 
+'username' => 'Benutzername:', 
+'username not set' => 'Benutzername nicht angegeben.', 
+'users department' => 'Abteilung des Benutzers', 
+'users email' => 'E-mail Adresse des Benutzers', 
+'users fullname or system hostname' => 'Voller Name oder System Hostaname des Benutzers', 
+'valid root certificate already exists' => 'Ein gültiges Root-Zertifikat existiert bereits.', 
+'vci number' => 'VCI-Nummer:', 
+'virtual private networking' => 'Virtuelles Privates Netzwerk', 
+'vpi number' => 'VPI-Nummer:', 
+'vpn' => 'VPN', 
+'vpn configuration main' => 'VPN-Konfiguration - Übersicht', 
+'vpn delayed start' => 'Verzögerung bevor VPN gestartet wird (Sekunden)', 
+'vpn delayed start help' => 'Falls notwendig, kann diese Verzögerung dazu verwendet werden, um Dynamic DNS Updates ordnungsgemäß anzuwenden. 60 ist ein gängiger Wert, wenn ROT (RED) eine dynamische IP Adresse ist.', 
+'vpn mtu invalid' => 'MTU muß ein numerischer Wert sein!', 
+'vpn on blue' => 'VPN auf BLAU', 
+'waiting to synchronize clock' => 'Bitte warten, die Uhr wird synchronisiert', 
+'warning messages' => 'Warnhinweise', 
+'web hits' => 'Gesamtanzahl der Websites zum ausgewählten Kriterium', 
+'web proxy' => 'Web-Proxy', 
+'web proxy configuration' => 'Webproxy-Konfiguration', 
+'web server' => 'Web-Server', 
+'website' => 'Website', 
+'wednesday' => 'Mittwoch', 
+'week' => 'Woche', 
+'weeks' => 'Wochen', 
+'wildcards' => 'Wildcards', 
+'wireless' => 'Wireless', 
+'wireless config added' => 'Wireless Konfiguration hinzugefügt', 
+'wireless config changed' => 'Wireless Konfiguration geändert', 
+'wireless configuration' => 'Wireless-Konfiguration', 
+'written sectors' => 'Sektoren schr.', 
+'xtaccess all error' => 'Sie können einen externen Zugang nicht auf \'ALL\' setzen - dies erfolgt in den Port-Weiterleitungsregeln.', 
+'year' => 'Jahr', 
+'yes' => 'Ja', 
+'you can only define one roadwarrior connection when using pre-shared key authentication' => 'Sie können nur eine Roadwarrior Verbindung definieren, wenn die Pre-shared Schlüsselauthentifizierung verwendet wird.<br/>Entweder haben Sie bereits eine Roadwarrior Verbindung mit Pre-shared Schlüsselauthentifizierung, oder Sie versuchen gerade eine hinzuzufügen.', 
+'your department' => 'Ihre Abteilung', 
+'your e-mail' => 'Ihre E-mail Adresse', 
+); 
  
\ No newline at end of file
index 1632cb9..43484c9 100644 (file)
@@ -79,9 +79,10 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
        cd $(DIR_APP)/build_unix && ../dist/configure --prefix=/usr --enable-compat185 --enable-cxx
-       cd $(DIR_APP)/build_unix && make LIBSO_LIBS="-lpthread" LIBXSO_LIBS="-lpthread"
+       cd $(DIR_APP)/build_unix && make
        cd $(DIR_APP)/build_unix && make docdir=/usr/share/doc/$(THISAPP) install
-       chown root:root /usr/bin/db_* /usr/lib/libdb* /usr/include/db*
-       chown -R root:root /usr/share/doc/$(THISAPP)
+       chown -v root:root /usr/bin/db_* /usr/lib/libdb* /usr/include/db*
+#      chown -v root:root /usr/bin/berkeley_db_svc
+       chown -v -R root:root /usr/share/doc/$(THISAPP)
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index 9a20b2f..4a31cd9 100644 (file)
--- a/lfs/cdrom
+++ b/lfs/cdrom
@@ -117,7 +117,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
                mkdir -p /install/cdrom/boot/isolinux; \
                dd if=/dev/zero  bs=1k count=2            > /install/cdrom/boot/isolinux/boot.catalog; \
                cp /install/images/cdinitrd.gz              /install/cdrom/boot/isolinux/instroot.gz; \
-               cp /boot/vmlinuz-installer                    /install/cdrom/boot/isolinux/vmlinuz; \
+               cp /boot/vmlinuz-installer                  /install/cdrom/boot/isolinux/vmlinuz; \
                cp $(DIR_SRC)/config/kernel/syslinux.cfg    /install/cdrom/boot/isolinux/isolinux.cfg; \
                cp /usr/lib/syslinux/isolinux.bin           /install/cdrom/boot/isolinux/isolinux.bin; \
                sed -e 's/boot IPFire/boot IPFire $(VERSION)/' $(DIR_SRC)/config/kernel/install-message \
index 9fa12d3..57f9925 100644 (file)
@@ -57,7 +57,7 @@ $(TARGET) :
 
        # Create all directories
        for i in addon-lang alcatelusb auth backup backup/sets ca certs cnx_pci crls ddns dhcp dhcpc dmzholes \
-           eagle-usb eciadsl ethernet isdn key langs logging main modem optionsfw patches portfw \
+           eagle-usb eciadsl ethernet isdn key langs logging main modem optionsfw patches pakfire portfw \
            ppp private proxy red remote shaping snort time uplinks vpn wireless xtaccess ; do \
                mkdir -p $(CONFIG_ROOT)/$$i; \
        done
@@ -78,7 +78,7 @@ $(TARGET) :
        cp $(DIR_SRC)/config/cfgroot/header.pl                  $(CONFIG_ROOT)/
        cp $(DIR_SRC)/config/cfgroot/general-functions.pl       $(CONFIG_ROOT)/
        cp $(DIR_SRC)/config/cfgroot/lang.pl                    $(CONFIG_ROOT)/
-       cp $(DIR_SRC)/config/cfgroot/countries.pl               $(CONFIG_ROOT)/
+       cp $(DIR_SRC)/config/cfgroot/countries.pl                       $(CONFIG_ROOT)/
        cp $(DIR_SRC)/config/cfgroot/backup-exclude             $(CONFIG_ROOT)/backup/exclude.system
        cp $(DIR_SRC)/config/cfgroot/backup-include             $(CONFIG_ROOT)/backup/include.system
        cp $(DIR_SRC)/config/cfgroot/backup-exclude.hardware    $(CONFIG_ROOT)/backup/exclude.hardware
@@ -89,7 +89,7 @@ $(TARGET) :
        cp $(DIR_SRC)/config/cfgroot/xtaccess-config            $(CONFIG_ROOT)/xtaccess/config
        cp $(DIR_SRC)/config/cfgroot/time-settings              $(CONFIG_ROOT)/time/settings
        cp $(DIR_SRC)/config/cfgroot/logging-settings           $(CONFIG_ROOT)/logging/settings
-       cp $(DIR_SRC)/config/cfgroot/ipcop.gpg                  $(CONFIG_ROOT)/key/
+#      cp $(DIR_SRC)/config/cfgroot/ipcop.gpg                  $(CONFIG_ROOT)/key/
        cp $(DIR_SRC)/langs/list                                $(CONFIG_ROOT)/langs/
 
        # Oneliner configfiles
@@ -97,7 +97,7 @@ $(TARGET) :
        echo  "VPN_DELAYED_START=0"     >>$(CONFIG_ROOT)/vpn/settings
        echo  "01"                      > $(CONFIG_ROOT)/certs/serial
        echo  "nameserver    1.2.3.4"   > $(CONFIG_ROOT)/ppp/fake-resolv.conf
-       echo "DISABLEPING=NO"           > $(CONFIG_ROOT)/optionsfw/settings
+       echo  "DISABLEPING=NO"          > $(CONFIG_ROOT)/optionsfw/settings
 
        # Symbolic links
        ln -sf /etc/rc.d/rc.updatered $(CONFIG_ROOT)/dhcpc/dhcpcd.exe
diff --git a/lfs/ntp b/lfs/ntp
index bbfb4c6..85313f8 100644 (file)
--- a/lfs/ntp
+++ b/lfs/ntp
@@ -84,8 +84,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && make install
        -mkdir /etc/ntp
        chown -R ntp:ntp /etc/ntp
-       echo "restrict default nomodify noquery" > /etc/ntp.conf
-       echo "server  127.127.1.0"              >> /etc/ntp.conf
+       echo "restrict default nomodify noquery" >  /etc/ntp.conf
+       echo "server  127.127.1.0"                      >> /etc/ntp.conf
        echo "fudge   127.127.1.0 stratum 10"   >> /etc/ntp.conf
        echo "driftfile /etc/ntp/drift"         >> /etc/ntp.conf
        @rm -rf $(DIR_APP)
index f9f68bd..8d388b8 100644 (file)
@@ -83,5 +83,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
                                'AUXLIBS=-L/usr/lib -L/opt/lampp/lib/mysql -L/opt/lampp/lib -lmysqlclient -lz -lm -lssl -lsasl2 -lcrypto -lpq'
        cd $(DIR_APP) && make
        cd $(DIR_APP) && sh postfix-install -non-interactive
+       cp -v /usr/src/config/etc/aliases /etc/aliases
+       cd /etc/ && postmap aliases
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
diff --git a/make.sh b/make.sh
index a1f0bfa..6d20f3c 100644 (file)
--- a/make.sh
+++ b/make.sh
 #
 
   NAME="IPFire"                                # Software name
-  SNAME="ipfire"                               # Short name
+  SNAME="ipfire"                       # Short name
   VERSION="1.4"                                # Version number
-  PREVIOUSTAG=IPCOP_v1_4_10_FINAL
-  SLOGAN="We save your network"                # Software slogan
-  CONFIG_ROOT=/var/ipfire                      # Configuration rootdir
+# PREVIOUSTAG=IPCOP_v1_4_10_FINAL
+  SLOGAN="We secure your network"      # Software slogan
+  CONFIG_ROOT=/var/ipfire              # Configuration rootdir
   NICE=10
   MAX_RETRIES=3                                # prefetch/check loop
   KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
@@ -707,10 +707,10 @@ buildpackages() {
   rm -f $BASEDIR/doc/packages-list
   for i in `ls -1tr $BASEDIR/log/[^_]*`; do
        if [ "$i" != "$BASEDIR/log/FILES" -a -n $i ]; then
-               echo "* `basename $i`" >>$BASEDIR/doc/packages-list
+               echo "  * `basename $i`" >>$BASEDIR/doc/packages-list
        fi
   done
-  echo "!!! List of softwares used to build $NAME Version:$VERSION" > $BASEDIR/doc/packages-list.txt
+  echo "====== List of softwares used to build $NAME Version: $VERSION ======" > $BASEDIR/doc/packages-list.txt
   grep -v 'configroot$\|img$\|initrd$\|initscripts$\|installer$\|install$\|ipcop$\|setup$\|stage2$\|smp$\|tools$\|tools1$\|tools2$' \
        $BASEDIR/doc/packages-list | sort >> $BASEDIR/doc/packages-list.txt
   rm -f $BASEDIR/doc/packages-list
@@ -1027,4 +1027,4 @@ gettoolchain)
        cat doc/make.sh-usage
        exit 1
        ;;
-esac
\ No newline at end of file
+esac
index 2c8bf47..b9081e2 100644 (file)
@@ -485,3 +485,5 @@ if ($settings{'CONFIG_TYPE'} =~ /^(4|5|6|7)$/ && -e "$rrdlog/BLUE.rrd") {
        updateifgraph ("BLUE", "month");
        updateifgraph ("BLUE", "year");
 }
+
+chmod 777 /home/httpd/html/{graphs,sgraph} -R
\ No newline at end of file