Remove the driver functions based on adjtime() and switch to the new timex driver, which is based on ntp_adjtime(). This allows chronyd to control the kernel frequency, adjust the offset with sub-microsecond accuracy, and set the kernel leap and sync status. A drawback is that the maximum slew rate is now limited by the 500 ppm maximum frequency offset, while adjtime() on NetBSD slewed by up to 5000 ppm.
77 lines
2.1 KiB
C
77 lines
2.1 KiB
C
/*
|
|
chronyd/chronyc - Programs for keeping computer clocks accurate.
|
|
|
|
**********************************************************************
|
|
* Copyright (C) Richard P. Curnow 1997-2001
|
|
* Copyright (C) J. Hannken-Illjes 2001
|
|
*
|
|
* 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.
|
|
*
|
|
**********************************************************************
|
|
|
|
=======================================================================
|
|
|
|
Driver file for the NetBSD operating system.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include "sysincl.h"
|
|
|
|
#include "sys_netbsd.h"
|
|
#include "sys_timex.h"
|
|
#include "logging.h"
|
|
|
|
/* ================================================== */
|
|
|
|
void
|
|
SYS_NetBSD_Initialise(void)
|
|
{
|
|
SYS_Timex_Initialise();
|
|
}
|
|
|
|
/* ================================================== */
|
|
|
|
void
|
|
SYS_NetBSD_Finalise(void)
|
|
{
|
|
SYS_Timex_Finalise();
|
|
}
|
|
|
|
/* ================================================== */
|
|
|
|
#ifdef FEAT_PRIVDROP
|
|
void
|
|
SYS_NetBSD_DropRoot(uid_t uid, gid_t gid)
|
|
{
|
|
int fd;
|
|
|
|
if (setgroups(0, NULL))
|
|
LOG_FATAL(LOGF_SysNetBSD, "setgroups() failed : %s", strerror(errno));
|
|
|
|
if (setgid(gid))
|
|
LOG_FATAL(LOGF_SysNetBSD, "setgid(%d) failed : %s", gid, strerror(errno));
|
|
|
|
if (setuid(uid))
|
|
LOG_FATAL(LOGF_SysNetBSD, "setuid(%d) failed : %s", uid, strerror(errno));
|
|
|
|
DEBUG_LOG(LOGF_SysNetBSD, "Root dropped to uid %d gid %d", uid, gid);
|
|
|
|
/* Check if we have write access to /dev/clockctl */
|
|
fd = open("/dev/clockctl", O_WRONLY);
|
|
if (fd < 0)
|
|
LOG_FATAL(LOGF_SysNetBSD, "Can't write to /dev/clockctl");
|
|
close(fd);
|
|
}
|
|
#endif
|