ソケットポリシーファイルを設置

FlexでSocketを使いたくて。
これを置くだけで5時間位かかった…。
flashpolicyd_v0.6で用意されてる3つすべて試して、やっと。
Perl_xinetdを試して動かず。
Python_xinetdを試して動かず。
Python_initを試して起動せず。
Standaloneでは動くのに。
 
ログを出力してやっと解った。

  File "/usr/local/sbin/flashpolicyd.py", line 38
    with open(path, 'rb') as f:
            ^
SyntaxError: invalid syntax

 
スクリプトの1行目、 "#!/usr/bin/env python" が原因だった。
rootでは、Python2.6で実行してた。
serviceでは、Python2.4で実行してた。
Pythonのwithステートメントは2.6で標準機能に追加されたらしい。
それが原因だった。
1行目を "#!/usr/local/bin/python2.6" に修正。
 
Flash Playerはこんなログを出力してたのに、見当違いだった。

警告 : [strict] 構文が正しくないため、xmlsocket://example.com:843 のポリシーファイルは無視されます。この問題の解決方法については、http://www.adobe.com/go/strict_policy_files_jp を参照してください。

 
インストール。

echo "flashpolicy\t843/tcp" >> /etc/services
wget http://download.macromedia.com/pub/developer/flashpolicyd_v0.6.zip
unzip flashpolicyd_v0.6
cd flashpolicyd_v0.6/Python_init/
sed -i 's@^.*env python.*$@#!/usr/local/bin/python2.6@' flashpolicyd.py
sh install.sh
service flashpolicyd start
# /usr/local/etc/flashpolicy.xml を好きなように書き換える
# iptables設定 TCPの843ポートを開く

 
スタンドアロンで起動。

./flashpolicyd.pl --file=../policyfile.xml --port=843
./flashpolicyd.py --file=../policyfile.xml --port=843

 
動作検証。

python -c 'print "<policy-file-request/>%c" % 0' | nc 127.0.0.1 843
perl -e 'printf "<policy-file-request/>%c",0' | nc 127.0.0.1 843

 
ソケットポリシーファイルサーバの設定 | デベロッパーセンター
http://www.adobe.com/jp/devnet/flashplayer/articles/socket_policy_files.html