⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rlm_chap.c

📁 radius server在linux下的源码
💻 C
字号:
/* * rlm_chap.c * * Version:  $Id: rlm_chap.c,v 1.7 2004/02/26 19:04:27 aland Exp $ * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * * Copyright 2001  The FreeRADIUS server project * Copyright 2001  Kostas Kalevras <kkalev@noc.ntua.gr> * * Nov 03 2001, Kostas Kalevras <kkalev@noc.ntua.gr> * - Added authorize() function to set Auth-Type if Chap-Password exists * - Added module messages when rejecting user */#include "autoconf.h"#include "libradius.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include "radiusd.h"#include "modules.h"#include "conffile.h"static const char rcsid[] = "$Id: rlm_chap.c,v 1.7 2004/02/26 19:04:27 aland Exp $";static int chap_authorize(void *instance, REQUEST *request){	/* quiet the compiler */	instance = instance;	request = request;	if (!request->password ||	    request->password->attribute != PW_CHAP_PASSWORD) {		return RLM_MODULE_NOOP;	}	if (pairfind(request->config_items, PW_AUTHTYPE) != NULL) {		DEBUG2("  rlm_chap: WARNING: Auth-Type already set.  Not setting to CHAP");		return RLM_MODULE_NOOP;	}	DEBUG("  rlm_chap: Setting 'Auth-Type := CHAP'");	pairadd(&request->config_items,		pairmake("Auth-Type", "CHAP", T_OP_EQ));	return RLM_MODULE_OK;}/* *	Find the named user in this modules database.  Create the set *	of attribute-value pairs to check and reply with for this user *	from the database. The authentication code only needs to check *	the password, the rest is done here. */static int chap_authenticate(void *instance, REQUEST *request){	VALUE_PAIR *passwd_item;	char pass_str[MAX_STRING_LEN];	VALUE_PAIR *module_fmsg_vp;	char module_fmsg[MAX_STRING_LEN];	/* quiet the compiler */	instance = instance;	request = request;	if (!request->username) {		radlog(L_AUTH, "rlm_chap: Attribute \"User-Name\" is required for authentication.\n");		return RLM_MODULE_INVALID;	}	if (!request->password) {		radlog(L_AUTH, "rlm_chap: Attribute \"CHAP-Password\" is required for authentication.");		return RLM_MODULE_INVALID;	}	if (request->password->attribute != PW_CHAP_PASSWORD) {		radlog(L_AUTH, "rlm_chap: Attribute \"CHAP-Password\" is required for authentication. Cannot use \"%s\".", request->password->name);		return RLM_MODULE_INVALID;	}	if (request->password->length == 0) {		radlog(L_ERR, "rlm_chap: empty password supplied");		return RLM_MODULE_INVALID;	}	/*	 *	Don't print out the CHAP password here.  It's binary crap.	 */	DEBUG("  rlm_chap: login attempt by \"%s\" with CHAP password",		request->username->strvalue);	if ((passwd_item = pairfind(request->config_items, PW_PASSWORD)) == NULL){		DEBUG("  rlm_chap: Could not find clear text password for user %s",request->username->strvalue);		snprintf(module_fmsg,sizeof(module_fmsg),"rlm_chap: Clear text password not available");		module_fmsg_vp = pairmake("Module-Failure-Message", module_fmsg, T_OP_EQ);		pairadd(&request->packet->vps, module_fmsg_vp);		return RLM_MODULE_INVALID;	}	DEBUG("  rlm_chap: Using clear text password %s for user %s authentication.",	      passwd_item->strvalue, request->username->strvalue);	rad_chap_encode(request->packet,pass_str,request->password->strvalue[0],passwd_item);	if (memcmp(pass_str+1,request->password->strvalue+1,CHAP_VALUE_LENGTH) != 0){		DEBUG("  rlm_chap: Pasword check failed");		snprintf(module_fmsg,sizeof(module_fmsg),"rlm_chap: Wrong user password");		module_fmsg_vp = pairmake("Module-Failure-Message", module_fmsg, T_OP_EQ);		pairadd(&request->packet->vps, module_fmsg_vp);		return RLM_MODULE_REJECT;	}	DEBUG("  rlm_chap: chap user %s authenticated succesfully",request->username->strvalue);	return RLM_MODULE_OK;}/* *	The module name should be the only globally exported symbol. *	That is, everything else should be 'static'. * *	If the module needs to temporarily modify it's instantiation *	data, the type should be changed to RLM_TYPE_THREAD_UNSAFE. *	The server will then take care of ensuring that the module *	is single-threaded. */module_t rlm_chap = {	"CHAP",	0,				/* type */	NULL,				/* initialization */	NULL,				/* instantiation */	{		chap_authenticate,	/* authentication */		chap_authorize,	 	/* authorization */		NULL,			/* preaccounting */		NULL,			/* accounting */		NULL,			/* checksimul */		NULL,			/* pre-proxy */		NULL,			/* post-proxy */		NULL			/* post-auth */	},	NULL,				/* detach */	NULL,				/* destroy */};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -