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

📄 authconfig.c

📁 dot1x认证源码,包括dot1x数据包的收发,认证的配置,MIB的设计等
💻 C
字号:
#include "authConfig.h"
#include "ZanPortProperty.h"
#include "dot1xAuth.h"
#include <syslogMsg.h>

int SucceessRate = 0;
u_long TotalRequest = 0;
u_long TotalSuccess = 0;

u_long gTotalUserNum = 0;
u_long gMaxUserNum = 2000;

/******Config Templete******/
MainTemplete_t MainTem[MAX_MAIN_TEMPLETE_NUM];
AuthMainTemplete_t AuthTem[MAX_AUTH_TEMPLETE_NUM];
RadiusTemplete_t RadiusTem[MAX_RADIUS_TEMPLETE_NUM];
AuthWebTemplete_t WebTem[MAX_WEB_TEMPLETE_NUM];
AuthDot1xTemplete_t Dot1xTem[MAX_DOT1X_TEMPLETE_NUM];
UserManageTemplete_t UsrManTem[MAX_USER_MAN_TEMPLETE_NUM];
MessageAdvert_t MsgAdvertTem[MAX_MESSAGE_TEMPLETE_NUM];
BlackPolicy_t BlkPolcy[MAX_BLK_POLCY_NUM];

Temp2Vlan_t *Port2Temp2Vlan[64];
u_char PortDefaultTem[64] = {0};
u_char GlobalDefaultTem = 0;
zanPortPropertyRoot_t g_zanPortProperty;
/******Config Templete End******/



Mesage_Table_t MsgTbl[MAX_ROW_IN_MSG_TBL];
Advert_Table_t AdvertTbl[MAX_ROW_IN_ADVERT_TBL];
Black_Table_t BlkTbl[MAX_ROW_IN_BLK_TBL];
u_short BlkNum = 0;
Abnormal_Table_t AbnormTbl[256];
FrozenUser_Table_t FrozTbl[MAX_ROW_IN_FROZE_TBL];
Shutdown_Table_t ShutTbl[MAX_ROW_IN_SHUT_TBL];

u_long FrozeAllUser = FALSE;
u_long LimitVersion = 0;		/*wanghn 20030709 add for version check*/
u_long LimitBuild = 0;			/*wanghn 20030709 add for version check*/

LocalUserEntry_t LocalList[MAX_LOCAL_USER_NUM];

extern int flag;

