|
1 #!/usr/bin/perl |
|
2 # dieses script checkt die Anzahl virtueller Hosts und Mailadressen |
|
3 # pro Kunde für die Abrechnung |
|
4 # schlorke; |
|
5 # |
|
6 |
|
7 use warnings; |
|
8 use strict; |
|
9 use Config::IniFiles; |
|
10 use CGI qw/:standard *table/; |
|
11 use CGI::Carp qw/fatalsToBrowser/; |
|
12 use CGI::Pretty; |
|
13 use Cwd; |
|
14 use DBI; |
|
15 |
|
16 # Damit -T nicht mault |
|
17 delete @ENV{grep /PATH/, keys %ENV}; |
|
18 $ENV{PATH} = "/usr/sbin:/sbin:/usr/bin:/bin"; |
|
19 |
|
20 my $real_uid = $<; |
|
21 my $ME = url( -relative => 1 ); |
|
22 my $config_file = "acc.conf"; |
|
23 my $cfg = new Config::IniFiles( -file => "$config_file" ); |
|
24 |
|
25 my $DBH; |
|
26 my $section = "database"; |
|
27 my $db_server = $cfg->val( $section, "server" ); |
|
28 my $db_name = $cfg->val( $section, "name" ); |
|
29 my $db_user = $cfg->val( $section, "user" ); |
|
30 my $db_password = $cfg->val( $section, "password" ); |
|
31 |
|
32 my $domain; |
|
33 |
|
34 sub getRoot(); |
|
35 sub releaseRoot(); |
|
36 |
|
37 my $mx; |
|
38 |
|
39 MAIN: { |
|
40 $section = "main"; |
|
41 my $title = $cfg->val( $section, "title" ); |
|
42 my $style = $cfg->val( $section, "style" ); |
|
43 |
|
44 my %err = (); |
|
45 |
|
46 |
|
47 print header( -charset => "utf-8" ), |
|
48 start_html( |
|
49 -encoding => "utf-8", |
|
50 -title => $title, |
|
51 -author => "Grit Schlorke <schlorke\@schlittermann.de>", |
|
52 -meta => { |
|
53 "copyright" => |
|
54 "copyright 2008 Schlittermann - internet & unix support" |
|
55 }, |
|
56 -style => $style |
|
57 ); |
|
58 |
|
59 |
|
60 # |
|
61 # Formular |
|
62 # |
|
63 { |
|
64 |
|
65 map { $err{$_} = div { class => "Err" }, "[$err{$_}]" } keys %err; |
|
66 |
|
67 print div( { -id => "main_title" }, $title ); |
|
68 |
|
69 print div( |
|
70 { -id => "content" }, |
|
71 start_form(), |
|
72 "Domain:", |
|
73 textfield( |
|
74 -name => "domain", |
|
75 -size => 40, |
|
76 ), |
|
77 submit( |
|
78 -class =>"button", |
|
79 -name => "show", |
|
80 -value => "anzeigen" |
|
81 ), |
|
82 end_form() |
|
83 ); |
|
84 |
|
85 } |
|
86 |
|
87 if (param("show")) { |
|
88 $domain = param("domain"); |
|
89 |
|
90 # Webhosting |
|
91 |
|
92 getRoot(); |
|
93 my $web = "nein"; |
|
94 my $dirname = "/etc/apache2/sites-enabled"; |
|
95 |
|
96 opendir (DIR, $dirname) or die "Can't open directory: \"$dirname\": $!\n$<\n"; |
|
97 my $file; |
|
98 my $test = "www.$domain"; |
|
99 |
|
100 while (defined ($file = readdir(DIR))) { |
|
101 open (F1, "<$dirname/$file") || die "Can't open file: \"$file\": $!\n"; |
|
102 while (<F1>) { |
|
103 if ($file eq $test) { |
|
104 if (/^\s*Redirect\s\/\s(.*)/) { |
|
105 $web = "Redirect nach $1"; |
|
106 last; |
|
107 } |
|
108 if (/^\s*DocumentRoot.*?$domain/) { |
|
109 $web = "ja"; |
|
110 } |
|
111 } |
|
112 else { |
|
113 if (/^\s*ServerAlias\s(.*)/) { |
|
114 if ($1 eq $test) { |
|
115 $web = "Alias für $file"; |
|
116 } |
|
117 } |
|
118 } |
|
119 |
|
120 } |
|
121 } |
|
122 releaseRoot(); |
|
123 |
|
124 print "<div id=\"content\">", start_form(), |
|
125 start_table( { -border => "0", -width => "50%" } ), |
|
126 Tr( |
|
127 th( { -id => "view", -align => "left" }, "Webhosting"), |
|
128 ); |
|
129 print Tr( |
|
130 td( { -id => "view", -align => "left" }, $web), |
|
131 ); |
|
132 print end_table(), end_form(), "</div>"; |
|
133 |
|
134 |
|
135 # Mail-Accounts + Anzahl |
|
136 my $request; |
|
137 ($domain =~ /\s*([a-z\d-.]+)/) and $domain = $1; |
|
138 ($request = `host -t MX $domain`); |
|
139 if ($request =~ /ssl.schlittermann.de/i) { |
|
140 $mx = "ja"; |
|
141 } |
|
142 else { |
|
143 $mx = "nein"; |
|
144 } |
|
145 |
|
146 my $count; |
|
147 my $dbh; |
|
148 $dbh = DBI->connect("DBI:mysql:$db_name:$db_server", "$db_user", "$db_password", |
|
149 { RaiseError => 0, PrintError => 0, AutoCommit => 0 } ) |
|
150 or print div( { -class => "error" }, "$DBI::errstr" ) |
|
151 and exit 0; |
|
152 |
|
153 my $sth = $dbh->prepare("SELECT id, user FROM users WHERE domain='$domain'"); |
|
154 my $sth2 = $dbh->prepare("SELECT COUNT(*) FROM users WHERE domain='$domain'"); |
|
155 |
|
156 $sth->execute() |
|
157 or print div( { -class => "error" }, "$DBI::errstr" ) |
|
158 and exit 0; |
|
159 |
|
160 $sth2->execute() |
|
161 or print div( { -class => "error" }, "$DBI::errstr" ) |
|
162 and exit 0; |
|
163 $count = $sth2->fetchrow_array(); |
|
164 |
|
165 print "<div id=\"content\">", start_form(), |
|
166 start_table( { -border => "0", -width => "50%" } ), |
|
167 Tr( |
|
168 th( { -id => "view", -align => "left" }, "MX"), |
|
169 ); |
|
170 print Tr( |
|
171 td( { -id => "view", -align => "left" }, $mx), |
|
172 ); |
|
173 print end_table(), end_form(), "</div>"; |
|
174 |
|
175 print "<div id=\"content\">", start_form(), |
|
176 start_table( { -border => "0", -width => "50%" } ), |
|
177 Tr( |
|
178 th( { -id => "view", -align => "left" }, "Mail-Accounts"), |
|
179 ); |
|
180 my $line = 0; |
|
181 while ( my $row = $sth->fetchrow_arrayref() ) { |
|
182 my ( |
|
183 $id, $user |
|
184 ) = @$row; |
|
185 |
|
186 print Tr( |
|
187 td( { -id => "view", -align => "left" }, "$user\@$domain" ), |
|
188 ); |
|
189 } |
|
190 |
|
191 print end_table(), end_form(), "</div>"; |
|
192 |
|
193 print "<div id=\"content\">", start_form(), |
|
194 start_table( { -border => "0", -width => "50%" } ), |
|
195 Tr( |
|
196 th( { -id => "view", -align => "left" }, "Mail-Accounts gesamt"), |
|
197 ); |
|
198 print Tr( |
|
199 td( { -id => "view", -align => "left" }, $count), |
|
200 ); |
|
201 print end_table(), end_form(), "</div>"; |
|
202 |
|
203 } |
|
204 |
|
205 print end_html(); |
|
206 } |
|
207 |
|
208 |
|
209 sub getRoot() { $< = 0; } |
|
210 sub releaseRoot() { $< = $real_uid; } |
|
211 |
|
212 |
|
213 sub read_db() { |
|
214 my %LIST; |
|
215 my $dbh; |
|
216 END { $dbh->disconnect() if $dbh; } |
|
217 |
|
218 $dbh = DBI->connect("DBI:mysql:$db_name:$db_server", "$db_user", "$db_password", |
|
219 { RaiseError => 1 }); |
|
220 |
|
221 my $sth = $dbh->prepare("SELECT id, user FROM users WHERE domain='$domain'"); |
|
222 |
|
223 $sth->execute(); |
|
224 |
|
225 while (my $users = $sth->fetchrow_arrayref()) { |
|
226 my ($id, $user) = @{$users}; |
|
227 $LIST{$id} = $user; |
|
228 } |
|
229 return %LIST; |
|
230 |
|
231 } |
|
232 |
|
233 |
|
234 # vim:sts=4 sw=4 ai aw sm: |
|
235 |