分析环境: RAS4 + gcc version 3.4.3 20041212 +ppp-2.4.3
使用ppp 2.4.3+rp_pppoe+freeradius搭建pppoe server时,由于某些特定的要求得不到实现,因而希望自己修改radius插件,实现自己的要求,所以做了些分析。
一、radius插件生成后缀是 .so,放置在ppp源码的pppd/plugins/radius/下,分析radius.c,可以得出插件编写的基本要求。
(1)、插件与主程序的接口为 void plugin_init(void),在这个函数里定义了当ppp链路建立连接时插件hook的相应函数。对于在这个函数里没有定义的过程,由pppd的主体函数处理,所以对于下面的过程里,可以只根据自己的要求设定hook过程
void plugin_init(void)
{
pap_check_hook = radius_secret_check; //与radius接口时的serect检查
pap_auth_hook = radius_pap_auth; // //用户名和密码pap方式的校验过程
chap_check_hook = radius_secret_check; //如果不需要处理, radius_secret_check函数直接返回1即可
chap_verify_hook = radius_chap_verify; //用户名和密码chap方式的校验过程,radius_chap_verify返回0代表密码校验不通过,返回1通过验证
ip_choose_hook = radius_choose