[Gelistirici] [RFC] COMAR Değişiklikleri
Bahadır Kandemir
bahadir at pardus.org.tr
7 Ağu 2008 Per 12:42:08 EEST
Selamlar,
Bir sonraki major COMAR sürümünde (~170 COMAR betiğinde değişiklik gerektiği
için 2009'da, delta paketleri kullanmaya başlarsak 2008.X'de kullanılması
muhtemel sürüm) model ve betiklerde değişiklik yapmayı planlıyor ve
değişklikleri (ve yapılması istenen/beklenen değişiklikleri) tartışmaya
açıyorum...
Modeller
========
Model ve betik değişikliklerinin çok olduğu 2008 sürecinde, manager/backend
geliştiricilerinin kendi uygulamalarını yayınlamadan önce COMAR sürümünü
beklemelerinin gerekmesi sebebiyle, birkaç geliştiriciden model.xml'in
atılması ya da sürekli COMAR sürümü beklemeyi gerektirmeyecek başka bir çözüm
getirilmesi konusunda talep geldi. Model.xml'in, D-Bus geçişi ile birlikte
1.0'a göre daha karışıklaştığı konusunda arkadaşlara katılırken, belirli
zamanlar dışında model değişikliği fazla olmayacağından, geliştiricilerin
COMAR sürümünü beklemesinin ölümcül olmadığını düşünmekteyim.
model.xml'i, şu an üç iş için kullanıyoruz:
- Tutarlılığı sağlama. Sunulan sınıf ve metodların bir yerde tanımlı olması,
ve betik yazarlarının bu tanıma uyması gerekiyor.
- Betiklerde tanımlı metodların tamamına değil, sadece modelde tanımlı
metodlara ulaşılması için. Kod içinde "from os import system" gibi bir satır
varsa, kullanıcının system() metodunu çağırmasını istemeyiz :)
- D-Bus Introspection [1] verisi sunmak için. COMAR 2.0'da model.xml'in
değişmesinin sebebi bu.
model.xml'deki "access_label" attribute'unu (birden fazla metodun aynı
PolicyKit politikasını kullanması için yaptığım iğrenç hack) kaldırmayı ve
model.xml'i parçalara ayırmayı düşünüyorum. Önerilere açığım.
Betikler
========
Betiklerde, yapmayı düşündüğüm iki değişiklik var:
- Yetki denetimi işini betiklerin içine taşıma, böylece daha düzenli bir yapı
oluşturma ve daha yetenekli bir erişim denetimi sunma.
- "conditional" tipteki servis betiklerinin düzgün çalışması için, kayıt
edildikten sonra ek iş yapılması gerektiği için betiklere onRegister() ve
onRemove() gibi iki metod ekleme. PiSi ve COMAR'daki System.Service
workaround'larından kurtulacağız bu şekilde.
Bu değişiklikler ile, User.Manager betiğinin alacağı şekil şöyle:
---------------------------------------------------------------------
# User.Manager metodları
"""
Kullanıcı eklemek için 'tr.org.pardus.comar.user.manager.adduser'
yetkisine sahip olmalı.
"""
@polkit.action("tr.org.pardus.comar.user.manager.adduser")
def addUser(uid, name, realname, ...):
...
...
"""
İşlem yapacağı UID, çağrıyı yapan UID değilse
'tr.org.pardus.comar.user.manager.setuser' yetkisine sahip olmalı.
"""
def setUser(uid, realname, ...):
if uid != caller.uid:
# Yetki yoksa
polkit.check("tr.org.pardus.comar.user.manager.setuser")
...
...
...
...
# COMAR metodları
"""
Betik kayıt edildikten hemen sonra çalıştırılacak kod.
System.Service betiklerinde, kayıt sonrası bir işlem yapılmasına
ihtiyaç duyulmuş, PiSi içerisinde yapılan bir workaround ile
çözülmüştü.
"""
def onRegister():
...
...
"""
Betik kaldırılmadan önce çalıştırılacak kod.
"""
def onRemove():
...
...
---------------------------------------------------------------------
i18n
====
comar.log'da sıkça görülen "Unable to get caller info: Unable to lookup
session information for process" hatasıyla kendini belli eden, root
kullanıcısı tarafından yapılan çağrılarda tüm mesajların İngilizce olmasına
(root iken "service" komutunu çalıştırıp görebilirsiniz) sebep olan i18n
hatası.
Çağrıyı yapan kullanıcının, mesajları hangi dilde istediğini COMAR 1.0'da
localize() metodunu çağırarak belirliyorduk. COMAR 2.0'da bunu, çağrıyı yapan
sürecin yerel bilgisine bakarak yapmaya başladık. ConsoleKit'in root
kullanıcına ait oturum bilgisini tutmaması yüzünden çağrıyı yapan süreç
bilgisine ulaşamayan COMAR, çevirileri yapamaz oldu. COMAR'da clientlara ait
yerel bilgilerini tutacak basit bir session yapısı ve localize() metodu ile
halledeceğim bu işi.
İyi çalışmalar
[1]
http://dbus.freedesktop.org/doc/dbus-specification.html#introspection-format
--
Bahadır Kandemir
http://www.pardus.org.tr
-------------- sonraki bölüm --------------
A non-text attachment was scrubbed...
Name: kullanılamıyor
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
URL: <http://liste.pardus.org.tr/gelistirici/attachments/20080807/26b3d2ee/attachment-0002.pgp>
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi