util.c

来自「功能强大的代理服务器」· C语言 代码 · 共 178 行

C
178
字号
/* * *	RADIUS *	Remote Authentication Dial In User Service * * *	Livingston Enterprises, Inc. *	6920 Koll Center Parkway *	Pleasanton, CA   94566 * *	Copyright 1992 Livingston Enterprises, Inc. *	Copyright 1997 Cistron Internet Services B.V. * *	Permission to use, copy, modify, and distribute this software for any *	purpose and without fee is hereby granted, provided that this *	copyright and permission notice appear on all copies and supporting *	documentation, the name of Livingston Enterprises, Inc. not be used *	in advertising or publicity pertaining to distribution of the *	program without specific prior permission, and notice be given *	in supporting documentation that copying and distribution is by *	permission of Livingston Enterprises, Inc.    * *	Livingston Enterprises, Inc. makes no representations about *	the suitability of this software for any purpose.  It is *	provided "as is" without express or implied warranty. * *//* * util.c	Miscellanous generic functions. * */char util_sccsid[] ="@(#)util.c	1.5 Copyright 1992 Livingston Enterprises Inc\n""		2.1 Copyright 1997 Cistron Internet Services B.V.";#include	"config.h"#if HAVE_SYS_TYES_H#include	<sys/types.h>#endif#if HAVE_SYS_SOCKET_H#include	<sys/socket.h>#endif#if HAVE_SYS_TIME_H#include	<sys/time.h>#endif#if HAVE_NETINET_IN_H#include	<netinet/in.h>#endif#if HAVE_STDIO_H#include	<stdio.h>#endif#if HAVE_STDLIB_H#include	<stdlib.h>#endif#if HAVE_NETDB_H#include	<netdb.h>#endif#if HAVE_PWD_H#include	<pwd.h>#endif#if HAVE_TIME_H#include	<time.h>#endif#if HAVE_CTYPE_H#include	<ctype.h>#endif#if HAVE_SIGNAL_H#include	<signal.h>#endif#include	"md5.h"#include	"util.h"/* *	Check for valid IP address in standard dot notation. */static int good_ipaddr(char *addr){	int	dot_count;	int	digit_count;	dot_count = 0;	digit_count = 0;	while(*addr != '\0' && *addr != ' ') {		if(*addr == '.') {			dot_count++;			digit_count = 0;		}		else if(!isdigit(*addr)) {			dot_count = 5;		}		else {			digit_count++;			if(digit_count > 3) {				dot_count = 5;			}		}		addr++;	}	if(dot_count != 3) {		return(-1);	}	else {		return(0);	}}/* *	Return an IP address in host long notation from *	one supplied in standard dot notation. */static u_int32_t ipstr2long(char *ip_str){	char	buf[6];	char	*ptr;	int	i;	int	count;	u_int32_t	ipaddr;	int	cur_byte;	ipaddr = (u_int32_t)0;	for(i = 0;i < 4;i++) {		ptr = buf;		count = 0;		*ptr = '\0';		while(*ip_str != '.' && *ip_str != '\0' && count < 4) {			if(!isdigit(*ip_str)) {				return((u_int32_t)0);			}			*ptr++ = *ip_str++;			count++;		}		if(count >= 4 || count == 0) {			return((u_int32_t)0);		}		*ptr = '\0';		cur_byte = atoi(buf);		if(cur_byte < 0 || cur_byte > 255) {			return((u_int32_t)0);		}		ip_str++;		ipaddr = ipaddr << 8 | (u_int32_t)cur_byte;	}	return(ipaddr);}/* *	Return an IP address in host long notation from a host *	name or address in dot notation. */u_int32_t get_ipaddr(char *host){	struct hostent	*hp;	if(good_ipaddr(host) == 0) {		return(ipstr2long(host));	}	else if((hp = gethostbyname(host)) == (struct hostent *)NULL) {		return((u_int32_t)0);	}	return(ntohl(*(u_int32_t *)hp->h_addr));}void md5_calc(unsigned char *output, unsigned char *input, unsigned int inlen){	MD5_CTX	context;	MD5Init(&context);	MD5Update(&context, input, inlen);	MD5Final(output, &context);}

⌨️ 快捷键说明

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