-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;
- }
-}