void authConfigInit()
{
	int i;
	STATUS rc;
	
	/* initialize config templete */
	/*---Main Templete---*/
	for (i = 0; i < MAX_MAIN_TEMPLETE_NUM; i++)
	{
		bzero((char *)&MainTem[i], sizeof(MainTemplete_t));
		MainTem[i].RowStatus = ROW_STATUS_DESTORY;
	}
	
	/*---Auth Mode Templete---*/
	for (i = 0; i < MAX_AUTH_TEMPLETE_NUM; i++)
	{
		bzero((char *)&AuthTem[i], sizeof(AuthMainTemplete_t));
		AuthTem[i].RowStatus = ROW_STATUS_DESTORY;
	}
	
	/*---Radius Templete---*/
	for (i = 0; i < MAX_RADIUS_TEMPLETE_NUM; i++)
	{
		bzero((char *)&RadiusTem[i], sizeof(RadiusTemplete_t));
		RadiusTem[i].AcctPort = 1813;
		RadiusTem[i].AuthPort = 1812;
		RadiusTem[i].MaxDeadTimes = 10;
		RadiusTem[i].ReTransPriod = 30;
		RadiusTem[i].ReTransTimes = 3;
		RadiusTem[i].RowStatus = ROW_STATUS_DESTORY;
	}

	/*---Web Templete---*/
	for (i = 0; i < MAX_WEB_TEMPLETE_NUM; i++)
	{
		bzero((char *)&WebTem[i], sizeof(AuthWebTemplete_t));
		WebTem[i].RowStatus = ROW_STATUS_DESTORY;
	}

	/*---Dot1x Templete---*/
	for (i = 0; i < MAX_DOT1X_TEMPLETE_NUM; i++)
	{
		bzero((char *)&Dot1xTem[i], sizeof(AuthDot1xTemplete_t));
		Dot1xTem[i].AuthStyle = DOT1X_AUTH_PROTOCOL_PAP;
		Dot1xTem[i].ReTransPriod = 30;
		Dot1xTem[i].ReTransTimes = 3;
		Dot1xTem[i].ReAuthEn = TRUE;
		Dot1xTem[i].ReAuthPriod = 30;
		Dot1xTem[i].ReAuthReTransPriod = 30;
		Dot1xTem[i].ReAuthReTransTimes = 3;
		Dot1xTem[i].ReAuthStyle = HALF_RE_AUTH;
		Dot1xTem[i].HoldPriod = 10;
		Dot1xTem[i].RowStatus = ROW_STATUS_DESTORY;
	}

	/*---User Manage Templete---*/
	for (i = 0; i < MAX_USER_MAN_TEMPLETE_NUM; i++)
	{
		bzero((char *)&UsrManTem[i], sizeof(UserManageTemplete_t));
		UsrManTem[i].RowStatus = ROW_STATUS_DESTORY;
		UsrManTem[i].AddDomainEn = FALSE;
		UsrManTem[i].AntiProxy = FALSE;
		UsrManTem[i].RecBlackList = FALSE;
		UsrManTem[i].CheckClientVersion = FALSE;
		UsrManTem[i].CheckFactroy = FALSE;
		UsrManTem[i].ProtectTimer = FALSE;
		UsrManTem[i].ProtectPriod = 24 * 60 *60;	/* hours */
		UsrManTem[i].SendMessage = FALSE;
		UsrManTem[i].SendLeftUp = FALSE;
		UsrManTem[i].SendLeftDown = FALSE;
	}

	/*---Message Policy Templete---*/
	for (i = 0; i < MAX_MESSAGE_TEMPLETE_NUM; i++)
	{
		bzero((char *)&MsgAdvertTem[i], sizeof(MessageAdvert_t));
		MsgAdvertTem[i].RowStatus = ROW_STATUS_DESTORY;
	}

	/*---Black Policy Templete---*/
	for (i = 0; i < MAX_BLK_POLCY_NUM; i++)
	{
		bzero((char *)&BlkPolcy[i], sizeof(BlackPolicy_t));
		BlkPolcy[i].Status = ROW_STATUS_DESTORY;
	}

	
	for (i = 0; i < 64; i++)
	{
		Port2Temp2Vlan[i] = NULL;
	}

	
	/*---Abnormal Table---*/
	for (i = 0; i < 256; i++)
	{
		bzero((char *)&AbnormTbl[i], sizeof(Abnormal_Table_t));
	}

	/*---Black Table---*/
	for (i = 0; i < MAX_ROW_IN_BLK_TBL; i++)
	{
		bzero((char *)&BlkTbl[i], sizeof(Black_Table_t));
		BlkTbl[i].RowStatus = ROW_STATUS_DESTORY;
	}

	/*---Instant Message Table---*/
	for (i = 0; i < MAX_ROW_IN_MSG_TBL; i++)
	{
		bzero((char *)&MsgTbl[i], sizeof(Mesage_Table_t));
		MsgTbl[i].RowStatus = ROW_STATUS_DESTORY;
	} 

	/*---Instant Advert Table---*/
	for (i = 0; i < MAX_ROW_IN_ADVERT_TBL; i++)
	{
		bzero((char *)&AdvertTbl[i], sizeof(Advert_Table_t));
		AdvertTbl[i].RowStatus = ROW_STATUS_DESTORY;
	} 

	/*---Frozen Table---*/
	for (i = 0; i < MAX_ROW_IN_FROZE_TBL; i++)
	{
		bzero((char *)&FrozTbl[i], sizeof(FrozenUser_Table_t));
		FrozTbl[i].RowStatus = ROW_STATUS_DESTORY;
	} 

	/*---Shutdown Table---*/
	for (i = 0; i < MAX_ROW_IN_SHUT_TBL; i++)
	{
		bzero((char *)&ShutTbl[i], sizeof(Shutdown_Table_t));
		ShutTbl[i].RowStatus = ROW_STATUS_DESTORY;
	} 
	
	/*---Local user List---*/
	for (i = 0; i < MAX_LOCAL_USER_NUM; i++)
	{
		bzero((char *)&LocalList[i], sizeof(LocalUserEntry_t));
		LocalList[i].RowStatus = ROW_STATUS_DESTORY;
	} 

	g_zanPortProperty.pPortProperty = NULL;

	/* MIB initialize */
	rc = authConfigureMibInit(NULL, NULL);
	if (rc == ERROR)
	{
		Dot1x_logMsgSend(DOT1X_MODULE, SYSLOG_SEVERITY_EMERG, "Initaliztion", "authConfigureMib Initialize failure!!");
		return ;
	}

	rc = zanPortPropertyMibInit(NULL, NULL);
	if (rc == ERROR)
	{
		Dot1x_logMsgSend(DOT1X_MODULE, SYSLOG_SEVERITY_EMERG, "Initaliztion", "zanPortPropertyMibInit Initialize failure!!");
		return ;
	}

	rc = ieee8023xInit(NULL,NULL);
	if (rc == ERROR)
	{
		Dot1x_logMsgSend(DOT1X_MODULE, SYSLOG_SEVERITY_EMERG, "Initaliztion", "ieee8023xInit Initialize failure!!");
		return ;
	}



}


STATUS ClearBlkTbl(void)
{
	int i = 0;

	for (i = 0; i < 100; i ++)	
		bzero((char *)(&BlkTbl[i]), sizeof(Black_Table_t));

	for (i = 0; i < 256; i++)
		bzero((char *)(&AbnormTbl[i]), sizeof(Abnormal_Table_t));
	
	BlkNum = 0;
	
	return OK;	
}

