30 Ağustos 2010 Pazartesi

ptsp_installer ve guestlogin projeleri çalışmaları

ptsp_installer projesi ile ilgili, daha önce de yapacağım dediğim, dosyaları düzenlerken girdilerin varlığı kontrolünü ekledim.

Şimdilik hosts ve exports dosyasındakilere bakıyor, dhcpd.conf dosyasında eskisi gibi kalıyor. Bu kontrolü ilk başta:

for line in file_pointer.readlines()

şeklinde yapıyordum. Fakat bu şekilde yapmanın bir açık/sorun yaratabileceğine karar verdim ve bu döngülerden önce:

orig_exports = file_pointer.readlines()

ya da

orig_hosts = file_pointer.readlines()

yapıyor ve ondan hemen sonra da:

file_pointer.close()

yaparak dosya ile işimi bitiriyorum.

Bundan sonra da for döngüsü ile satır satır okuyarak içinde IP'leri arıyorum. Eğer yok ise bunları bir string'e aktarıyorum. En son ise dosyayı "w" modunda oluşturarak (yok ise yarat var ise üzerine yaz) hepsini:

file_pointer.writelines(new_hosts)

veya

file_pointer.writelines(new_exports)

ile yazıyordum. Şimdilik bunlar sorunsuz çalışıyor. Bir sonraki iş olarak dhcpd.conf dosyasını da bu şekilde düzenlemek var.

Guestlogin projesinde de en son Onur'un fikri olan girişte parola sorma fikrini nasıl uygularız diyordum ve aklıma daha önce de gelmiş olan başka birisinin o kullanıcı adı ile giriş yapmasını nasıl engelleriz diye düşündüm. Ben, guestlogin.py üzerinden eğer kullanıcı adı guestX şeklinde ise reddet desem bile bir sonraki modül olan pam_unix burdan giriş yapılmasına izin verecektir.

Şimdilik aklıma bununla ilgili bir çözüm gelmiyor ama bunun bir sorun olacağı kanaatindeyim çünkü bu kullanıcı çıkış yaparken bütün verileri de silinecek ve öbür oturumdaki kullanıcının oturumu muhtemelen kilitlenecek. Bunu önlemenin bir yolunu bulmak lazım.

1 yorum:

Bahadır Kandemir dedi ki...

Bahsetmediğin sorun, okuma-yazma arasındaki zamanda dosyanın değiştirilme ihtimali ve bu değişikliğin kaybolması ise; diğer yöntemde de bundan kurtulamıyorsun.

http://svn.pardus.org.tr/uludag/trunk/pardus-python/pardus/fileutils.py içindeki FileLock mekanizmasını kullananan bir @dekoratör yazarak, fonksiyonu değiştirmeden sorunlardan kurtulabilirsin.

Ben dosya değiştirme işini şöyle yapıyorum (karışmasın diye dekoratör kullanmadım):

http://cekirdek.pardus.org.tr/~bahadir/scripts/lines.py