#!/usr/bin/perl
#
# Yoneticilerin bakmaya yetkili olduğu sayfalara erişmek için
# girilen şifrelerin doğru olup olmadığını kontrol eden program.
#
# Yönetici şifresi cgi-bin dizinindeki "sifre.dat" dosyasında
# saklanır. Aslında bu yontem guvenlik açısından pek sağlam 
# olmamakla birlikte, uygulamanında zaten çok fazla
# güvenlik gerektirdiği soylenemez.
#
open(DBG, ">/tmp/dbg");

print DBG "giris\n";
$gelen_bilgi = <STDIN>; 
print DBG "GELEN BILGI $gelen_bilgi\n";
chomp($gelen_bilgi); 
# gelen_bilgi içinde SIFRE=abcdef gibi bir satır olmalı.

@ciftler = split("&", $gelen_bilgi);
foreach $cift (@ciftler) {
  # 
print DBG "CIFT $cift\n";
  ($alan_adi, $degeri) = split("=", $cift);
  $degeri =~ tr/+/ /;
  $degeri =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $form{$alan_adi} = $degeri;
}

$girilen_sifre = $form{'SIFRE'};
print DBG "$gelen_sifre\n";
print DBG "$form{'SIFRE'}\n";
#
# Diskteki şifre dosyasından geçerli şifreyi al
open(SIFRE, "sifre.dat") or &hata("Şifre dosyası açılamadı!");
$gecerli_sifre = <SIFRE>;
chomp($gecerli_sifre);
print DBG "DAT $gecerli_sifre\n";
close (SIFRE);

if ( $girilen_sifre eq $gecerli_sifre ) {
   # kullanıcı geçerli bir şifre girdi.
   # Uygulamanın diğer sayfalarında kullanıcıya bir daha şifre sormamak için
   # kullanıcının tarayıcısına bir Cookie gönderelim. 
   # Kullanıcının yetkili olup olmadığını kontrol etme gereksinimi
   # duyduğumuzda kullanıcının tarayıcısından bu Cookie yi sorgulayarak
   # bu kontrolu yapabiliriz.

   # Göndereceğimiz Cookie "sifre=dogru" diye bir karakter dizisi
   # Tek yaptığı iş, kullanıcının şifresini doğru girmiş olduğunu
   # belirtmek. Elbette şifrenin kendisini de Cookie olarak gönderebilirdik
   # ama bu güvenlik açısından pek iyi olmazdı.

   # Aşağıdaki satırdaki gibi verilen Cookie'ler, kullanıcı tarayıcısını
   # kapattığı anda yok olur.
   #
   # Cookie içindeki "domain=.cgi.com.tr;" ifadesi bu Cookie'nin
   # ancak bu alan adına sahip bilgisayarlar tarafından sorgulanabileceğini
   # belirtiyor. Bir çeşit güvenlik önlemi.

   print "Set-Cookie: sifre=dogru; path=/;\n";

   # Artık rapor seçenekleri menusune geçebiliriz. Kullanıcının
   # tarayıcısın göndereceğimiz bir "Location" komutu kullanıcıyı
   # istediğimiz adrese yönlendirecektir. (Location komutunun
   # sonundaki çift \n önemlidir.

     print "Location: /cgi-bin/i_kaynak/rapor_menu.pl\n\n";

} else {

   # Bir daha denesin
   print "Location: /i_kaynak/sifre_sor.html\n\n";

}
exit;