首页 > 数据库技术 > 详细

freeradius增加Access-Challeng支持

时间:2014-02-15 11:25:32      阅读:644      评论:0      收藏:0      [点我收藏+]

freeradius默认的逻辑不支持Access-Challeng,只在特定auth-type中Access-Challeng,在auth.c中 只对request->proxy_reply包进行处理,所以你在普通逻辑中如果想返回Access-Challeng必须增加逻辑:

jradius中:

                              RadiusPacket reply = new AccessChallenge();
                                reply.setIdentifier(rep.getIdentifier());
                                reply.addAttribute(new Attr_Prompt(Attr_Prompt.NoEcho));
                                reply.addAttribute(new Attr_ReplyMessage("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
                                reply.addAttribute(new Attr_State("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
                                jRequest.setReplyPacket(reply);

                               //这里为了防止freeradius中增加逻辑的负作用(防止其它逻辑走进来),可以加其它不常用的Attribute作为条件
                                jRequest.setReturnValue(JRadiusServer.RLM_MODULE_OK);
                                return false;

auth.c中:

int rad_authenticate(REQUEST *request) 函数开始增加几个判断:

        VALUE_PAIR *state;
        VALUE_PAIR *prompt;

       VALUE_PAIR *上面定义的一个不常用的attribute;

        state =  pairfind(request->reply->vps, PW_STATE);
        prompt = pairfind(request->reply->vps, PW_PROMPT);

       不常用的attribute = pairfind(request->reply->vps, PW_不常用的attribute);

       if(state && prompt && 不常用的attribute){

            //这里可remove掉那个不常用的attribute

                request->reply->code = PW_ACCESS_CHALLENGE;
                RDEBUG("Change reply code to Access-Challenge.");
                return RLM_MODULE_OK;

       }


OK,重新编译可以正常返回Access-Challenge了。

freeradius增加Access-Challeng支持

原文:http://blog.csdn.net/axman/article/details/19208215

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!