2014-08-14

Fetchmail にて SSL 証明書を確認する

Fetchmail でも, SSL を使用して通信を暗号化できる. 注意しなければいけないのは, 設定ファイルに sslcertck を書いておく事. これをしていないと, 中間者攻撃に脆弱になってしまう. 証明書の検査に関して, fetchmailの振舞いを試してみた. (証明書のチェックで失敗させるため, CommonName を不一致にさせて実験した.) 以下が使用した .fetchmailrc
set postmaster hoge
set nobouncemail

poll imap.example.com
protocol imap
user hoge
password 1234
ssl sslcertck
flush
no mimedecode
smtphost localhost
is hoge@example.org

sslcertck を書いておいた場合. 証明書のチェックで問題があると, 以下のようにエラーになって止まる.

$ fetchmail -v 
fetchmail: 6.3.17 は example.com とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が開始されました。
xx.xx.xx.xx/993 へ接続しようとしています...接続しました。
fetchmail: サーバ証明書:
fetchmail: 発行元の組織: HogeSign, Inc.
fetchmail: 発行元の CommonName: HogeSign Class 3 International Server CA - G3
fetchmail: Subject CommonName: imap.example.com
fetchmail: サブジェクトの別名: imap.example.com
fetchmail: サーバの CommonName が一致しません : imap.example.com != example.com
fetchmail: xx.xx.xx.xx の key fingerprint は次の通りです。: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 
140276599748424:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1170:
fetchmail: SSL による接続に失敗しました。
fetchmail: socketエラーが hoge@example.com よりメールを受信している最中に発生しました。
fetchmail: 6.3.17 は xx.xx.xx.xx とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が終了しました。
fetchmail: Query status=2 (SOCKET)
fetchmail: 通常の終了です。status 2

sslcertck を書いていない場合, 証明書に問題があっても, そのまま通信を行なってしまう. (従って, ユーザ名やパスワードが漏れてしまう.)

fetchmail: 6.3.17 は example.com とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が開始されました。
xx.xx.xx.xx/993 へ接続しようとしています...接続しました。
fetchmail: サーバ証明書:
fetchmail: 発行元の組織: HogeSign, Inc.
fetchmail: 発行元の CommonName: HogeSign Class 3 International Server CA - G3
fetchmail: Subject CommonName: imap.example.com
fetchmail: サブジェクトの別名: imap.example.com
fetchmail: サーバの CommonName が一致しません : imap.example.com != example.com
fetchmail: example.com の key fingerprint は次の通りです。: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 
fetchmail: 警告:接続は保護されていません、続けます。(--sslcertckの使用をお勧めします!)
fetchmail: IMAP< * OK .
fetchmail: IMAP> A0001 CAPABILITY
fetchmail: IMAP< * CAPABILITY IMAP4rev1 NAMESPACE IDLE LITERAL+ UIDPLUS QUOTA AUTH=LOGIN
fetchmail: IMAP< A0001 OK .
fetchmail: IMAP> A0002 LOGIN "hoge" *
...

正常な通信の場合.

fetchmail: 6.3.17 は imap.example.com とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が開始されました。
49.102.153.235/993 へ接続しようとしています...接続しました。
fetchmail: サーバ証明書:
fetchmail: 発行元の組織: HogeSign, Inc.
fetchmail: 発行元の CommonName: HogeSign Class 3 International Server CA - G3
fetchmail: Subject CommonName: imap.example.com
fetchmail: サブジェクトの別名: imap.example.com
fetchmail: imap.example.com の key fingerprint は次の通りです。: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 
fetchmail: IMAP< * OK .
fetchmail: IMAP> A0001 CAPABILITY
fetchmail: IMAP< * CAPABILITY IMAP4rev1 NAMESPACE IDLE LITERAL+ UIDPLUS QUOTA AUTH=LOGIN
fetchmail: IMAP< A0001 OK .
fetchmail: IMAP> A0002 LOGIN "hoge" *
fetchmail: IMAP< A0002 OK .
...

2014-08-07

docomoのメール

いつのまにやら, IMAPでドコモのメールを取得できるようになったらしい. 操作手順を見てみると, どうやらメールアプリから設定が必要らしい. メールアプリは, 携帯電話の設定を初期化した頃から使用できなくなってしまっている...

