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

📄 authen_r.c

📁 uClinux上的ppp拨号驱动及测试程序
💻 C
字号:
/* * Copyright 1997-2000 by Pawel Krawczyk <kravietz@ceti.pl> * * See http://www.ceti.com.pl/~kravietz/progs/tacacs.html * for details. * * authen_r.c  Read PAP authentication reply from server. */#include <unistd.h>#include <stdlib.h>#include <syslog.h>#include <string.h>#include <netinet/in.h>#include "tacplus.h"#include "libtac.h"#include "messages.h"/* reads packet from TACACS+ server; returns: *            NULL    if the authentication succeded *  string pointer    if it failed */char *tac_authen_pap_read(int fd) { 	HDR th; 	struct authen_reply *tb; 	int len_from_header, r, len_from_body;	char *msg = NULL; 	/* read the reply header */ 	r=read(fd, &th, TAC_PLUS_HDR_SIZE); 	if(r < TAC_PLUS_HDR_SIZE) {  		syslog(LOG_ERR, 			"%s: error reading PAP authen header, read %d of %d: %m",			__FUNCTION__,		 	r, TAC_PLUS_HDR_SIZE);  		return(system_err_msg); 	} 	/* check the reply fields in header */	msg = _tac_check_header(&th, TAC_PLUS_AUTHEN);	if(msg != NULL)			return(msg);  	len_from_header=ntohl(th.datalength); 	tb=(struct authen_reply *) xcalloc(1, len_from_header); 	/* read reply packet body */ 	r=read(fd, tb, len_from_header); 	if(r < len_from_header) {  		syslog(LOG_ERR,			 "%s: incomplete message body, %d bytes, expected %d: %m",			 __FUNCTION__,			 r, len_from_header);  		return(system_err_msg); 	} 	/* decrypt the body */ 	_tac_crypt((u_char *) tb, &th, len_from_header); 	/* check the length fields */ 	len_from_body=sizeof(tb->status) + sizeof(tb->flags) +            sizeof(tb->msg_len) + sizeof(tb->data_len) +            tb->msg_len + tb->data_len; 	if(len_from_header != len_from_body) {  		syslog(LOG_ERR,			"%s: invalid reply content, incorrect key?",			__FUNCTION__);  		return(system_err_msg); 	} 	/* save status and clean up */ 	r=tb->status;	if(tb->msg_len) {		msg=(char *) xcalloc(1, tb->msg_len);		bcopy(tb+TAC_AUTHEN_REPLY_FIXED_FIELDS_SIZE, msg, tb->msg_len); 	} else		msg="Login incorrect"; 	free(tb); 	/* server authenticated username and password successfully */ 	if(r == TAC_PLUS_AUTHEN_STATUS_PASS) {		TACDEBUG((LOG_DEBUG, "%s: authentication ok", __FUNCTION__))		return(NULL);	}			/* return pointer to server message */	syslog(LOG_DEBUG, "%s: authentication failed, server reply was %d (%s)", 					__FUNCTION__, r, msg); 	return(msg);} /* tac_authen_pap_read */

⌨️ 快捷键说明

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