--- openntpd-3.9p1.orig/server.c 2006-05-14 07:29:21.000000000 +0200 +++ openntpd-3.9p1/server.c 2010-07-02 15:33:05.061342638 +0200 @@ -150,21 +150,33 @@ server_dispatch(int fd, struct ntpd_conf version = (query.status & VERSIONMASK) >> 3; bzero(&reply, sizeof(reply)); - if (conf->status.synced) + if (conf->status.synced || conf->ignore) reply.status = conf->status.leap; else reply.status = LI_ALARM; + reply.status |= (query.status & VERSIONMASK); if ((query.status & MODEMASK) == MODE_CLIENT) reply.status |= MODE_SERVER; else reply.status |= MODE_SYM_PAS; - reply.stratum = conf->status.stratum; + if (conf->ignore) { + reply.stratum = 1; + reply.precision = -20; + } else { + reply.stratum = conf->status.stratum; + reply.precision = conf->status.precision; + } + reply.ppoll = query.ppoll; - reply.precision = conf->status.precision; reply.rectime = d_to_lfp(rectime); - reply.reftime = d_to_lfp(conf->status.reftime); + + if (conf->ignore) + reply.reftime = d_to_lfp(gettime()); + else + reply.reftime = d_to_lfp(conf->status.reftime); + reply.xmttime = d_to_lfp(gettime()); reply.orgtime = query.xmttime; reply.rootdelay = d_to_sfp(conf->status.rootdelay);