void showLocalList(void)
{
	int i;

	printf("\n\nNUM    UserName        Password        RowStatus\n");
	printf("---  ------------  ----------------  --------------\n");
	for (i=0; i<32; i++)
	{
		printf("%-5d%-16s%-16s", i+1, LocalList[i].userName, LocalList[i].password);
		switch (LocalList[i].RowStatus)
		{
			case 1:
				printf("Active\n");
				break;

			case 2:
				break;

			case 3:
				printf("NotReady\n");
				break;

			case 4:
				break;

			case 5:
				break;

			case 6:
				printf("Destroy\n");
				break;
		}
	}
}



/*--------------debug routine----------------*/
void setDefaultConfig(void)
{
	GlobalDefaultTem = 1;

	MainTem[1].AuthLocation = RadiusAuthenticate;
	MainTem[1].PrimaryRadiusTempleteIndex = 1;
	MainTem[1].SecondaryRadiusTempleteIndex = 1;
	MainTem[1].AuthMainTempleteIndex = 1;
	MainTem[1].UserManageTempleteIndex = 1;
	MainTem[1].RowStatus = ROW_STATUS_ACTIVE;


	AuthTem[1].FirstAuthStyle = Auth_Style_Default;
	AuthTem[1].SecondAuthStyle = Auth_Style_Dot1x;
	AuthTem[1].AuthDot1xTempleteIndex = 1;
	AuthTem[1].AuthWEBTempleteIndex = 1;
	AuthTem[1].RowStatus = ROW_STATUS_ACTIVE;


	strcpy(WebTem[1].WebSecret, "000000");
	WebTem[1].RowStatus = ROW_STATUS_ACTIVE;

	Dot1xTem[1].AuthStyle = DOT1X_AUTH_PROTOCOL_PAP;
	Dot1xTem[1].ReTransPriod = 30;
	Dot1xTem[1].ReTransTimes = 3;
	Dot1xTem[1].ReAuthPriod = 30;
	Dot1xTem[1].ReAuthEn = TRUE;
	Dot1xTem[1].ReAuthStyle = HALF_RE_AUTH;
	Dot1xTem[1].RowStatus = ROW_STATUS_ACTIVE;

	

	UsrManTem[1].AddDomainEn = FALSE;
	strcpy(UsrManTem[1].AddDomain, "tel");
	UsrManTem[1].AntiProxy = FALSE;
	UsrManTem[1].RecBlackList = FALSE;
	UsrManTem[1].BlackListPolicyIndex = 1;
	UsrManTem[1].CheckClientVersion = FALSE;
	UsrManTem[1].CheckFactroy = FALSE;
	UsrManTem[1].ProtectTimer = FALSE;
	UsrManTem[1].ProtectPriod = 24;	/* hours */
	UsrManTem[1].SendMessage = FALSE;
	UsrManTem[1].MessagePolicyIndex = 1;
	UsrManTem[1].SendLeftUp = FALSE;
	UsrManTem[1].SendLeftDown = FALSE;
	UsrManTem[1].RowStatus = ROW_STATUS_ACTIVE;
	

	RadiusTem[1].AcctPort = 1813;
	RadiusTem[1].AuthPort = 1812;
	RadiusTem[1].MaxDeadTimes = 10;
	RadiusTem[1].ReTransPriod = 30;
	RadiusTem[1].ReTransTimes = 3;
	RadiusTem[1].RowStatus = ROW_STATUS_ACTIVE;
	RadiusTem[1].ServerIP = 0xc0a8297a;
	strcpy(RadiusTem[1].Secret, "000000");


	RadiusTem[2].AcctPort = 1813;
	RadiusTem[2].AuthPort = 1812;
	RadiusTem[2].MaxDeadTimes = 10;
	RadiusTem[2].ReTransPriod = 30;
	RadiusTem[2].ReTransTimes = 3;
	RadiusTem[2].RowStatus = ROW_STATUS_ACTIVE;
	RadiusTem[2].ServerIP = 0xc0a80902;
	strcpy(RadiusTem[2].Secret, "000000");

	MsgAdvertTem[1].MsgType = MSG_TYPE_MESSAG;
	strcpy(MsgAdvertTem[1].MsgContant, "test for config");
	MsgAdvertTem[1].RowStatus = ROW_STATUS_ACTIVE;

	BlkPolcy[1].Event = FAIL_BY_REJECT;
	BlkPolcy[1].Times = 2;
	BlkPolcy[1].Status = ROW_STATUS_ACTIVE;

	return ;
}

void authLcbap(void)
{
	Dot1xTem[1].AuthStyle = DOT1X_AUTH_PROTOCOL_LCBAP;
}

void noReauth(void)
{
	Dot1xTem[1].ReAuthEn = FALSE;
}

void fullReauth(void)
{
	Dot1xTem[1].ReAuthStyle = FULL_RE_AUTH;
}

void testMib(void)
{
	u_short vlan, port;
	u_long index[8];	
	u_long idxCnt = 0;
	u_long valueLen;

	idbGetNext("authConfigureMib:dot1xUserVlan", index, &idxCnt, (void *)&vlan, &valueLen);
	idbGet("authConfigureMib:dot1xUserPort", index, idxCnt, (void *)&port, &valueLen);

	printf("vlan : %d, port : %d", vlan, port);
}

 void checkFactory(void)
{
	UsrManTem[1].CheckFactroy = TRUE;
}

⌨️ 快捷键说明

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