「ドコモメール (ブラウザ版)」というのでなんとかならないかと思ったが, こんなメッセージがでた: spモードメールをご利用中のため、ドコモメールをご利用いただけません。(1301_lwprap26)

長い間, ドコモのメールは見れない状態が続いている. 誰にもアドレスを教えていないから, 特に問題はないはずだ.

android の soff など

Android にて root を取得したあとよく使う機能に, いわゆる soff というものがある. なにをしているかというと, lsm_disabler.ko というカーネルモジュールをロードしている. このあと, /system を RW モードでリマウントする場合, soff を使わず, 以下のように書くこともできる.
insmod /sdcard/external_sd/lsm_disabler.ko
mount -o remount,rw /system
システムへの変更は最小限にとどめておきたいので, soff はインストールせず, もともと入っているコマンドだけを使うようにしている... というのは建前で, soff とか busybox とかを用意するのが面倒なだけ.

2014-08-06

Mutt 設定にメール誤送信防止を実装

最近はやりの, メール誤送信防止機能: 単に, 送信手続き後にメール配送を取り消すだけだが, 役に立つことが時々ある.
これを, 普段メインで使っている Mutt でもできたらいいなと思って, 設定してみた.

送信時に, 自前で用意したスクリプトを呼び出し, その中で, 30秒の遅延をいれる. 30秒以内にそのスクリプトを殺せば, 配送をキャンセルできる.
まず, 以下のスクリプト .mutt/delay.sendmail を用意する. (hoge@* のところで, 自分あてかどうかを判別する. 自分あてならすぐに配送する.)

#! /bin/bash

tmp=$(mktemp)
recpt_d=()
recpt_m=()
flags=()
rrr=''

cat >$tmp

while (($# > 0)); do
    case "$1$rrr" in
        -f)
            flags=("${flags[@]}" "$1" "$2")
            shift 2
            ;;
        --)
            rrr='--'
            shift
            ;;
        *)
            case "$1" in
                hoge@*)
                    recpt_m=("${recpt_m[@]}" "$1")
                    ;;
                *)
                    recpt_d=("${recpt_d[@]}" "$1")
                    ;;
            esac
            shift
            ;;
    esac
done

if (( ${#recpt_m[@]} > 0)); then
    /usr/sbin/sendmail "${flags[@]}" "${recpt_m[@]}" <$tmp
fi
if (( ${#recpt_d[@]} > 0)); then
    (sleep 30 && /usr/sbin/sendmail "${flags[@]}" "${recpt_d[@]}" <$tmp ; rm $tmp) &
else
    rm $tmp
fi

そして, .muttrc に以下の設定を書く.
set sendmail="$HOME/.mutt/delay.sendmail"

送信を取り消したいときは, 以下のコマンドを30秒以内に.

killall delay.sendmail

2014-08-02

Virtuoso のライセンスと nscd

なぜか, nscd が止まっていると Virtuoso のライセンスを取得できない...
$ strmin 
*WARNING* voInit failed to find the passwd entry for (null), using '/tmp' for a home directory.
The most likely cause of this problem is the failure of NIS lookups.
Please contact your system administrator.
*WARNING* voInit failed to get the current user's login name, setting user to unknown.
*ERROR* License "111" could not be checked out.
...
nscd を起動したら, このエラーが解決された. なぜだろう...

2014-08-01

Loop exceeded maximum iteration limit.

Synopsys Design Compiler にで RTLを合成する時, 非常に広いバス配線などをループで記述すると以下のエラーが出る.
Error:  mod1.v:13: Loop exceeded maximum iteration limit. (ELAB-900)
このような場合, hdlin_while_loop_iterationsを設定しなおせば良いらしい.
set hdlin_while_loop_iterations 8191
このエラーが出る時, たいていの場合は, 合成できない記述になっていると考える方が良いのかもしれないが...

ICC上で特定のネットだけ再配線させる

Synopsys IC Compiler で配線すると, なぜか大きく迂回した配線ができてしまうことがある. このネットがアンテナ違反を起こした...

しかたないので, 以下のように一度その配線を消し, もう一度配線しなおした.

remove_net_shape [ get_net_shapes -of_objects {net1} ]
route_zrt_group -nets {net1}