发信人: tcpip (俺的昵称改了), 信区: cnunix
标  题: unix环境下mail系统的简单扩容(二)
发信站: 哈工大紫丁香 (Sun Sep 26 16:40:34 1999), 转信

发信人: cpu (奔腾的心), 信区: Solaris
发信站: 华南网木棉站 (Wed Mar  3 19:59:59 1999), 转信

既然拿到了source就免不了要看一下哪些地方需要修改。

先大概讲一下怎么修改sendmail。sendmail通过/etc/passwd文件来查找用户
名,所以相关的函数很容易猜出来:getpwnam就是了。

sendmail的原码在src子目录下面,简单地用grep getpwnam *.c|more看一下
调用了getpwnam的模块,把各段原码大致分析一下发现有一个另外定义的取
用户函数sm_getpwnam,函数实现在conf.c里面:


struct passwd *
sm_getpwnam(user)
        char *user;
{
#ifdef _AIX4
        extern struct passwd *_getpwnam_shadow(const char *, const int);

        return _getpwnam_shadow(user, 0);
#else
        return getpwnam(user);
#endif
}

就是这段东东了,sm_getpwnam是标准函数getpwnam的一个wrapper函数,也就是
sendmail的取用户信息函数,当有smtp客户连进来发rcpt to: xxuser的时候
sendmail就是会去调用sm_getpwnam("xxxuser")来验证有没这个用户.

好了明白了,你现在就可以把conf.c里的sm_getpwnam改成自己所需要的样子:
比如查数据库,或者查内存中的用户表,或者向另外一个独立的用户信息服务引
擎发请求取得用户信息。。。

光改了src目录下的sm_getpwnam还不行,src只是sendmail的原码部分,父目录
下还有一个子目录叫mail.local,干什么用的一看名字就明白了,就是本地的
邮递员,sendmail收信后把信件交给邮递员来投递,邮递员程序也涉及到取用
户信息的操作,到mail.local下面grep getpwnam *就知道了。主要改mail.local.c
里面的diliver函数。

最后提一下改pop3,非常简单,有一个util.c,里面有个verify_user函数,该
函数调用了getpwnam和getspnam函数来取得用户信息和对用户进行认证,改了它
就完事了。

--
                假如你看我有点累
                就请你给我倒碗水
                假如你已经爱上我
                就请你吻我的嘴

※ 修改:.trueip 于 Sep 26 16:44:18 修改本文.[FROM: dns.mtlab.hit.ed]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: dns.mtlab.hit.ed]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: trueip.bbs@melon.gzn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.255毫秒