查看路径/usr/local/sbin
可以看到有这么多的有关radius的命令
再看一看源代码中的src文件夹,所有的含有main函数的.c文件都别编译成了相应的命令,上一篇博客我们看到了3个命令的使用: radlogin,radexample,radacct。我们这次来看看radembedded(还有其他的,我就没怎么研究过了。因为我要做的事情是,利用freeradius的功能设计自己的程序,radembedded和radexample、radacct我看得比较多)。
在客户端的主机上运行 radembedded
会看到出错信息:"ERROR: Unable to set dictionary.
这是怎么回事?难道开源的代码还有错?刚开始我也认为怎么会有错呢,设计这些的专家们怎么会看不出来?可事实在这,让我顿时懵了。不过,还是要走下去啊.
回头继续看代码,发现错误在72行:
if(rc_add_config(rh,"dictionary","/usr/local/radius/dictionary","config",0)!=0)
看出错误了吗?
没看出来?那就试试这个吧
cat /usr/local/etc/radiusclient/radiusclient.conf
(也可以看看上篇博客的相应部分)
发现原来是dictionary的值错了,应该是:
/usr/local/etc/radiusclient/dictionary
而不是: /usr/local/radius/dictionary
改正之。重新编译安装,再运行一下radembedded。
又错了?是不是 段错误(Segmentation Failure)?
别着急。用gdb查看一下。指示我们在这个地方出现了问题: 在buildrequest.c中的rc_aaa函数中,
int radius_deadtime = rc_conf_int(rh, "radius_deadtime");出现了段错误。
我于是去看代码,找不出问题。师兄(佩服并感谢一下)来也看了一段时间,然后找到了错误所在:在radembedded.c中没有把 radius_deadtime写进配置文件中去!
所以要在radembedded.c中添加如下代码(仿照前面的格式即可):
if (rc_add_config(rh, "radius_deadtime ", "0", "config", 0) != 0)
{
printf("ERROR: Unable to set radius_deadtime./n");
rc_destroy(rh);
exit(1);
}
好了,现在没错了。
----------------------------------------------------------------------------------------------------------------------
写这个是因为我之前多相信这些源代码是没有错误的。后面发现了错误对我的触动很大。尽信书不如无书。我们要学会质疑,切记切记!
转载请注明来自:piaoxuwuyu的优快云博客。谢谢!