line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
# utility routines to be shared amongst the various classes |
2
|
|
|
|
|
|
|
# |
3
|
|
|
|
|
|
|
# Copyright Karthik Krishnamurthy |
4
|
|
|
|
|
|
|
package Unix::Conf::Bind8::Conf::Lib; |
5
|
|
|
|
|
|
|
|
6
|
10
|
|
|
10
|
|
48
|
use strict; |
|
10
|
|
|
|
|
17
|
|
|
10
|
|
|
|
|
323
|
|
7
|
10
|
|
|
10
|
|
47
|
use warnings; |
|
10
|
|
|
|
|
18
|
|
|
10
|
|
|
|
|
3782
|
|
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
require Exporter; |
10
|
|
|
|
|
|
|
our @ISA = qw (Exporter); |
11
|
|
|
|
|
|
|
# __valid_rlim |
12
|
|
|
|
|
|
|
our @EXPORT = qw ( |
13
|
|
|
|
|
|
|
__valid_element |
14
|
|
|
|
|
|
|
__valid_ipaddress |
15
|
|
|
|
|
|
|
__valid_port |
16
|
|
|
|
|
|
|
__valid_ipprefix |
17
|
|
|
|
|
|
|
__valid_yesno |
18
|
|
|
|
|
|
|
__valid_forward |
19
|
|
|
|
|
|
|
__valid_checknames |
20
|
|
|
|
|
|
|
__valid_category |
21
|
|
|
|
|
|
|
__valid_facility |
22
|
|
|
|
|
|
|
__valid_severity |
23
|
|
|
|
|
|
|
__valid_number |
24
|
|
|
|
|
|
|
__valid_sizespec |
25
|
|
|
|
|
|
|
__valid_string |
26
|
|
|
|
|
|
|
__valid_transfer_format |
27
|
|
|
|
|
|
|
); |
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
# used for validating resource limit type options |
31
|
|
|
|
|
|
|
#sub __valid_rlim |
32
|
|
|
|
|
|
|
#{ |
33
|
|
|
|
|
|
|
# my $num = qr/\d+[KkMmGg]?/; |
34
|
|
|
|
|
|
|
# return ($_[0] =~ /^($num|'unlimited'|'default')$/); |
35
|
|
|
|
|
|
|
#} |
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
# ACL element |
38
|
|
|
|
|
|
|
sub __valid_element |
39
|
|
|
|
|
|
|
{ |
40
|
0
|
|
|
0
|
|
|
my ($confds, $element) = @_; |
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
# if an Acl object, return true. |
43
|
0
|
0
|
0
|
|
|
|
ref ($element) && UNIVERSAL::isa ($element, 'Unix::Conf::Bind8::Conf::Acl') |
44
|
|
|
|
|
|
|
&& return (1); |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
# strip any leading `!' |
47
|
0
|
|
|
|
|
|
$element =~ s/^!(.*)/$1/o; |
48
|
0
|
0
|
|
|
|
|
if ($element =~ /^key/gc) { |
49
|
0
|
0
|
|
|
|
|
$element =~ /\G\s+(\S+)\s*$/ || return (); |
50
|
0
|
0
|
|
|
|
|
return (1) if (Unix::Conf::Bind8::Conf::_get_key ($confds, $1)); |
51
|
0
|
|
|
|
|
|
return (Unix::Conf->_err ("__valid_element", "key `$1' not defined")); |
52
|
|
|
|
|
|
|
} |
53
|
0
|
0
|
|
|
|
|
__valid_ipaddress ($element) && return (1); |
54
|
0
|
0
|
|
|
|
|
__valid_ipprefix ($element) && return (1); |
55
|
|
|
|
|
|
|
# must be some acl name (built-in or defined) |
56
|
|
|
|
|
|
|
( |
57
|
0
|
0
|
0
|
|
|
|
$element eq 'none' || $element eq 'any' || |
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
58
|
|
|
|
|
|
|
$element eq 'localhost' || $element eq 'localnets' |
59
|
|
|
|
|
|
|
) && return (1); |
60
|
0
|
0
|
|
|
|
|
Unix::Conf::Bind8::Conf::_get_acl ($confds, $element) && return (1); |
61
|
0
|
|
|
|
|
|
return (Unix::Conf->_err ("__valid_element", "acl `$element' not defined")); |
62
|
|
|
|
|
|
|
} |
63
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
sub __valid_port ($) |
66
|
|
|
|
|
|
|
{ |
67
|
10
|
|
|
10
|
|
63
|
no warnings; |
|
10
|
|
|
|
|
18
|
|
|
10
|
|
|
|
|
9606
|
|
68
|
0
|
0
|
|
0
|
|
|
($_[0] eq '*') && return (1); |
69
|
0
|
0
|
|
|
|
|
($_[0] !~ /^\d+$/) && return (); |
70
|
0
|
0
|
0
|
|
|
|
($_[0] >= 0 && $_[0] <= 65536) && return (1); |
71
|
0
|
|
|
|
|
|
return (); |
72
|
|
|
|
|
|
|
} |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
# routine to validate an IPv4 address. check this out later |
75
|
0
|
|
|
0
|
|
|
sub __valid_ipaddress ($) { return ($_[0] =~ /^(?:(?:\d{1,3}\.){3}\d{1,3})$/); } |
76
|
|
|
|
|
|
|
# we could tighten this up a lot |
77
|
0
|
|
|
0
|
|
|
sub __valid_ipprefix ($) { return ($_[0] =~ /^(?:\d{1,3}(\.\d{1,3}){0,3}\/\d{1,2})$/); } |
78
|
0
|
|
|
0
|
|
|
sub __valid_yesno ($) { return ($_[0] =~ /^(yes|no|true|false|1|0)$/); } |
79
|
0
|
|
|
0
|
|
|
sub __valid_checknames ($) { return ($_[0] =~ /^(warn|fail|ignore)$/); } |
80
|
0
|
|
|
0
|
|
|
sub __valid_forward ($) { return ($_[0] =~ /^(only|first)$/); } |
81
|
0
|
|
|
0
|
|
|
sub __valid_category ($) { return ($_[0] =~ /^(default|config|parser|queries|lame-servers|statistics|panic|update|ncache|xfer-in|xfer-out|db|eventlib|packet|notify|cname|security|os|insist|maintenance|load|reponse-checks)$/); } |
82
|
0
|
|
|
0
|
|
|
sub __valid_facility ($) { return ($_[0] =~ /^(kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|authpriv|ftp|local0|local1|local2|local3|local4|local5|local7|local7)$/); } |
83
|
0
|
|
|
0
|
|
|
sub __valid_severity ($) { return ($_[0] =~ /^(critical|error|warning|notice|info|debug|dynamic)$/); } |
84
|
0
|
|
|
0
|
|
|
sub __valid_number ($) { return ($_[0] =~ /^\d+$/); } |
85
|
0
|
|
|
0
|
|
|
sub __valid_sizespec ($) { return ($_[0] =~ /^(unlimited|default|\d+[kKmMgG]?)/); } |
86
|
0
|
|
|
0
|
|
|
sub __valid_transfer_format { return ($_[0] =~ /^(one-answer|many-answers)$/); } |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
# This routine strips any "" in the original argument as it acts on the ref |
89
|
|
|
|
|
|
|
# returns true all the time |
90
|
0
|
|
|
0
|
|
|
sub __valid_string ($) { $_[0] =~ s/^"(.+)"$/$1/; return (1) } |
|
0
|
|
|
|
|
|
|