www.pudn.com > RadiusSrv.rar > util.cpp, change:2003-10-22,size:2916b


/*
 * util.c	Various utility functions.
 *
 * Version:     $Id: util.c,v 1.30 2002/06/03 16:29:04 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 2000  The FreeRADIUS server project
 */

static const char rcsid[] = "$Id: util.c,v 1.30 2002/06/03 16:29:04 aland Exp $";

//#include "autoconf.h"
#include "libradius.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <signal.h>

#include <sys/stat.h>
#include <fcntl.h>

#if HAVE_UNISTD_H
#	include <unistd.h>
#endif

#include "radiusd.h"
//#include "rad_assert.h"

/*
 *	Free a REQUEST struct.
 */
void request_free(REQUEST **request_ptr)
{
	REQUEST *request;

	if (request_ptr == NULL)
		return;

	request = *request_ptr;

	/*
	 *	If there's a thread currently active on this request,
	 *	blow up!
	 */
//	rad_assert(request->child_pid == NO_SUCH_CHILD_PID);
	
	if (request->packet) 
		rad_free(&request->packet);

	if (request->proxy) 
		rad_free(&request->proxy);

	if (request->reply) 
		rad_free(&request->reply);

	if (request->proxy_reply) 
		rad_free(&request->proxy_reply);

	if (request->config_items) 
		pairfree(&request->config_items);

	request->username = NULL;
	request->password = NULL;

#ifndef NDEBUG
	request->magic = 0x01020304;	/* set the request to be nonsense */
	strcpy(request->secret, "REQUEST-DELETED");
	strcpy(request->proxysecret, "REQUEST-DELETED");
#endif
	free(request);

	*request_ptr = NULL;
}

/*
 *	Check a filename for sanity.
 *
 *	Allow only uppercase/lowercase letters, numbers, and '-_/.'
 */
int rad_checkfilename(const char *filename)
{
	if (strspn(filename, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_/.") == strlen(filename)) {
		return 0;
	}

	return -1;
}

/*
 *	Module malloc() call, which does stuff if the malloc fails.
 *
 *	This call ALWAYS succeeds!
 */
void *rad_malloc(size_t size)
{
	void *ptr = malloc(size);
	
	if (ptr == NULL) {
		printf( "no memory");
		exit(1);
	}

	return ptr;
}

void xfree(const char *ptr)
{
	free((char *)ptr);
}

/*
 *	Logs an error message and aborts the program
 *
 */

void rad_assert_fail (const char *file, unsigned int line)
{
	printf( "Assertion failed in %s, line %u", file, line);
	abort();
}