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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#!/usr/bin/perl -w
use strict;
use MGA::Advisories;
use Template;
my %actions = (
list => {
run => \&listadv,
descr => 'List advisories',
usage => <<END,
$0 list
Print the list of published advisories
END
},
mksite => {
run => \&mksite,
descr => 'Generates the advisories web site',
usage => <<END,
$0 mksite
Generates the advisories web site
END
},
new => {
run => \&newadv,
descr => 'Create a new advisory file',
usage => <<END,
$0 new [type] [bugnum]
Create a new advisory file. [type] should be security or bugfix and
[bugnum] is the bugzilla bug number.
END
},
show => {
run => \&showadv,
descr => 'Show an advisory',
usage => <<END,
$0 show [ID]
Show an advisory.
END
},
update => {
run => \&updateadv,
descr => 'Update the advisories database',
usage => <<END,
$0 update
Update the advisories database.
END
},
usage => {
run => \&usage,
descr => 'Show usage informations for an action',
usage => <<END,
$0 usage [action]
Show action usage
END
},
);
sub usage {
if ($_[1] && $actions{$_[1]}) {
print STDERR $actions{$_[1]}->{usage};
} else {
print STDERR "$0 [action] [options]\n";
print STDERR "$0 usage [action]\n\n";
print STDERR "Available actions:\n";
print STDERR map { " - $_ : $actions{$_}->{descr}\n" } keys %actions;
}
}
sub usageexit {
usage(@_);
exit 1;
}
sub mksite {
my %advdb;
$advdb{advisories} = MGA::Advisories::get_advisories();
MGA::Advisories::publish_advisories(\%advdb);
MGA::Advisories::sort_advisories(\%advdb);
MGA::Advisories::output_pages(\%advdb);
MGA::Advisories::dumpdb(\%advdb);
MGA::Advisories::send_adv_mail(\%advdb);
MGA::Advisories::send_report_mail(\%advdb);
}
sub newadv {
usageexit('usage', $_[0]) unless @_ == 3;
my ($new, $type, $bugnum) = @_;
my $file = MGA::Advisories::newadv($type, $bugnum);
if ($file) {
my $editor = $ENV{EDITOR} || $ENV{VISUAL} || '/usr/bin/editor';
system($editor, $file);
}
}
sub listadv {
usageexit('usage', $_[0]) unless @_ == 1;
my %advdb;
$advdb{advisories} = MGA::Advisories::get_advisories();
MGA::Advisories::listadv(\%advdb);
}
sub showadv {
usageexit('usage', $_[0]) unless @_ == 2;
my $adv = $_[1];
my %advdb;
$advdb{advisories} = MGA::Advisories::get_advisories();
MGA::Advisories::showadv(\%advdb, $adv);
}
sub updateadv {
usageexit('usage', $_[0]) unless @_ == 1;
MGA::Advisories::download_advisories;
}
if (@ARGV == 0 || !$actions{$ARGV[0]}) {
usageexit();
}
$actions{$ARGV[0]}->{run}->(@ARGV);
|