<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>wolfg&#039;s Weblog &#187; postfix</title>
	<atom:link href="http://guoyong.org/tag/postfix/feed" rel="self" type="application/rss+xml" />
	<link>http://guoyong.org</link>
	<description>wolfg&#039;s journey with open source, linux, programming, sysadm ...</description>
	<lastBuildDate>Thu, 04 Aug 2011 15:02:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/cn/</creativeCommons:license>		<item>
		<title>一个Python脚本，让OpenVPN使用postfix邮箱帐号进行身份认证</title>
		<link>http://guoyong.org/2008/05/14/359</link>
		<comments>http://guoyong.org/2008/05/14/359#comments</comments>
		<pubDate>Wed, 14 May 2008 13:27:36 +0000</pubDate>
		<dc:creator>wolfg</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[md5crypt]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://guoyong.org/?p=359</guid>
		<description><![CDATA[这几天配置OpenVPN，使用了用户名密码的身份认证方式，借助已有的postfix邮箱帐号，省去了再为每个人设置用户名密码的麻烦。 原理很简单，OpenVPN服务器配置里有这样一句： auth-user-pass-verify /etc/openvpn/auth-postfix-mailbox.py via-env 就是说要用/etc/openvpn/auth-postfix-mailbox.py这个脚本来验证用户名和密码。用户名和密码如何传递给它呢？via-env，环境变量。 脚本如下： #!/usr/bin/env python &#160; import&#160;os import&#160;sys from&#160;MySQLdb import * import&#160;md5crypt &#160; def&#160;auth(username, password): &#160; conn = connect&#160;(host = 'localhost', &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; user = 'dbuser', &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; passwd = 'dbpasswd', &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>这几天配置OpenVPN，使用了用户名密码的身份认证方式，借助已有的postfix邮箱帐号，省去了再为每个人设置用户名密码的麻烦。</p>
<p>原理很简单，OpenVPN服务器配置里有这样一句：</p>
<div class="hl-surround"><div class="hl-main">auth-user-pass-verify /etc/openvpn/auth-postfix-mailbox.py via-env</div></div>
<p>就是说要用/etc/openvpn/auth-postfix-mailbox.py这个脚本来验证用户名和密码。用户名和密码如何传递给它呢？via-env，环境变量。</p>
<p>脚本如下：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">#!/usr/bin/env python</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">import</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">os</span></li>
<li><span style="color: Green;">import</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">sys</span></li>
<li><span style="color: Green;">from</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">MySQLdb</span><span style="color: Gray;"> </span><span style="color: Green;">import</span><span style="color: Gray;"> *</span></li>
<li><span style="color: Green;">import</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">md5crypt</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">def</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">auth</span><span style="color: Olive;">(</span><span style="color: Blue;">username</span><span style="color: Gray;">, </span><span style="color: Blue;">password</span><span style="color: Olive;">)</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">conn</span><span style="color: Gray;"> = </span><span style="color: Blue;">connect</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">host</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">localhost</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">user</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">dbuser</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">passwd</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">dbpasswd</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">db</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">postfix</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">cursor</span><span style="color: Gray;"> = </span><span style="color: Blue;">conn</span><span style="color: Gray;">.</span><span style="color: Blue;">cursor</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">cursor</span><span style="color: Gray;">.</span><span style="color: Blue;">execute</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;&quot;&quot;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; select password from mailbox </span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; where username=%s</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; and active=1</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; </span><span style="color: #8b0000;">&quot;&quot;&quot;</span><span style="color: Gray;">, </span><span style="color: Olive;">(</span><span style="color: Blue;">username</span><span style="color: Olive;">))</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">row</span><span style="color: Gray;"> = </span><span style="color: Blue;">cursor</span><span style="color: Gray;">.</span><span style="color: Blue;">fetchone</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">row</span><span style="color: Gray;"> == </span><span style="color: Green;">None</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">1</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">crypt</span><span style="color: Gray;"> = </span><span style="color: Blue;">md5crypt</span><span style="color: Gray;">.</span><span style="color: Blue;">md5crypt</span><span style="color: Olive;">(</span><span style="color: Blue;">password</span><span style="color: Gray;">, </span><span style="color: Blue;">row</span><span style="color: Olive;">[</span><span style="color: Maroon;">0</span><span style="color: Olive;">])</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">cursor</span><span style="color: Gray;">.</span><span style="color: Blue;">execute</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;&quot;&quot;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; select * from mailbox</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; where username=%s </span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; and password=%s</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; and active=1</span></li>
<li><span style="color: Red;">&nbsp;&nbsp; </span><span style="color: #8b0000;">&quot;&quot;&quot;</span><span style="color: Gray;">, </span><span style="color: Olive;">(</span><span style="color: Blue;">username</span><span style="color: Gray;">,</span><span style="color: Blue;">crypt</span><span style="color: Olive;">))</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">row</span><span style="color: Gray;"> = </span><span style="color: Blue;">cursor</span><span style="color: Gray;">.</span><span style="color: Blue;">fetchone</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">cursor</span><span style="color: Gray;">.</span><span style="color: Blue;">close</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">conn</span><span style="color: Gray;">.</span><span style="color: Blue;">close</span><span style="color: Olive;">()</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">row</span><span style="color: Gray;"> == </span><span style="color: Green;">None</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">1</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Maroon;">0</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">def</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">main</span><span style="color: Olive;">()</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">status</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">try</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">username</span><span style="color: Gray;"> = </span><span style="color: Blue;">os</span><span style="color: Gray;">.</span><span style="color: Blue;">environ</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">username</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">password</span><span style="color: Gray;"> = </span><span style="color: Blue;">os</span><span style="color: Gray;">.</span><span style="color: Blue;">environ</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">password</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">status</span><span style="color: Gray;"> = </span><span style="color: Blue;">auth</span><span style="color: Olive;">(</span><span style="color: Blue;">username</span><span style="color: Gray;">, </span><span style="color: Blue;">password</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">except</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">exit</span><span style="color: Olive;">(</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">exit</span><span style="color: Olive;">(</span><span style="color: Blue;">status</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">__name__</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">__main__</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">:</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Blue;">main</span><span style="color: Olive;">()</span></li></ol></div>
<p>由于postfix使用md5认证，所以需要用md5crypt这个模块，从<a href="http://www.sabren.net/code/python/crypt/md5crypt.py">这里</a>可以下载到。</p>
]]></content:encoded>
			<wfw:commentRss>http://guoyong.org/2008/05/14/359/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>postfix和postgrey问题</title>
		<link>http://guoyong.org/2008/05/13/358</link>
		<comments>http://guoyong.org/2008/05/13/358#comments</comments>
		<pubDate>Tue, 13 May 2008 14:58:21 +0000</pubDate>
		<dc:creator>wolfg</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postgrey]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://guoyong.org/?p=358</guid>
		<description><![CDATA[公司的邮件服务器收不到外来邮件了，日志里有这样的错误： 554 Service unavailable; Client host [xxx.xxx.xxx.xxx] blocked using relays.ordb.org; ordb.org was shut down on December 18, 2006. Please remove from your mailserver.; 对应main.cf里的配置是这样的： smtpd_client_restrictions = permit_mynetworks, warn_if_reject reject_rbl_client sbl.spamhaus.org, warn_if_reject reject_rbl_client relays.ordb.org, warn_if_reject reject_rbl_client blackholes.easynet.nl, warn_if_reject reject_rbl_client dnsbl.njabl.org 改成只保留smtpd_client_restrictions = permit_mynetworks， 又有新信息出现： postfix/smtpd[16212]: warning: problem talking to server 127.0.0.1:60000: Connection timed out 127.0.0.1:60000是postgrey工作的端口，用ps和netstat 发现postgrey进程还在，但top命令发现它占用了99%的CPU，而且用/etc/init.d/postgrey [...]]]></description>
			<content:encoded><![CDATA[<p>公司的邮件服务器收不到外来邮件了，日志里有这样的错误：</p>
<div class="hl-surround"><div class="hl-main">554 Service unavailable; Client host [xxx.xxx.xxx.xxx] blocked using relays.ordb.org; ordb.org was shut down on December 18, 2006. Please remove from your mailserver.;</div></div>
<p>对应main.cf里的配置是这样的：</p>
<div class="hl-surround"><div class="hl-main">smtpd_client_restrictions = permit_mynetworks, warn_if_reject reject_rbl_client sbl.spamhaus.org, warn_if_reject reject_rbl_client relays.ordb.org, warn_if_reject reject_rbl_client blackholes.easynet.nl, warn_if_reject reject_rbl_client dnsbl.njabl.org</div></div>
<p>改成只保留smtpd_client_restrictions = permit_mynetworks， 又有新信息出现：</p>
<div class="hl-surround"><div class="hl-main">postfix/smtpd[16212]: warning: problem talking to server 127.0.0.1:60000: Connection timed out</div></div>
<p>127.0.0.1:60000是postgrey工作的端口，用ps和netstat 发现postgrey进程还在，但top命令发现它占用了99%的CPU，而且用/etc/init.d/postgrey stop停不掉，只好kill掉，并改postfix里相应的设置，去掉postgrey检查：</p>
<div class="hl-surround"><div class="hl-main">smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks,permit_sasl_authenticated, reject_non_fqdn_recipient,reject_unauth_destination, check_policy_service inet:127.0.0.1:60000,permit</div></div>
<p>重启postfix，邮件可以收到了。再恢复smtpd_client_restrictions的配置，去掉relays.ordb.org检查，邮件可以收到。顺便搞清楚了warn_if_reject的含义：有它在时并不真正的拒绝邮件。</p>
<p>postgrey的问题还没找到解决办法，不知道为什么会hang在那里，暂时不用它了。</p>
<p>==== 2008-05-14 ====<br />
补充： 将Berkeley DB由原来的4.3升级到4.4以后，postgrey正常了。<br />
搜索到的相关信息：</p>
<p><a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441069" title="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441069" target="_blank">bugs.debian.org/cgi-bin/bugreport.cgi?bug=441069</a></p>
<p><a href="https://bugs.edge.launchpad.net/ubuntu/gutsy/+source/db4.4/+bug/153996" title="https://bugs.edge.launchpad.net/ubuntu/gutsy/+source/db4.4/+bug/153996" target="_blank">bugs.edge.launchpad.net/ubuntu/gutsy/+source/db4.4&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://guoyong.org/2008/05/13/358/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级系统导致Postfix的SMTP认证失败（Cyrus-SASL + MySQL）</title>
		<link>http://guoyong.org/2008/01/29/351</link>
		<comments>http://guoyong.org/2008/01/29/351#comments</comments>
		<pubDate>Mon, 28 Jan 2008 16:38:37 +0000</pubDate>
		<dc:creator>wolfg</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://guoyong.org/2008/01/29/351</guid>
		<description><![CDATA[日志里这样的错误信息： warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory 最终发现原因：main.cf里smtpd_sasl_path的设置错误，可能是更新修改的。 把smtpd_sasl_path=/etc/postfix/sasl:/usr/lib/sasl2改成smtpd_sasl_path=smtpd后，重启postfix和courier-authdaemon，问题解决。]]></description>
			<content:encoded><![CDATA[<p>日志里这样的错误信息：<br />
warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory</p>
<p>最终发现原因：main.cf里smtpd_sasl_path的设置错误，可能是更新修改的。<br />
把smtpd_sasl_path=/etc/postfix/sasl:/usr/lib/sasl2改成smtpd_sasl_path=smtpd后，重启postfix和courier-authdaemon，问题解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://guoyong.org/2008/01/29/351/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>让Postfix使用保存在MySQL中的加了密的密码字段(Ubuntu 6.06 TLS)</title>
		<link>http://guoyong.org/2006/12/02/293</link>
		<comments>http://guoyong.org/2006/12/02/293#comments</comments>
		<pubDate>Fri, 01 Dec 2006 17:49:45 +0000</pubDate>
		<dc:creator>wolfg</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://guoyong.org/2006/12/02/293</guid>
		<description><![CDATA[这两天在Ubuntu下折腾Postfix + Courier-IMAP + Cyrus-SASL + MySQL + PostfixAdmin，主要参考这个Howto(flurdy.com/docs/postfix/) 配置了Postfix Admin，所以邮件用户的密码用了md5的加密方式存放在MySQL数据库中的（不想用明文）。这样一来，IMAP服务器可以支持加密的密码字段，认证没有问题，但SMTP服务器不行。 Google了好久，发现网上大多数都是使用明文密码的，也有用saslauthd的pam认证方式来做的。我一开始是用明文的，觉得不好（能看到用户的密码，心里不安），又试了pam方式但没成功（不知道为什么，没深究）。最后终于找到牛人给Cyrus-SASL写的patch（针对2.1.19版本的），安装步骤参考 blog.matroid.org/display/26 $ cd ~$ apt-get source libsasl2$ sudo apt-get build-dep libsasl2下载这个为Debian修改过的patch文件$ wget http://blog.matroid.org/files/20060116-crypted-passwords-for-couriour-and-postfix-in-mysql/cyrus-sasl-2.1.19-checkpw.c.patch_mgr$ cd cyrus-sasl-2.1.19.dfsg1$ tar xvzf cyrus-sasl-2.1.19.dfsg1.tar.gz$ ln -s cyrus-sasl-2.1.19.dfsg1 cyrus-sasl-2.1.19.orig$ cp ../cyrus-sasl-2.1.19-checkpw.c.patch_mgr debian/patches/28_cyrus-sasl-2.1.19-checkpw.c.patch做些修改，将patch文件里的cyrus-sasl-2.1.19.org替换为cyrus-sasl-2.1.19.dfsg1，不然会patch会失败。改好后，编译$ fakeroot debian/rules binary成功后，安装生成的deb包$ cd ..$ sudo dpkg -i *.deb 配置/etc/postfix/sasl/smptd.conf pwcheck_method: auxpropauxprop_plugin: sqlallowanonymouslogin: noallowplaintext: yesmech_list: PLAIN LOGINsrp_mda: md5srvtab: [...]]]></description>
			<content:encoded><![CDATA[<p>这两天在Ubuntu下折腾Postfix + Courier-IMAP + Cyrus-SASL + MySQL + PostfixAdmin，主要参考这个Howto(<a href="http://flurdy.com/docs/postfix/" title="http://flurdy.com/docs/postfix/" target="_blank">flurdy.com/docs/postfix/</a>)<br />
配置了Postfix Admin，所以邮件用户的密码用了md5的加密方式存放在MySQL数据库中的（不想用明文）。这样一来，IMAP服务器可以支持加密的密码字段，认证没有问题，但SMTP服务器不行。</p>
<p>Google了好久，发现网上大多数都是使用明文密码的，也有用saslauthd的pam认证方式来做的。我一开始是用明文的，觉得不好（能看到用户的密码，心里不安），又试了pam方式但没成功（不知道为什么，没深究）。最后终于找到牛人给Cyrus-SASL写的patch（针对2.1.19版本的），安装步骤参考 <a href="http://blog.matroid.org/display/26" title="http://blog.matroid.org/display/26" target="_blank">blog.matroid.org/display/26</a></p>
<div class="hl-surround"><div class="hl-main">$ cd ~<br />$ apt-get source libsasl2<br />$ sudo apt-get build-dep libsasl2<br />下载这个为Debian修改过的patch文件<br />$ wget http://blog.matroid.org/files/20060116-crypted-passwords-for-couriour-and-postfix-in-mysql/cyrus-sasl-2.1.19-checkpw.c.patch_mgr<br />$ cd cyrus-sasl-2.1.19.dfsg1<br />$ tar xvzf cyrus-sasl-2.1.19.dfsg1.tar.gz<br />$ ln -s cyrus-sasl-2.1.19.dfsg1 cyrus-sasl-2.1.19.orig<br />$ cp ../cyrus-sasl-2.1.19-checkpw.c.patch_mgr debian/patches/28_cyrus-sasl-2.1.19-checkpw.c.patch<br />做些修改，将patch文件里的cyrus-sasl-2.1.19.org替换为cyrus-sasl-2.1.19.dfsg1，不然会patch会失败。改好后，编译<br />$ fakeroot debian/rules binary<br />成功后，安装生成的deb包<br />$ cd ..<br />$ sudo dpkg -i *.deb</div></div>
<p>配置/etc/postfix/sasl/smptd.conf</p>
<div class="hl-surround"><div class="hl-main">pwcheck_method: auxprop<br />auxprop_plugin: sql<br />allowanonymouslogin: no<br />allowplaintext: yes<br />mech_list: PLAIN LOGIN<br />srp_mda: md5<br /><br />srvtab: /dev/null<br />opiekeys: /dev/null<br /><br />password_format: crypt<br /><br />sql_user: username<br />sql_passwd: password<br />sql_hostnames: sql.example.org<br />sql_database: database_name<br />sql_select: SELECT password FROM mailbox WHERE username = '%u@%r'</div></div>
<p>重启Postfix就可以了。</p>
]]></content:encoded>
			<wfw:commentRss>http://guoyong.org/2006/12/02/293/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

