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.
123 lines
3.1 KiB
123 lines
3.1 KiB
/* |
|
* 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
|
|
|