Try to create the directory where will be the Unix domain command socket bound to allow starting with empty /var/run. Check the permissions and owner/group in case the directory already existed. It MUST NOT be accessible by others as permissions on Unix domain sockets are ignored on some systems (e.g. Solaris).
146 lines
5.9 KiB
C
146 lines
5.9 KiB
C
/*
|
|
chronyd/chronyc - Programs for keeping computer clocks accurate.
|
|
|
|
**********************************************************************
|
|
* Copyright (C) Richard P. Curnow 1997-2003
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* 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.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
**********************************************************************
|
|
|
|
=======================================================================
|
|
|
|
Various utility functions
|
|
*/
|
|
|
|
#ifndef GOT_UTIL_H
|
|
#define GOT_UTIL_H
|
|
|
|
#include "sysincl.h"
|
|
|
|
#include "addressing.h"
|
|
#include "ntp.h"
|
|
#include "candm.h"
|
|
#include "hash.h"
|
|
|
|
/* Convert a timeval into a floating point number of seconds */
|
|
extern void UTI_TimevalToDouble(struct timeval *a, double *b);
|
|
|
|
/* Convert a number of seconds expressed in floating point into a
|
|
timeval */
|
|
extern void UTI_DoubleToTimeval(double a, struct timeval *b);
|
|
|
|
/* Returns -1 if a comes earlier than b, 0 if a is the same time as b,
|
|
and +1 if a comes after b */
|
|
extern int UTI_CompareTimevals(struct timeval *a, struct timeval *b);
|
|
|
|
/* Normalise a struct timeval, by adding or subtracting seconds to bring
|
|
its microseconds field into range */
|
|
extern void UTI_NormaliseTimeval(struct timeval *x);
|
|
|
|
/* Calculate result = a - b */
|
|
extern void UTI_DiffTimevals(struct timeval *result, struct timeval *a, struct timeval *b);
|
|
|
|
/* Calculate result = a - b and return as a double */
|
|
extern void UTI_DiffTimevalsToDouble(double *result, struct timeval *a, struct timeval *b);
|
|
|
|
/* Add a double increment to a timeval to get a new one. 'start' is
|
|
the starting time, 'end' is the result that we return. This is
|
|
safe to use if start and end are the same */
|
|
extern void UTI_AddDoubleToTimeval(struct timeval *start, double increment, struct timeval *end);
|
|
|
|
/* Calculate the average and difference (as a double) of two timevals */
|
|
extern void UTI_AverageDiffTimevals(struct timeval *earlier, struct timeval *later, struct timeval *average, double *diff);
|
|
|
|
/* Calculate result = a - b + c */
|
|
extern void UTI_AddDiffToTimeval(struct timeval *a, struct timeval *b, struct timeval *c, struct timeval *result);
|
|
|
|
/* Convert a timeval into a temporary string, largely for diagnostic
|
|
display */
|
|
extern char *UTI_TimevalToString(struct timeval *tv);
|
|
|
|
/* Convert an NTP timestamp into a temporary string, largely for
|
|
diagnostic display */
|
|
extern char *UTI_TimestampToString(NTP_int64 *ts);
|
|
|
|
/* Convert ref_id into a temporary string, for diagnostics */
|
|
extern char *UTI_RefidToString(uint32_t ref_id);
|
|
|
|
/* Convert an IP address to string, for diagnostics */
|
|
extern char *UTI_IPToString(IPAddr *ip);
|
|
|
|
extern int UTI_StringToIP(const char *addr, IPAddr *ip);
|
|
extern uint32_t UTI_IPToRefid(IPAddr *ip);
|
|
extern void UTI_IPHostToNetwork(IPAddr *src, IPAddr *dest);
|
|
extern void UTI_IPNetworkToHost(IPAddr *src, IPAddr *dest);
|
|
extern int UTI_CompareIPs(IPAddr *a, IPAddr *b, IPAddr *mask);
|
|
|
|
extern void UTI_SockaddrToIPAndPort(struct sockaddr *sa, IPAddr *ip, unsigned short *port);
|
|
extern int UTI_IPAndPortToSockaddr(IPAddr *ip, unsigned short port, struct sockaddr *sa);
|
|
extern const char *UTI_SockaddrFamilyToString(int family);
|
|
|
|
extern char *UTI_TimeToLogForm(time_t t);
|
|
|
|
/* Adjust time following a frequency/offset change */
|
|
extern void UTI_AdjustTimeval(struct timeval *old_tv, struct timeval *when, struct timeval *new_tv, double *delta, double dfreq, double doffset);
|
|
|
|
/* Get a random value to fuzz an NTP timestamp in the given precision */
|
|
extern uint32_t UTI_GetNTPTsFuzz(int precision);
|
|
|
|
extern double UTI_Int32ToDouble(NTP_int32 x);
|
|
extern NTP_int32 UTI_DoubleToInt32(double x);
|
|
|
|
extern void UTI_TimevalToInt64(struct timeval *src, NTP_int64 *dest, uint32_t fuzz);
|
|
|
|
extern void UTI_Int64ToTimeval(NTP_int64 *src, struct timeval *dest);
|
|
|
|
/* Check if time + offset is sane */
|
|
extern int UTI_IsTimeOffsetSane(struct timeval *tv, double offset);
|
|
|
|
/* Get 2 raised to power of a signed integer */
|
|
extern double UTI_Log2ToDouble(int l);
|
|
|
|
extern void UTI_TimevalNetworkToHost(Timeval *src, struct timeval *dest);
|
|
extern void UTI_TimevalHostToNetwork(struct timeval *src, Timeval *dest);
|
|
|
|
extern double UTI_FloatNetworkToHost(Float x);
|
|
extern Float UTI_FloatHostToNetwork(double x);
|
|
|
|
/* Set FD_CLOEXEC on descriptor */
|
|
extern int UTI_FdSetCloexec(int fd);
|
|
|
|
extern int UTI_GenerateNTPAuth(int hash_id, const unsigned char *key, int key_len,
|
|
const unsigned char *data, int data_len, unsigned char *auth, int auth_len);
|
|
extern int UTI_CheckNTPAuth(int hash_id, const unsigned char *key, int key_len,
|
|
const unsigned char *data, int data_len, const unsigned char *auth, int auth_len);
|
|
|
|
/* Decode password encoded in ASCII or HEX */
|
|
extern int UTI_DecodePasswordFromText(char *key);
|
|
|
|
extern int UTI_SetQuitSignalsHandler(void (*handler)(int));
|
|
|
|
/* Get directory (as an allocated string) for a path */
|
|
extern char *UTI_PathToDir(const char *path);
|
|
|
|
/* Create a directory with a specified mode (umasked) and set its uid/gid
|
|
(if not 0). Create also any parent directories that don't exist with mode
|
|
755 and default uid/gid. Returns 1 if created or already exists (even with
|
|
different mode/uid/gid), 0 otherwise. */
|
|
extern int UTI_CreateDirAndParents(const char *path, mode_t mode, uid_t uid, gid_t gid);
|
|
|
|
/* Check if a directory is secure. It must not have other than the specified
|
|
permissions and its uid/gid must match the specified values. */
|
|
extern int UTI_CheckDirPermissions(const char *path, mode_t perm, uid_t uid, gid_t gid);
|
|
|
|
#endif /* GOT_UTIL_H */
|