pfSense – Captive Portal Admin Girişi Yapmadan Kullanıcı Açmak

pfSense

Bir süredir pfSense ile ilgileniyorum, çeşitli konularda pfSense forumlarından yardım alıyorum. Türkçe bölümünde görevli arkadaşlar konuyla çok ilgililer bu nedenle bende ufak tefek katılar da bulunmak istedim. Captive Portal admin girişi yapmadan aşağıda hazırladığım dosya ile basit şekilde kullanıcı tanımlayabiliriniz.

<?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.

4 Comments to “pfSense – Captive Portal Admin Girişi Yapmadan Kullanıcı Açmak”

  1. Güzel yazı elinize sağlık Aydın Bey. Arkasında büyük bir emek olduğu anlaşılıyor.

  2. teşekkür ederim

  3. Aydın bey merhaba
    forumada 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

  4. 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.

Leave a Reply









This site is using OpenAvatar based on