4 require './spam-lib.pl';
6 &set_config_file_in(\%in);
7 &can_use_check("header");
9 &error_setup($text{'simple_err'});
10 &execute_before("simple");
13 @simples = &get_simple_tests($conf);
14 @headers = &find("header", $conf);
15 @bodies = &find("body", $conf);
16 @fulls = &find("full", $conf);
17 @uris = &find("uri", $conf);
18 @scores = &find("score", $conf);
19 @describes = &find("describe", $conf);
21 # Parse and validate inputs
22 for($i=0; defined($name = $in{"name_$i"}); $i++) {
23 $simple = $i < @simples ? $simples[$i] : undef;
25 # Take out the directives that would be replaced
26 @headers = grep { $_ ne $simple->{'header_dir'} } @headers;
27 @bodies = grep { $_ ne $simple->{'body_dir'} } @bodies;
28 @fulls = grep { $_ ne $simple->{'full_dir'} } @fulls;
29 @uris = grep { $_ ne $simple->{'uri_dir'} } @uris;
30 @scores = grep { $_ ne $simple->{'score_dir'} } @scores;
31 @describes = grep { $_ ne $simple->{'describe_dir'} } @describes;
35 $name =~ /^\S+$/ || &error(&text('header_ename', $name));
36 $donename{$name}++ && &error(&text('header_eclash', $name));
37 $header = $in{"header_$i"};
38 $regexp = $in{"regexp_$i"};
39 $regexp || &error(&text('header_eregexp2', $name));
40 $flags = $in{"flags_$i"};
41 $flags =~ /^[a-z]*$/ || &error(&text('header_eflags', $flags));
42 $score = $in{"score_$i"};
43 $score eq "" || $score =~ /^\-?\d+(\.\d+)?$/ ||
44 $score =~ /^\-?\.\d+$/ ||
45 &error(&text('score_epoints', $score));
46 $describe = $in{"describe_$i"};
48 # Update or add the actual directives
49 if ($header eq "body") {
50 push(@bodies, { 'name' => 'body',
51 'value' => "$name /$regexp/$flags" });
53 elsif ($header eq "full") {
54 push(@fulls, { 'name' => 'full',
55 'value' => "$name /$regexp/$flags" });
57 elsif ($header eq "uri") {
58 push(@uris, { 'name' => 'uri',
59 'value' => "$name /$regexp/$flags" });
62 my $ucheader = ucfirst($header);
63 push(@headers, { 'name' => 'header',
64 'value' => "$name $ucheader =~ /$regexp/$flags" });
67 # Update the score and describe
69 push(@scores, { 'name' => 'score',
70 'value' => "$name $score" });
72 if ($describe ne "") {
73 push(@describes, { 'name' => 'describe',
74 'value' => "$name $describe" });
81 &save_directives($conf, "header", \@headers, 0);
82 &save_directives($conf, "body", \@bodies, 0);
83 &save_directives($conf, "full", \@fulls, 0);
84 &save_directives($conf, "score", \@scores, 0);
85 &save_directives($conf, "describe", \@describes, 0);
86 &save_directives($conf, "uri", \@uris, 0);
90 &execute_after("header");
91 &webmin_log("header");
92 &redirect($redirect_url);