# helper function for API
+sub copy_opject_with_digest {
+ my ($object) = @_;
+
+ my $sha = Digest::SHA->new('sha1');
+
+ my $res = {};
+ foreach my $k (sort keys %$object) {
+ my $v = $object->{$k};
+ $res->{$k} = $v;
+ $sha->add($k, ':', $v, "\n");
+ }
+
+ my $digest = $sha->b64digest;
+
+ $res->{digest} = $digest;
+
+ return wantarray ? ($res, $digest) : $res;
+}
+
+sub copy_list_with_digest {
+ my ($list) = @_;
+
+ my $sha = Digest::SHA->new('sha1');
+
+ my $res = [];
+ foreach my $entry (@$list) {
+ my $data = {};
+ foreach my $k (sort keys %$entry) {
+ my $v = $entry->{$k};
+ $data->{$k} = $v;
+ $sha->add($k, ':', $v, "\n");
+ }
+ push @$res, $data;
+ }
+
+ my $digest = $sha->b64digest;
+
+ foreach my $entry (@$res) {
+ $entry->{digest} = $digest;
+ }
+
+ return wantarray ? ($res, $digest) : $res;
+}
+
my $rule_properties = {
pos => {
description => "Update rule at position <pos>.",
},
};
-sub cleanup_fw_rule {
- my ($rule, $digest, $pos) = @_;
-
- my $r = {};
-
- foreach my $k (keys %$rule) {
- next if !$rule_properties->{$k};
- my $v = $rule->{$k};
- next if !defined($v);
- $r->{$k} = $v;
- $r->{digest} = $digest;
- $r->{pos} = $pos;
- }
-
- return $r;
-}
-
sub add_rule_properties {
my ($properties) = @_;
my $section;
- my $digest = Digest::SHA->new('sha1');
-
while (defined(my $line = <$fh>)) {
- $digest->add($line);
-
next if $line =~ m/^#/;
next if $line =~ m/^\s*$/;
push @{$res->{$section}}, $rule;
}
- $res->{digest} = $digest->b64digest;
-
return $res;
}
my $section;
- my $digest = Digest::SHA->new('sha1');
-
while (defined(my $line = <$fh>)) {
- $digest->add($line);
-
next if $line =~ m/^#/;
next if $line =~ m/^\s*$/;
push @{$res->{$section}}, $rule;
}
- $res->{digest} = $digest->b64digest;
-
return $res;
}
ipset_comments => {},
};
- my $digest = Digest::SHA->new('sha1');
-
while (defined(my $line = <$fh>)) {
- $digest->add($line);
-
next if $line =~ m/^#/;
next if $line =~ m/^\s*$/;
$group = lc($1);
my $comment = $2;
$res->{$section}->{$group} = [];
- $res->{group_comments}->{$group} = $comment if $comment;
+ $res->{group_comments}->{$group} = decode('utf8', $comment)
+ if $comment;
next;
}
$group = lc($1);
my $comment = $2;
$res->{$section}->{$group} = [];
- $res->{ipset_comments}->{$group} = $comment if $comment;
+ $res->{ipset_comments}->{$group} = decode('utf8', $comment)
+ if $comment;
next;
}
}
}
- $res->{digest} = $digest->b64digest;
return $res;
}
foreach my $ipset (sort keys %{$cluster_conf->{ipset}}) {
if (my $comment = $cluster_conf->{ipset_comments}->{$ipset}) {
- $raw .= "[IPSET $ipset] # $comment\n\n";
+ my $utf8comment = encode('utf8', $comment);
+ $raw .= "[IPSET $ipset] # $utf8comment\n\n";
} else {
$raw .= "[IPSET $ipset]\n\n";
}
foreach my $group (sort keys %{$cluster_conf->{groups}}) {
my $rules = $cluster_conf->{groups}->{$group};
if (my $comment = $cluster_conf->{group_comments}->{$group}) {
- $raw .= "[group $group] # $comment\n\n";
+ my $utf8comment = encode('utf8', $comment);
+ $raw .= "[group $group] # $utf8comment\n\n";
} else {
$raw .= "[group $group]\n\n";
}