- raise_param_exc({ type => "missing property"}) if !$type;
- raise_param_exc({ action => "missing property"}) if !$rule->{action};
-
- if ($type eq 'in' || $type eq 'out') {
- raise_param_exc({ action => "unknown action '$rule->{action}'"})
- if $rule->{action} !~ m/^(ACCEPT|DROP|REJECT)$/;
- } elsif ($type eq 'group') {
- raise_param_exc({ type => "security groups not allowed"})
- if !$allow_groups;
- raise_param_exc({ action => "invalid characters in security group name"})
- if $rule->{action} !~ m/^${security_group_name_pattern}$/;
- } else {
- raise_param_exc({ type => "unknown rule type '$type'"});
+ my $add_error = sub {
+ my ($param, $msg) = @_;
+ raise_param_exc({ $param => $msg }) if !$noerr;
+ $error_count++;
+ $errors->{$param} = $msg if !$errors->{$param};
+ };
+
+ my $type = $rule->{type};
+ my $action = $rule->{action};
+
+ &$add_error('type', "missing property") if !$type;
+ &$add_error('action', "missing property") if !$action;
+
+ if ($type) {
+ if ($type eq 'in' || $type eq 'out') {
+ &$add_error('action', "unknown action '$action'")
+ if $action && ($action !~ m/^(ACCEPT|DROP|REJECT)$/);
+ } elsif ($type eq 'group') {
+ &$add_error('type', "security groups not allowed")
+ if !$allow_groups;
+ &$add_error('action', "invalid characters in security group name")
+ if $action && ($action !~ m/^${security_group_name_pattern}$/);
+ } else {
+ &$add_error('type', "unknown rule type '$type'");
+ }