接上篇: radembedded错误的修改

    技术2022-05-20  43

    查看路径/usr/local/sbin

    可以看到有这么多的有关radius的命令

    再看一看源代码中的src文件夹,所有的含有main函数的.c文件都别编译成了相应的命令,上一篇博客我们看到了3个命令的使用: radloginradexampleradacct。我们这次来看看radembedded(还有其他的,我就没怎么研究过了。因为我要做的事情是,利用freeradius的功能设计自己的程序,radembeddedradexampleradacct我看得比较多)。

     

    在客户端的主机上运行 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的博客。谢谢!


    最新回复(0)