-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsave.cgi
More file actions
executable file
·87 lines (72 loc) · 2.07 KB
/
Copy pathsave.cgi
File metadata and controls
executable file
·87 lines (72 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/perl
# Save a firewalld rich rule
require './firewalld-rich-lib.pl';
# Check if firewalld is installed and running
if (!check_firewalld_installed() || !is_firewalld_running() || !rich_rules_supported()) {
&error($text{'save_err_install'});
}
&error_setup($text{'save_err'});
&ReadParse();
# Check if cancel button was pressed
if ($in{'cancel'}) {
&redirect("index.cgi");
exit;
}
# Get form data
my $new = $in{'new'};
my $zone = $in{'zone'};
my $idx = $in{'idx'};
# Validate zone
if (!validate_zone($zone)) {
&error($text{'save_err_zone'});
}
# Build rule from form using shared function
my ($rule_opts_ref, $errors_ref) = build_rule_from_form(%in);
if (@$errors_ref) {
my $first_err = $errors_ref->[0];
&error($text{$first_err} || $first_err);
}
# Validate that rule has meaningful content
my %rule_opts = %$rule_opts_ref;
my $has_content = 0;
foreach my $key (keys %rule_opts) {
if ($key ne 'action' && $key ne 'priority' && $key ne 'family' && $rule_opts{$key}) {
$has_content = 1;
last;
}
}
if (!$has_content && !$rule_opts{'action'}) {
&error($text{'save_err_content'});
}
# Construct the rule text
my $rule_text = construct_rich_rule(%rule_opts);
# Validate the constructed rule
my $validate_err = validate_rich_rule($rule_text);
if ($validate_err) {
&error(&text('save_err_syntax', $validate_err));
}
# Save the rule
my $err;
if ($new) {
# Add new rule
$err = add_rich_rule($rule_text, $zone);
} else {
# Modify existing rule - use old_rule_text passed from edit form
my $old_rule = $in{'old_rule_text'};
if ($old_rule) {
$err = modify_rich_rule($old_rule, $rule_text, $zone);
} else {
&error($text{'save_err'} . ": Missing original rule text");
}
}
if ($err) {
&error(&text('save_err_command', $err));
}
# Log the action
if ($new) {
&webmin_log("create", "rich-rule", $rule_text, { 'zone' => $zone });
} else {
&webmin_log("modify", "rich-rule", $rule_text, { 'zone' => $zone });
}
# Redirect back to main page
&redirect("index.cgi?zone=" . &urlize($zone) . "&saved=1");