2009年11月アーカイブ

http://googleappsupdates.blogspot.com/2009/11/new-version-of-google-apps-connector.html

Google Apps Connector for Blackberry Enterprise Serverがバージョンアップ。

  • 1サーバーで500人まで利用可能になった
  • 64bit版 Windowsで利用可能になった
  • Blackberry Professional Softwareのサポート
  • 1サーバーで複数の組織に対応可能になった
  • ログ機能の改善

Solaris10で、Apache 2.2.0~2.2.13を動かすと、CVE-2009-2699の脆弱性の影響範囲に該当する。
インターネットにつながっているサーバーだと、どうやらIPアドレス総当たり?で順番に攻撃を受けることがあるようで、何週間かに1回ほど、Apacheがストール状態に陥る状況に遭遇した。

対策として、Apacheのアップデートということで、2.2.14にアップデートしたところ、いきなりSegmentation Fault連発で使い物にならなかった。
調べてみたところ、下記の問題のようだった。
https://issues.apache.org/bugzilla/show_bug.cgi?id=48029

ということで、apacheのソース中のsrclib/aprディレクトリに、上記の報告の一番最後に記載されているパッチを適用したところ、問題無く動作するようになって安堵した。

http://svn.apache.org/viewvc/apr/apr/branches/1.3.x/poll/unix/port.c?r1=807269&r2=829803

まさかのSegmentation Fault連発で少し焦った。

Djangoでmodels.pyを分割する

| コメント(0) | トラックバック(0)

Djangoでは、アプリケーションのモデルをmodels.pyにclassとして定義するけど、
1つのファイルに定義するにはあまりにも大きくなりすぎたので、分割しようと思った。

いろいろ調べたところ、次の方法で実現できた。

最初は次のような構成になっている。


- project
- app
- models.py
- views.py

このmodels.pyに、demo1クラスとdemo2クラスがあるとすると、
次のようにして分割することができた。


- project
- app
- modelsディレクトリ
- __init__.py
- model1.py
- model2.py
- views.py

model1.pyに含まれるdemo1クラスは次のようにMetaクラスを定義し、app_labelに「app」の名前を定義する。


from django.db import models
class demo1(Models.model):
class Meta:
app_label = 'app'

... 通常の定義 ...

model2.pyに含まれるdemo2クラスは、demo1クラスと同じようにMetaクラスの定義とapp_labelの設定を行う。


from django.db import models
class demo2(Models.model):
    class Meta:
         app_label = 'app'

... 通常の定義 ...

最後にapp/models/__init__.py に、次の設定を追加する。


from model1 import demo1
from model2 import demo2

これで、manage.py syncdbしたときに、それぞれのモデルのテーブルが作成される。
注意点としては、ForeignKey()を利用するときには、対象のクラスを忘れないようにimportしないといけない。importを忘れると、syncdbしたときにエラーにならないけど、テーブルは作成されていない。

Active Directoryからエントリを検索するときに、検索結果が1000件を越えると、
size limitのエラーになってしまう。
このような場合に備えて、paged control付きのsearchをpython-ldapでどのように
実装するか調べてみた。
python-ldapのsampleに入っているらしいけど、次のようなコードでできた。


#!/usr/bin/python
import ldap
from ldap.controls import SimplePagedResultsControl
url = "ldap://adserver.example.com"
base = "dc=example,dc=com"
filter = "sAMAccountName=*"
page_size = 1000
conn = ldap.initialize(url)
conn.simple_bind_s("Administrator@example.com","password")
lcon = SimplePagedResultsControl(ldap.LDAP_CONTROL_PAGE_OID, True, (page_size, ''))
msgid = conn.search_ext(base, ldap.SCOPE_SUBTREE, filter, serverctrls=[lcon])
pages = 0
while True:
    pages += 1
    print "============ Get page %d ==============" % (pages,)
    (rtype, rdata, rmsgid, serverctrls) = conn.result3(msgid)
    for item in rdata:
        print item[0]
    pctrls = [
        c
        for c in serverctrls
        if c.controlType == ldap.LDAP_CONTROL_PAGE_OID
        ]
    if pctrls:
        print pctrls
        (est, cookie) = pctrls[0].controlValue
        if cookie:
            lcon.controlValue = (page_size, cookie)
            msgid = conn.search_ext(base, ldap.SCOPE_SUBTREE, filter, serverctrls=[lcon])
        else:
            break
    else:
        break

Samba4の初パッチ投稿

| コメント(0) | トラックバック(0)

Samba4のRPMパッケージを作ってみたところ、最近の変更にmake installが追随できていなかったので、パッチを登録。無事commitされた。

https://bugzilla.samba.org/show_bug.cgi?id=6887

http://googleappsupdates.blogspot.com/2009/11/download-options-for-offline-gmail.html

Gmailのオフライン機能利用時に、どのメッセージをオフラインでも読めるようにダウンロードするか選択するオプションが追加された。