#!/usr/bin/perl
use DBI;
use User::pwent;
# Get the input
if($ARGV[0] eq ""){
$buffer=$ENV{'QUERY_STRING'};
if($buffer eq ""){
read(STDIN,
$buffer,
$ENV{'CONTENT_LENGTH'});
}
}
else {
$buffer=$ARGV[0];
}
# Split the name-value pairs
@pairs =
split(/&/,
$buffer);
foreach $pair (@pairs) {
($name,
$value) =
split(/=/,
$pair);
$value =~
s/&
#37;([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$buffer=`cat mysql.conf`;
@pairs = split(/\n/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
$nome_bd=$FORM{"nome_bd"};
$nome_server=$FORM{"nome_server"};
$login=$FORM{"login"};
$pass=$FORM{"pass"};
$linha_conn = "DBI:mysql:$nome_bd:$nome_server:3306";
$dbh=DBI->connect($linha_conn,$login,$pass,{ RaiseError => 1, AutoCommit => 1 });
print "Content-type: text/html\n";
$cookie = GetCookies ('Maputo');
$COOKIE = $Cookies{'Maputo'};
print "\n";
$sth=$dbh->prepare("select ID from USER where COOKIE='$COOKIE'");
$sth->execute;
@row = $sth->fetchrow_array();
$ID=$row[0];
$sth->finish;
if($row[0] eq ""){
$sth->finish;
$dbh->disconnect;
exit;
}
$sth->finish;
$mostra_dados=0;
if($FORM{'INSERT'} eq "ok"){
&verifica_dados;
if($erro_dados == 0){
if($FORM{'ID'} ne ""){
&actualiza_dados;
}
else {
&insere_dados;
}
$mostra_dados=1;
&formulario;
}
else {
&formulario;
}
}
else {
&formulario;
}
$dbh->disconnect;
exit;
########################################################
# CORRIGE DADOS #
########################################################
sub formulario{
print <<EOM;
<html>
<head>
<title>Maputo Admin</title>
</head>
<link rel="stylesheet" type="text/css" href="/css/estilo.css">
<body leftmargin="5" marginwidth="5" topmargin="5" marginheight="5" >
EOM
if($FORM{'ID'} eq ""){
print <<EOM;
<span class="titre2">Add User</span>
<br><br>
EOM
}
else {
print <<EOM;
<span class="titre2">Edit User</span>
<br><br>
EOM
}
if($erro_dados == 1){
print <<EOM;
<span class="titre3"><font color=red>Please correct the fields with <font size=-0>*</font></font></span>
EOM
}
print <<EOM;
<table border=0 cellpadding=2>
<form method="post" action="/cgi-bin/add_user.pl">
<input type=hidden name="ID" value="$FORM{'ID'}">
<input type=hidden name="INSERT" value="ok">
EOM
if($FORM{'INSERT'} ne "ok" && $mostra_dados == 0){
if($FORM{'ID'} ne ""){
$sth=$dbh->prepare("select * from USER where ID='$FORM{'ID'}'");
$sth->execute;
@row = $sth->fetchrow_array();
$FORM{'LOGIN'} = $row[1];
$FORM{'PASSWORD'} = $row[2];
$FORM{'NAME'} = $row[4];
$FORM{'EMAIL'} = $row[5];
$sth->finish;
}
}
print<<EOM;
<tr>
<td align=right>
<span class=titre3>Login: </span>
</td>
<td>
EOM
if($mostra_dados == 0){
print <<EOM;
<span class="searchField"><input type="text" name="LOGIN" size="60" style="font-family: Arial; font-size: 11; color:#000000; background:#EEEEEE;" value="$FORM{'LOGIN'}"></span>
EOM
}
else {
print <<EOM;
<span class=titre3>$FORM{'LOGIN'} </span>
EOM
}
print <<EOM;
</td>
</tr>
<tr>
<td align=right>
<span class=titre3>Password: </span>
</td>
<td>
EOM
if($mostra_dados == 0){
print <<EOM;
<span class="searchField"><input type="password" name="PASSWORD" size="60" style="font-family: Arial; font-size: 11; color:#000000; background:#EEEEEE;" value="$FORM{'PASSWORD'}"></span>
EOM
}
else {
print <<EOM;
<span class=titre3>$FORM{'PASSWORD'} </span>
EOM
}
print <<EOM;
</td>
</tr>
<tr>
<td align=right>
<span class=titre3>Name: </span>
</td>
<td>
EOM
if($mostra_dados == 0){
print <<EOM;
<span class="searchField"><input type="text" name="NAME" size="60" style="font-family: Arial; font-size: 11; color:#000000; background:#EEEEEE;" value="$FORM{'NAME'}"></span>
EOM
}
else {
print <<EOM;
<span class=titre3>$FORM{'NAME'} </span>
EOM
}
print <<EOM;
</td>
</tr>
<tr>
<td align=right>
<span class=titre3>Email: </span>
</td>
<td>
EOM
if($mostra_dados == 0){
print <<EOM;
<span class="searchField"><input type="text" name="EMAIL" size="60" style="font-family: Arial; font-size: 11; color:#000000; background:#EEEEEE;" value="$FORM{'EMAIL'}"></span>
EOM
}
else {
print <<EOM;
<span class=titre3>$FORM{'EMAIL'} </span>
EOM
}
print <<EOM;
</td>
</tr>
</table>
EOM
$sth=$dbh->prepare("select ID from ACCESS where IDUSER='$ID' and TABLE_NAME='ACCESS' and R=1 and W=1 and D=1");
$sth->execute;
@row = $sth->fetchrow_array();
$table_access=$row[0];
$sth->finish;
if($table_access ne ""){
print <<EOM;
<table border=1 cellpadding=2>
EOM
$sth=$dbh->prepare("select * from ACCESS where ID='$FORM{'ID'}'");
$sth->execute;
@row = $sth->fetchrow_array();
$sth->finish;
print<<EOM;
<tr>
<td bgcolor=black><span class=titre3><b><font color=white>Table</font></b></span></td>
<td bgcolor=black><span class=titre3><b><font color=white>Read</font></b></span></td>
<td bgcolor=black><span class=titre3><b><font color=white>Write</font></b></span></td>
<td bgcolor=black><span class=titre3><b><font color=white>Delete</font></b></span></td>
</tr>
EOM
$sth2=$dbh->prepare("select TABLE_NAME from TABLE_LIST order by TABLE_NAME");
$sth2->execute;
while((@row2) = $sth2->fetchrow_array()){
$estado_r="";
$estado_w="";
$estado_d="";
$mostra_r=" ";
$mostra_w=" ";
$mostra_d=" ";
if($FORM{'INSERT'} ne "ok" && $mostra_dados == 0){
if($FORM{'ID'} ne ""){
$sth3=$dbh->prepare("select R, W, D from ACCESS where IDUSER='$FORM{'ID'}' and TABLE_NAME = '$row2[0]'");
$sth3->execute;
@row3 = $sth3->fetchrow_array();
if($row3[0] eq "1"){
$estado_r='checked="true"';
$mostra_r="X";
}
if($row3[1] eq "1"){
$estado_w='checked="true"';
$mostra_w="X";
}
if($row3[2] eq "1"){
$estado_d='checked="true"';
$mostra_d="X";
}
$sth3->finish;
}
}
else {
if($FORM{"R_$row2[0]"} eq "on"){
$estado_r='checked="true"';
$mostra_r="X";
}
if($FORM{"W_$row2[0]"} eq "on"){
$estado_w='checked="true"';
$mostra_w="X";
}
if($FORM{"D_$row2[0]"} eq "on"){
$estado_d='checked="true"';
$mostra_d="X";
}
}
if($mostra_dados == 0){
<tr>
<td><span class=titre3>$row2[0]</span></td>
<td align=center><input name="R_$row2[0]" type="checkbox" $estado_r></td>
<td align=center><input name="W_$row2[0]" type="checkbox" $estado_w></td>
<td align=center><input name="D_$row2[0]" type="checkbox" $estado_d></td>
</tr>
EOM
}
else {
<tr>
<td><span class=titre3>$row2[0]</span></td>
<td align=center><span class="titre2">$mostra_r</span></td>
<td align=center><span class="titre2">$mostra_w</span></td>
<td align=center><span class="titre2">$mostra_d</span></td>
</tr>
EOM
}
}
$sth2->finish;
</td>
</tr>
</table>
EOM
}
if($mostra_dados == 0){
<font size=-1><INPUT TYPE=submit VALUE = "Send" style="font-family: Arial; font-size: 9; color:#000000; background:#EEEEEE;"></font>
</form>
EOM
}
else {
<br>
<span class=titre2> <font color=red>Info updated</font></span>
EOM
}
</body>
</html>
EOM
}
########################################################
# VERIFICA DADOS #
########################################################
sub verifica_dados{
$erro_dados=0;
if($FORM{'LOGIN'} eq "" || $FORM{'LOGIN'} eq "*"){
$erro_dados=1;
$FORM{'LOGIN'}="*";
}
if($FORM{'PASSWORD'} eq "" || $FORM{'PASSWORD'} eq "*"){
$erro_dados=1;
$FORM{'PASSWORD'}="*";
}
if($FORM{'NAME'} eq "" || $FORM{'NAME'} eq "*"){
$erro_dados=1;
$FORM{'NAME'}="*";
}
if($FORM{'EMAIL'} !~ /\@/ || $FORM{'EMAIL'} eq "*"){
$erro_dados=1;
$FORM{'EMAIL'}="*";
}
$sth=$dbh->prepare("select ID, LOGIN from USER where LOGIN='$FORM{'LOGIN'}'");
$sth->execute;
@row = $sth->fetchrow_array();
if($row[0] ne "" && $row[0] ne $FORM{'ID'}){
$erro_dados=1;
$FORM{'LOGIN'}="*";
}
$sth->finish;
}
########################################################
# ACTUALIZA DADOS #
########################################################
sub actualiza_dados{
$dbh->do("insert into USER_HIST
(IDINI, LOGIN, PASSWORD, NAME, EMAIL, IDLOGIN)
values ($FORM{'ID'}, '$FORM{'LOGIN'}', '$FORM{'PASSWORD'}', '$FORM{'NAME'}', '$FORM{'EMAIL'}', $ID)");
$dbh->do("update USER set
LOGIN='$FORM{'LOGIN'}', PASSWORD='$FORM{'PASSWORD'}', NAME='$FORM{'NAME'}', EMAIL='$FORM{'EMAIL'}'
where ID=$FORM{'ID'}");
$sth=$dbh->prepare("select ID from ACCESS where IDUSER='$ID' and TABLE_NAME='ACCESS' and R=1 and W=1 and D=1");
$sth->execute;
@row = $sth->fetchrow_array();
$table_access=$row[0];
$sth->finish;
if($table_access ne ""){
$sth2=$dbh->prepare("select TABLE_NAME from TABLE_LIST order by TABLE_NAME");
$sth2->execute;
while((@row2) = $sth2->fetchrow_array()){
if($FORM{"R_$row2[0]"} eq "on"){
$R=1;
}
else {
$R=0;
}
if($FORM{"W_$row2[0]"} eq "on"){
$W=1;
}
else {
$W=0;
}
if($FORM{"D_$row2[0]"} eq "on"){
$D=1;
}
else {
$D=0;
}
$sth3=$dbh->prepare("select ID from ACCESS where IDUSER=$FORM{'ID'} and TABLE_NAME='$row2[0]'");
$sth3->execute;
@row3 = $sth3->fetchrow_array();
$IDAUX=$row3[0];
$sth3->finish;
if($IDAUX ne ""){
$dbh->do("insert into ACCESS_HIST
(IDINI, TABLE_NAME, IDUSER, R, W, D, IDLOGIN)
values ($IDAUX, '$row2[0]', $FORM{'ID'}, $R, $W, $D, $ID)");
$dbh->do("update ACCESS set
R=$R, W=$W, D=$D where ID=$IDAUX");
}
else {
$dbh->do("insert into ACCESS
(TABLE_NAME, IDUSER, R, W, D)
values ('$row2[0]', $FORM{'ID'}, $R, $W, $D)");
$sth3=$dbh->prepare("select ID from ACCESS where IDUSER=$FORM{'ID'} and TABLE_NAME='$row2[0]'");
$sth3->execute;
@row3 = $sth3->fetchrow_array();
$IDAUX=$row3[0];
$sth3->finish;
$dbh->do("insert into ACCESS_HIST
(IDINI, TABLE_NAME, IDUSER, R, W, D, IDLOGIN)
values ($IDAUX, '$row2[0]', $FORM{'ID'}, $R, $W, $D, $ID)");
}
}
$sth2->finish;
}
}
########################################################
# INSERE DADOS #
########################################################
sub insere_dados{
$dbh->do("insert into USER
(LOGIN, PASSWORD, NAME, EMAIL)
values ('$FORM{'LOGIN'}', '$FORM{'PASSWORD'}', '$FORM{'NAME'}', '$FORM{'EMAIL'}')");
$sth=$dbh->prepare("select ID from USER where LOGIN='$FORM{'LOGIN'}'");
$sth->execute;
@row = $sth->fetchrow_array();
$IDAUX=$row[0];
$sth->finish;
$dbh->do("insert into USER_HIST
(IDINI, LOGIN, PASSWORD, NAME, EMAIL, IDLOGIN)
values ($IDAUX , '$FORM{'LOGIN'}', '$FORM{'PASSWORD'}', '$FORM{'NAME'}', '$FORM{'EMAIL'}', $ID)");
$sth2=$dbh->prepare("select TABLE_NAME from TABLE_LIST order by TABLE_NAME");
$sth2->execute;
while((@row2) = $sth2->fetchrow_array()){
if($FORM{"R_$row2[0]"} eq "on"){
$R=1;
}
else {
$R=0;
}
if($FORM{"W_$row2[0]"} eq "on"){
$W=1;
}
else {
$W=0;
}
if($FORM{"D_$row2[0]"} eq "on"){
$D=1;
}
else {
$D=0;
}
$dbh->do("insert into ACCESS
(TABLE_NAME, IDUSER, R, W, D)
values ('$row2[0]', $IDAUX, $R, $W, $D)");
$sth3=$dbh->prepare("select ID from ACCESS where IDUSER=$IDAUX and TABLE_NAME='$row2[0]'");
$sth3->execute;
@row3 = $sth3->fetchrow_array();
$IDAUX2=$row3[0];
$sth3->finish;
$dbh->do("insert into ACCESS_HIST
(IDINI, TABLE_NAME, IDUSER, R, W, D, IDLOGIN)
values ($IDAUX2, '$row2[0]', $IDAUX, $R, $W, $D, $ID)");
}
$sth2->finish;
}