BLOGTIMES
2017/02/10

milter-manager 環境 に smf-spf v2.2 をインストール

  postfix  milter  c 
このエントリーをはてなブックマークに追加

先日、smf-spf を RPM でインストールしましたが、この作業でインストールされた smf-spf 2.0.2 には server address が unknown な場合に segfault するというバグがあり、気づくとデーモンが落ちている場合があって困っていたので、これが fix されている v2.2 にアップデートしてみました。

導入は基本的に make , make install だけで大丈夫ですが、x86_64 なので libmilter の場所を合わせるために Makefile を少しいじらないとコンパイルが通りませんでした。また、ちょっと挙動が気にくわない部分があったので、その部分は C の該当部分を書き換えてあります。

比較的単純なプログラムなので、C言語の勉強としてもちょうど良い感じです。

wget https://github.com/jcbf/smf-spf/archive/v2.2.tar.gz -O smf-spf-2.2.tar.gz tar zxvf smf-spf-2.2.tar.gz cd smf-spf-2.2 # ここで以下の diff の内容を編集 make make install

diff -u smf-spf-2.2{.org,}

Common subdirectories: smf-spf-2.2.org/init and smf-spf-2.2/init diff -u smf-spf-2.2.org/Makefile smf-spf-2.2/Makefile --- smf-spf-2.2.org/Makefile 2016-11-04 07:08:51.000000000 +0900 +++ smf-spf-2.2/Makefile 2017-02-10 21:46:35.793337210 +0900 @@ -5,10 +5,10 @@ CONFDIR = /etc/mail/smfs USER = smfs GROUP = smfs -CFLAGS = -O2 -D_REENTRANT -fomit-frame-pointer -I/usr/local/include +CFLAGS = -O2 -D_REENTRANT -fomit-frame-pointer -I/usr/local/include -I/usr/include/milter-manager/libmilter # Linux -LDFLAGS = -lmilter -lpthread -L/usr/lib/libmilter -L/usr/local/lib -lspf2 +LDFLAGS = -lmilter -lpthread -L/usr/lib64 -lspf2 # FreeBSD #LDFLAGS = -lmilter -pthread -L/usr/local/lib -lspf2 @@ -32,8 +32,10 @@ rm -f smf-spf.o smf-spf install: - @./install.sh @cp -f -p smf-spf $(SBINDIR) + +install-conf: + @./install.sh @if test ! -d $(DATADIR); then \ mkdir -m 700 $(DATADIR); \ chown $(USER):$(GROUP) $(DATADIR); \ diff -u smf-spf-2.2.org/smf-spf.c smf-spf-2.2/smf-spf.c --- smf-spf-2.2.org/smf-spf.c 2016-11-04 07:08:51.000000000 +0900 +++ smf-spf-2.2/smf-spf.c 2017-02-12 02:34:00.366461264 +0900 @@ -884,7 +884,7 @@ authserv_id, "none", context->sender, context->helo); break; } - smfi_insheader(ctx, 1, "Authentication-Results", spf_hdr); + smfi_addheader(ctx, "Authentication-Results", spf_hdr); free(spf_hdr); } } @@ -1004,7 +1004,7 @@ fprintf(stderr, "pthread_mutex_init failed\n"); goto done; } - umask(0177); + umask(0117); if (conf.spf_ttl && !cache_init()) syslog(LOG_ERR, "[ERROR] cache engine init failed"); ret = smfi_main(); if (ret != MI_SUCCESS) syslog(LOG_ERR, "[ERROR] terminated due to a fatal error");

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9135
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン