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

📄 tls.c

📁 RADIUS 服务器介绍 RADIUS服务器支持标准的RADIUS协议
💻 C
📖 第 1 页 / 共 2 页
字号:
		printf("In SSL Connect mode \n");	}	*/	if (ssn->info.content_type != application_data) {		err = BIO_read(ssn->from_ssl, ssn->dirty_out.data, MAX_RECORD_SIZE);		if (err > 0) {			ssn->dirty_out.used = err;		} else {			radlog(L_ERR, "rlm_eap_tls: BIO_read Error");			int_ssl_check(ssn->ssl, err);			record_init(&ssn->dirty_in);			return 0;		}	} else {		radlog(L_INFO, "rlm_eap_tls: Application Data");		/* Its clean application data, do whatever we want */		record_init(&ssn->clean_out);	}	/* We are done with dirty_in, reinitialize it */	record_init(&ssn->dirty_in);	return 1;}/* We have clean data to send. so dirty it before sending. */int tls_handshake_send(tls_session_t *ssn){	int err;	/*	 * Fill the SSL with the clean data to dirt it	 * Based on Server's logic this clean_in is expected to	 * contain/filled with the data.	 */	if (ssn->clean_in.used > 0) {		SSL_write(ssn->ssl, ssn->clean_in.data, ssn->clean_in.used);		/* Get the dirty data from Bio to send it */		err = BIO_read(ssn->from_ssl, ssn->dirty_out.data, MAX_RECORD_SIZE);		if (err > 0) {			ssn->dirty_out.used = err;		} else {			int_ssl_check(ssn->ssl, err);		}	}	if (ssn->dirty_out.used > 0) {		record_init(&ssn->dirty_out);	}	return 1;}void session_init(tls_session_t *ssn){	ssn->ssl = NULL;	ssn->into_ssl = ssn->from_ssl = NULL;	record_init(&ssn->clean_in);	record_init(&ssn->clean_out);	record_init(&ssn->dirty_in);	record_init(&ssn->dirty_out);	memset(&ssn->info, 0, sizeof(ssn->info));	ssn->offset = 0;	ssn->fragment = 0;	ssn->tls_msg_len = 0;	ssn->length_flag = 0;}void session_close(tls_session_t *ssn){	if(ssn->ssl)		SSL_free(ssn->ssl);#if 0/*  * WARNING: SSL_free seems to decrement the reference counts already, * 	so doing this might crash the application. */	if(ssn->into_ssl)		BIO_free(ssn->into_ssl);	if(ssn->from_ssl)		BIO_free(ssn->from_ssl);#endif	record_close(&ssn->clean_in);	record_close(&ssn->clean_out);	record_close(&ssn->dirty_in);	record_close(&ssn->dirty_out);	session_init(ssn);}void session_free(void **ssn){	tls_session_t **sess = (tls_session_t **)ssn;	if ((sess == NULL) || (*sess == NULL))		return;	session_close(*sess);	free(*sess);	*sess = NULL;}void record_init(record_t *rec){	rec->used = 0;}void record_close(record_t *rec){	rec->used = 0;}unsigned int record_plus(record_t *rec, const unsigned char *ptr,			 unsigned int size){	unsigned int added = MAX_RECORD_SIZE - rec->used;	if(added > size)		added = size;	if(added == 0)		return 0;	memcpy(rec->data + rec->used, ptr, added);	rec->used += added;	return added;}unsigned int record_minus(record_t *rec, unsigned char *ptr,		unsigned int size){	unsigned int taken = rec->used;	if(taken > size)		taken = size;	if(taken == 0)		return 0;	if(ptr)		memcpy(ptr, rec->data, taken);	rec->used -= taken;	if(rec->used > 0)		memmove(rec->data, rec->data + taken, rec->used);	return taken;}void tls_session_information(tls_session_t *tls_session){	const char *str_write_p, *str_version, *str_content_type = "", *str_details1 = "", *str_details2= "";		str_write_p = tls_session->info.origin ? ">>>" : "<<<";	switch (tls_session->info.version)	{	case SSL2_VERSION:		str_version = "SSL 2.0";		break;	case SSL3_VERSION:		str_version = "SSL 3.0 ";		break;	case TLS1_VERSION:		str_version = "TLS 1.0 ";		break;	default:		str_version = "???";	}	if (tls_session->info.version == SSL3_VERSION ||	    tls_session->info.version == TLS1_VERSION) {		switch (tls_session->info.content_type) {		case 20:			str_content_type = "ChangeCipherSpec";			break;		case 21:			str_content_type = "Alert";			break;		case 22:			str_content_type = "Handshake";			break;		}		if (tls_session->info.content_type == 21) { /* Alert */			str_details1 = ", ???";						if (tls_session->info.record_len == 2) {				switch (tls_session->info.alert_level) {				case 1:					str_details1 = ", warning";					break;				case 2:					str_details1 = ", fatal";					break;				}				str_details2 = " ???";				switch (tls_session->info.alert_description) {				case 0:					str_details2 = " close_notify";					break;				case 10:					str_details2 = " unexpected_message";					break;				case 20:					str_details2 = " bad_record_mac";					break;				case 21:					str_details2 = " decryption_failed";					break;				case 22:					str_details2 = " record_overflow";					break;				case 30:					str_details2 = " decompression_failure";					break;				case 40:					str_details2 = " handshake_failure";					break;				case 42:					str_details2 = " bad_certificate";					break;				case 43:					str_details2 = " unsupported_certificate";					break;				case 44:					str_details2 = " certificate_revoked";					break;				case 45:					str_details2 = " certificate_expired";					break;				case 46:					str_details2 = " certificate_unknown";					break;				case 47:					str_details2 = " illegal_parameter";					break;				case 48:					str_details2 = " unknown_ca";					break;				case 49:					str_details2 = " access_denied";					break;				case 50:					str_details2 = " decode_error";					break;				case 51:					str_details2 = " decrypt_error";					break;				case 60:					str_details2 = " export_restriction";					break;				case 70:					str_details2 = " protocol_version";					break;				case 71:					str_details2 = " insufficient_security";					break;				case 80:					str_details2 = " internal_error";					break;				case 90:					str_details2 = " user_canceled";					break;				case 100:					str_details2 = " no_renegotiation";					break;				}			}		}				if (tls_session->info.content_type == 22) /* Handshake */		{			str_details1 = "???";			if (tls_session->info.record_len > 0)			switch (tls_session->info.handshake_type)			{			case 0:				str_details1 = ", HelloRequest";				break;			case 1:				str_details1 = ", ClientHello";				break;			case 2:				str_details1 = ", ServerHello";				break;			case 11:				str_details1 = ", Certificate";				break;			case 12:				str_details1 = ", ServerKeyExchange";				break;			case 13:				str_details1 = ", CertificateRequest";				break;			case 14:				str_details1 = ", ServerHelloDone";				break;			case 15:				str_details1 = ", CertificateVerify";				break;			case 16:				str_details1 = ", ClientKeyExchange";				break;			case 20:				str_details1 = ", Finished";				break;			}		}	}	sprintf(tls_session->info.info_description, "%s %s%s [length %04lx]%s%s\n", 		str_write_p, str_version, str_content_type, 		(unsigned long)tls_session->info.record_len, str_details1, str_details2);	DEBUG2("rlm_eap_tls: %s\n", tls_session->info.info_description);}

⌨️ 快捷键说明

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