[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