<?php
/**
* Captive Portal'dan bagimsiz olarak kullanici eklenebilmesi icin hazirlanmistir.
* Test edilmedi, mevcut bir sistemden orneklenmistir. Kullanim icin PHP bilgisi gerekmektedir.
*
* 2011.08.13
* Aydin Yakar
*/
require("guiconfig_user.inc"); //guiconfig.inc dosyasi auth kaldirilarak guiconfig_user.inc isimle kaydedildi.
if($_POST) {
//kullanici adi ve sifreyi kucuk harf yapalim
$_username = strtolower($_POST['username']);
$_password = strtolower($_POST['password']);
$_bitistar = $_POST['bitistarihi'];
$_adsoyad = $_POST['adisoyadi'];
if (!is_array($config['captiveportal']['user']))
{
$config['captiveportal']['user'] = array();
}
captiveportal_users_sort();
$a_user = &$config['captiveportal']['user'];
//suresi dolan hesaplari sil
$changed = false;
for ($i = 0; $i < count($a_user); $i++) {
if ($a_user[$i]['expirationdate'] && (strtotime("-1 day") > strtotime($a_user[$i]['expirationdate']))) {
unset($a_user[$i]);
$changed = true;
}
}
if ($changed) {
write_config();
}
foreach ($a_user as $userent) {
if ($userent['name'] == $_username && $userent['password'] == md5($_password)) {
// login Ok, oturum ac
$loginok = true;
$loginDetay = $userent;
break;
}
}
//kullanici ve sifre var ayni zamanda dogru
if($loginok)
{
// Login
$orig_host = $_ENV['HTTP_HOST'];
$orig_request = $_POST['redirurl'];
$clientip = $_SERVER['REMOTE_ADDR'];
$clientmac = arp_get_mac_by_ip($clientip);
$macfilter = !isset($config['captiveportal']['nomacfilter']);
if (!$clientmac && $macfilter) {
captiveportal_logportalauth("unauthenticated","noclientmac",$clientip,"ERROR");
echo "An error occured. Please check the system logs for more information.";
log_error("Captive portal could not deterimine clients MAC address. Disable MAC address filtering in captive portal if you do not needs this functionality.");
exit;
}
captiveportal_logportalauth($loginDetay['name'],$clientmac,$clientip,"LOGIN");
portal_allow($clientip, $clientmac,$loginDetay['name']);
header("Location: $orig_request");
}
else
{
$userent['name'] = $_username;
$userent['fullname'] = $_adsoyad;
$userent['expirationdate'] = date("m/d/Y", strtotime($_bitistar));
$userent['password'] = md5($_password);
$a_user[] = $userent;
write_config();
// Login
$orig_host = $_ENV['HTTP_HOST'];
$orig_request = $_POST['redirurl'];
$clientip = $_SERVER['REMOTE_ADDR'];
$clientmac = arp_get_mac_by_ip($clientip);
$macfilter = !isset($config['captiveportal']['nomacfilter']);
if (!$clientmac && $macfilter) {
captiveportal_logportalauth("unauthenticated","noclientmac",$clientip,"ERROR");
echo "An error occured. Please check the system logs for more information.";
log_error("Captive portal could not deterimine clients MAC address. Disable MAC address filtering in captive portal if you do not needs this functionality.");
exit;
}
captiveportal_logportalauth($userent['name'],$clientmac,$clientip,"LOGIN");
portal_allow($clientip, $clientmac,$userent['name']);
}
}
else
{
/**
* Yeni kullanici olusturulmasi icin gerekli kayit formunu olusturunuz.
* username = kullanici adi.
* password = sifresi
* bitistarihi = kullanicinin kullanim suresi
* adisoyadi = adi ve soyadi
*
* Form POST methodu ile gonderilmelidir.
*/
?>
<form name="yeniUyelik" action="uye_kayit.php" method="post">
Kulllanici Adi: <input type="text" name="username"><br />
Sifre: <input type="text" name="password"><br />
Ad Soyad: <input type="text" name="adisoyadi"><br />
Uye Bitis Tarihi: <input type="text" name="bitistarihi"><br />
<input type="submit" name="gonder" value="Kaydet">
</form>
<?php
}
?>
Konuyla ilgili pfSense forumunda sorular ve cevaplar yer almaktadır, yorum ve forum mesajları ile siz de katkıda bulunabilirsiniz.
NOT: Bu düzenleme pfSense 1.2.3 için yapılmışdır, şuanda mevcut sürüm olan pfSense 2.0 Release'de deneme şansım olmadı fakat onda da bu işlemden çok farklı değil.
Güzel yazı elinize sağlık Aydın Bey. Arkasında büyük bir emek olduğu anlaşılıyor.
YanıtlaSilteşekkür ederim
YanıtlaSilAydın bey merhaba
YanıtlaSilforumada yazdım ancak henüz problemi aşamadım.
buradaki işlemleri sırasıyla yaptım ancak sayfayı actığımda " Fatal error: Call to undefined function is_subsystem_dirty() in /usr/local/www/guiconfig_user.inc on line 89" hatası veriyor.
87 /* Some ajax scripts still need access to GUI */
88 if(!$ignorefirmwarelock) {
89 if (is_subsystem_dirty('firmwarelock')) {
if (!$d_isfwfile) {
header("Location: system_firmware.php");
exit;
} else {
return;
}
}
}
guiconfig_user.inc içeriği bu şekilde 89 da bu satır var : if (is_subsystem_dirty('firmwarelock')) {
yardımcı olabilirseniz sevinirim
Hatadan anlaşıldığı üzere "is_subsystem_dirty()" fonksiyonu tanımlanmamış. Öncelikle WinSCP programıyla bağlanarak sistemdeki dosyaları bilgisayarınıza indirin ve Notepad++ tarzı bir program ile hata veren fonksiyonun tanımlandığı dosyayı bularak çalıştırdığınız dosyaya include ediniz sorun düzelecektir.
YanıtlaSilhocam aynı mantıkla DHCP server statik ip atamak ve freeradius mac eklemek isityorum acaba hangi dosyaları işlem yapıyor buna göre php ile scirpt yazmak istiyorum fikrinizi alabilirmiyim...
YanıtlaSilYönetim panelinin adres satırından ilgili php dosyalarını incelemek gerekir. Radius kullanmıyorum, DHCP Server için ise zaten adres satırında ilgili php dosyasının adını bulabilir ve dosya detaylarını inceleyebilirsiniz. Takıldığınız yer olursa tekrar sorabilirsiniz.
YanıtlaSilaydın bey iyi günler pfsense 2.0.1 gerekli ayarları yaptım internete cıkıyorum ama yeniuye_kayit.php ulasılamıyor
YanıtlaSilUlaşılamıyor konusunu biraz açmanız gerekiyor, sayfa bulunamadı şeklinde midir yoksa sizi yönetim paneline mi yönlendiriyor?
YanıtlaSilMerhabalar Aydın bey,
YanıtlaSilÇalışmayı attım sayfayada ulaşabiliyorum fakat kullanıcı oluştur dediğimde aşağıdaki hatayı alıyorum. Kullandığım PF versiyonu 2.0.1 Ne yapabilirim yardımcı olurmusunuz.
CSRF check failed. Either your session has expired, this page has been inactive too long, or you need to enable cookies.
Debug:
cookies leri temizledim. Şimde ekran boş geliyor. Kullanıcı adı, şifre vs. giriş ekranları gelmiyor.
YanıtlaSilYeni versiyon da durumunu kontrol etmedim, kontrol edip gerekli düzenlemeleri belirteyim..
YanıtlaSil