You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.1 KiB
124 lines
3.1 KiB
4 months ago
|
/*
|
||
|
* magic.c - PPP Magic Number routines.
|
||
|
*
|
||
|
* Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions
|
||
|
* are met:
|
||
|
*
|
||
|
* 1. Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
*
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer in
|
||
|
* the documentation and/or other materials provided with the
|
||
|
* distribution.
|
||
|
*
|
||
|
* 3. The name "Carnegie Mellon University" must not be used to
|
||
|
* endorse or promote products derived from this software without
|
||
|
* prior written permission. For permission or any legal
|
||
|
* details, please contact
|
||
|
* Office of Technology Transfer
|
||
|
* Carnegie Mellon University
|
||
|
* 5000 Forbes Avenue
|
||
|
* Pittsburgh, PA 15213-3890
|
||
|
* (412) 268-4387, fax: (412) 268-7395
|
||
|
* tech-transfer@andrew.cmu.edu
|
||
|
*
|
||
|
* 4. Redistributions of any form whatsoever must retain the following
|
||
|
* acknowledgment:
|
||
|
* "This product includes software developed by Computing Services
|
||
|
* at Carnegie Mellon University (http://www.cmu.edu/computing/)."
|
||
|
*
|
||
|
* CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||
|
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||
|
* AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
|
||
|
* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||
|
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||
|
*/
|
||
|
|
||
|
#define RCSID "$Id: magic.c,v 1.11 2003/06/11 23:56:26 paulus Exp $"
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/time.h>
|
||
|
|
||
|
#include "pppd.h"
|
||
|
#include "magic.h"
|
||
|
|
||
|
static const char rcsid[] = RCSID;
|
||
|
|
||
|
extern long mrand48 __P((void));
|
||
|
extern void srand48 __P((long));
|
||
|
|
||
|
/*
|
||
|
* magic_init - Initialize the magic number generator.
|
||
|
*
|
||
|
* Attempts to compute a random number seed which will not repeat.
|
||
|
* The current method uses the current hostid, current process ID
|
||
|
* and current time, currently.
|
||
|
*/
|
||
|
void
|
||
|
magic_init()
|
||
|
{
|
||
|
long seed;
|
||
|
struct timeval t;
|
||
|
|
||
|
gettimeofday(&t, NULL);
|
||
|
seed = get_host_seed() ^ t.tv_sec ^ t.tv_usec ^ getpid();
|
||
|
srand48(seed);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* magic - Returns the next magic number.
|
||
|
*/
|
||
|
u_int32_t
|
||
|
magic()
|
||
|
{
|
||
|
return (u_int32_t) mrand48();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* random_bytes - Fill a buffer with random bytes.
|
||
|
*/
|
||
|
void
|
||
|
random_bytes(unsigned char *buf, int len)
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for (i = 0; i < len; ++i)
|
||
|
buf[i] = mrand48() >> 24;
|
||
|
}
|
||
|
|
||
|
#ifdef NO_DRAND48
|
||
|
/*
|
||
|
* Substitute procedures for those systems which don't have
|
||
|
* drand48 et al.
|
||
|
*/
|
||
|
|
||
|
double
|
||
|
drand48()
|
||
|
{
|
||
|
return (double)random() / (double)0x7fffffffL; /* 2**31-1 */
|
||
|
}
|
||
|
|
||
|
long
|
||
|
mrand48()
|
||
|
{
|
||
|
return random();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
srand48(seedval)
|
||
|
long seedval;
|
||
|
{
|
||
|
srandom((int)seedval);
|
||
|
}
|
||
|
|
||
|
#endif
|