2009年11月28日土曜日

[Google Apps更新情報] Google Apps Connectorアップデート

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.14でSegmentation Fault

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連発で少し焦った。


2009年11月19日木曜日

Djangoでmodels.pyを分割する

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したときにエラーにならないけど、テーブルは作成されていない。



2009年11月13日金曜日

python-ldapでpaged controlのsearch処理

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



2009年11月12日木曜日

Samba4の初パッチ投稿

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

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

2009年11月6日金曜日

[Google Apps更新情報] Gmailのオフライン機能の改良

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

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