index.cgi
changeset 0 7c4112f0469d
equal deleted inserted replaced
-1:000000000000 0:7c4112f0469d
       
     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