1c0b746e5SOllivier Robert /* 2c0b746e5SOllivier Robert * ntp_stdlib.h - Prototypes for NTP lib. 3c0b746e5SOllivier Robert */ 4c0b746e5SOllivier Robert #include <sys/types.h> 5c0b746e5SOllivier Robert 6c0b746e5SOllivier Robert #include "ntp_types.h" 7c0b746e5SOllivier Robert #include "ntp_string.h" 8c0b746e5SOllivier Robert #include "l_stdlib.h" 9c0b746e5SOllivier Robert 10c0b746e5SOllivier Robert /* 11c0b746e5SOllivier Robert * Handle gcc __attribute__ if available. 12c0b746e5SOllivier Robert */ 13c0b746e5SOllivier Robert #ifndef __attribute__ 14c0b746e5SOllivier Robert /* This feature is available in gcc versions 2.5 and later. */ 15c0b746e5SOllivier Robert # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || (defined(__STRICT_ANSI__)) 16c0b746e5SOllivier Robert # define __attribute__(Spec) /* empty */ 17c0b746e5SOllivier Robert # endif 18c0b746e5SOllivier Robert /* The __-protected variants of `format' and `printf' attributes 19c0b746e5SOllivier Robert are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ 20c0b746e5SOllivier Robert # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) 21c0b746e5SOllivier Robert # define __format__ format 22c0b746e5SOllivier Robert # define __printf__ printf 23c0b746e5SOllivier Robert # endif 24c0b746e5SOllivier Robert #endif 25c0b746e5SOllivier Robert 26c0b746e5SOllivier Robert #if defined(__STDC__) || defined(HAVE_STDARG_H) 27c0b746e5SOllivier Robert # include <stdarg.h> 28c0b746e5SOllivier Robert extern void msyslog P((int, const char *, ...)) 29c0b746e5SOllivier Robert __attribute__((__format__(__printf__, 2, 3))); 30c0b746e5SOllivier Robert #else 31c0b746e5SOllivier Robert # include <varargs.h> 32c0b746e5SOllivier Robert extern void msyslog P(()); 33c0b746e5SOllivier Robert #endif 34c0b746e5SOllivier Robert 35c0b746e5SOllivier Robert extern void auth_delkeys P((void)); 36*224ba2bdSOllivier Robert extern int auth_havekey P((keyid_t)); 37*224ba2bdSOllivier Robert extern int authdecrypt P((keyid_t, u_int32 *, int, int)); 38*224ba2bdSOllivier Robert extern int authencrypt P((keyid_t, u_int32 *, int)); 39*224ba2bdSOllivier Robert extern int authhavekey P((keyid_t)); 40*224ba2bdSOllivier Robert extern int authistrusted P((keyid_t)); 41c0b746e5SOllivier Robert extern int authreadkeys P((const char *)); 42*224ba2bdSOllivier Robert extern void authtrust P((keyid_t, u_long)); 43*224ba2bdSOllivier Robert extern int authusekey P((keyid_t, int, const u_char *)); 44c0b746e5SOllivier Robert 45c0b746e5SOllivier Robert extern u_long calleapwhen P((u_long)); 46c0b746e5SOllivier Robert extern u_long calyearstart P((u_long)); 47c0b746e5SOllivier Robert extern const char *clockname P((int)); 48c0b746e5SOllivier Robert extern int clocktime P((int, int, int, int, int, u_long, u_long *, u_int32 *)); 49c0b746e5SOllivier Robert #if defined SYS_WINNT && defined DEBUG 50c0b746e5SOllivier Robert # define emalloc(_c) debug_emalloc(_c, __FILE__, __LINE__) 51c0b746e5SOllivier Robert extern void * debug_emalloc P((u_int, char *, int)); 52c0b746e5SOllivier Robert #else 53c0b746e5SOllivier Robert extern void * emalloc P((u_int)); 54c0b746e5SOllivier Robert #endif 55c0b746e5SOllivier Robert extern int ntp_getopt P((int, char **, const char *)); 56c0b746e5SOllivier Robert extern void init_auth P((void)); 57c0b746e5SOllivier Robert extern void init_lib P((void)); 58c0b746e5SOllivier Robert extern void init_random P((void)); 59*224ba2bdSOllivier Robert extern struct savekey *auth_findkey P((keyid_t)); 60c0b746e5SOllivier Robert extern int auth_moremem P((void)); 61c0b746e5SOllivier Robert extern int ymd2yd P((int, int, int)); 62c0b746e5SOllivier Robert 63c0b746e5SOllivier Robert #ifdef DES 64c0b746e5SOllivier Robert extern int DESauthdecrypt P((u_char *, u_int32 *, int, int)); 65c0b746e5SOllivier Robert extern int DESauthencrypt P((u_char *, u_int32 *, int)); 66*224ba2bdSOllivier Robert extern void DESauth_setkey P((keyid_t, const u_int32 *)); 67c0b746e5SOllivier Robert extern void DESauth_subkeys P((const u_int32 *, u_char *, u_char *)); 68c0b746e5SOllivier Robert extern void DESauth_des P((u_int32 *, u_char *)); 69c0b746e5SOllivier Robert extern int DESauth_parity P((u_int32 *)); 70c0b746e5SOllivier Robert #endif /* DES */ 71c0b746e5SOllivier Robert 72c0b746e5SOllivier Robert extern int MD5authdecrypt P((u_char *, u_int32 *, int, int)); 73c0b746e5SOllivier Robert extern int MD5authencrypt P((u_char *, u_int32 *, int)); 74*224ba2bdSOllivier Robert extern void MD5auth_setkey P((keyid_t, const u_char *, const int)); 75c0b746e5SOllivier Robert 76c0b746e5SOllivier Robert extern int atoint P((const char *, long *)); 77c0b746e5SOllivier Robert extern int atouint P((const char *, u_long *)); 78c0b746e5SOllivier Robert extern int hextoint P((const char *, u_long *)); 79c0b746e5SOllivier Robert extern char * humandate P((u_long)); 80c0b746e5SOllivier Robert extern char * humanlogtime P((void)); 81c0b746e5SOllivier Robert extern char * inttoa P((long)); 82c0b746e5SOllivier Robert extern char * mfptoa P((u_long, u_long, int)); 83c0b746e5SOllivier Robert extern char * mfptoms P((u_long, u_long, int)); 84c0b746e5SOllivier Robert extern const char * modetoa P((int)); 85c0b746e5SOllivier Robert extern const char * eventstr P((int)); 86c0b746e5SOllivier Robert extern const char * ceventstr P((int)); 87c0b746e5SOllivier Robert extern char * statustoa P((int, int)); 88c0b746e5SOllivier Robert extern const char * sysstatstr P((int)); 89c0b746e5SOllivier Robert extern const char * peerstatstr P((int)); 90c0b746e5SOllivier Robert extern const char * clockstatstr P((int)); 91c0b746e5SOllivier Robert extern u_int32 netof P((u_int32)); 92c0b746e5SOllivier Robert extern char * numtoa P((u_int32)); 93c0b746e5SOllivier Robert extern char * numtohost P((u_int32)); 94c0b746e5SOllivier Robert extern int octtoint P((const char *, u_long *)); 95c0b746e5SOllivier Robert extern u_long ranp2 P((int)); 96c0b746e5SOllivier Robert extern char * refnumtoa P((u_int32)); 97c0b746e5SOllivier Robert extern int tsftomsu P((u_long, int)); 98c0b746e5SOllivier Robert extern char * uinttoa P((u_long)); 99c0b746e5SOllivier Robert 100c0b746e5SOllivier Robert extern int decodenetnum P((const char *, u_int32 *)); 101c0b746e5SOllivier Robert 102c0b746e5SOllivier Robert extern const char * FindConfig P((const char *)); 103c0b746e5SOllivier Robert 104c0b746e5SOllivier Robert extern void signal_no_reset P((int, RETSIGTYPE (*func)(int))); 105c0b746e5SOllivier Robert 106c0b746e5SOllivier Robert extern void getauthkeys P((char *)); 107c0b746e5SOllivier Robert extern void auth_agekeys P((void)); 108c0b746e5SOllivier Robert extern void rereadkeys P((void)); 109c0b746e5SOllivier Robert 110c0b746e5SOllivier Robert /* 111c0b746e5SOllivier Robert * Variable declarations for libntp. 112c0b746e5SOllivier Robert */ 113c0b746e5SOllivier Robert 114c0b746e5SOllivier Robert /* 115c0b746e5SOllivier Robert * Defined by any program. 116c0b746e5SOllivier Robert */ 117c0b746e5SOllivier Robert extern volatile int debug; /* debugging flag */ 118c0b746e5SOllivier Robert 119c0b746e5SOllivier Robert /* authkeys.c */ 120c0b746e5SOllivier Robert extern u_long authkeynotfound; /* keys not found */ 121c0b746e5SOllivier Robert extern u_long authkeylookups; /* calls to lookup keys */ 122c0b746e5SOllivier Robert extern u_long authnumkeys; /* number of active keys */ 123c0b746e5SOllivier Robert extern u_long authkeyexpired; /* key lifetime expirations */ 124c0b746e5SOllivier Robert extern u_long authkeyuncached; /* cache misses */ 125c0b746e5SOllivier Robert extern u_long authencryptions; /* calls to encrypt */ 126c0b746e5SOllivier Robert extern u_long authdecryptions; /* calls to decrypt */ 127c0b746e5SOllivier Robert 128c0b746e5SOllivier Robert extern int authnumfreekeys; 129c0b746e5SOllivier Robert 130c0b746e5SOllivier Robert /* 131c0b746e5SOllivier Robert * The key cache. We cache the last key we looked at here. 132c0b746e5SOllivier Robert */ 133*224ba2bdSOllivier Robert extern keyid_t cache_keyid; /* key identifier */ 134c0b746e5SOllivier Robert extern u_char * cache_key; /* key pointer */ 135c0b746e5SOllivier Robert extern u_int cache_keylen; /* key length */ 136c0b746e5SOllivier Robert 137c0b746e5SOllivier Robert /* clocktypes.c */ 138c0b746e5SOllivier Robert struct clktype; 139c0b746e5SOllivier Robert extern struct clktype clktypes[]; 140c0b746e5SOllivier Robert 141c0b746e5SOllivier Robert /* getopt.c */ 142c0b746e5SOllivier Robert extern char * ntp_optarg; /* global argument pointer */ 143c0b746e5SOllivier Robert extern int ntp_optind; /* global argv index */ 144c0b746e5SOllivier Robert 145c0b746e5SOllivier Robert /* machines.c */ 146c0b746e5SOllivier Robert extern const char *set_tod_using; 147c0b746e5SOllivier Robert 148c0b746e5SOllivier Robert /* mexit.c */ 149c0b746e5SOllivier Robert #if defined SYS_WINNT || defined SYS_CYGWIN32 150c0b746e5SOllivier Robert extern HANDLE hServDoneEvent; 151c0b746e5SOllivier Robert #endif 152c0b746e5SOllivier Robert 153c0b746e5SOllivier Robert /* systime.c */ 154c0b746e5SOllivier Robert extern int systime_10ms_ticks; /* adj sysclock in 10ms increments */ 155c0b746e5SOllivier Robert 156c0b746e5SOllivier Robert /* version.c */ 157c0b746e5SOllivier Robert extern const char *Version; /* version declaration */ 158