/* * time - obtain the time from the remote server * * Copyright (C) 1992/93/94 Stephen Hebditch . * All rights reserved. TQM Communications, BCM Box 225, London, WC1N 3XX. * * See README for more information and disclaimers * * Obtain the current time from the remote server in standard unix time * format for use with the next NEWNEWS. If the client is unable to * connect to the time server or the read fails then the error is * reported and the program is exited. * * $Id: time.c,v 1.9 1995/01/10 13:20:25 root Exp $ * * $Log: time.c,v $ * Revision 1.9 1995/01/10 13:20:25 root * Moved includes from slurp.h. * Return more meaningful time at server when in debug mode. * Largely pointless tidying-up. * * Revision 1.7 1993/06/07 11:20:27 root * Removed unistd.h inclusion. * Display time since epoch at server as unsigned. * * Revision 1.5 1993/03/01 18:09:12 root * Made the epoch constant an unsigned long. * * Revision 1.4 1993/02/14 15:10:01 root * No changes. * * Revision 1.0 1992/08/92 * Initial coding. * */ #include "conf.h" /* POSIX headers */ #undef _POSIX_SOURCE #include #include #include #include #include #include #include #ifndef NOUNISTD #include #endif /* IP headers */ #include /* Local headers */ #include "slurp.h" time_t server_time (const char *hostname) { int ret; int server; struct tm *timeptr; time_t unixtime; u_long inettime; /* Read in the time from the remote server */ if ((server = tcp_open (hostname, "time", 0)) < 0) return ((time_t) 0); ret = read (server, &inettime, 4); (void) close (server); /* Check we got 4 bytes */ if (ret != 4) { log_ret ("server_time: Read error on time server socket"); return ((time_t) 0); } /* Convert byte order if needed */ inettime = ntohl (inettime); /* Convert the time from seconds since 1900 to seconds since 1970 */ unixtime = (time_t) (inettime - 2208988800UL); if (debug_flag) { timeptr = gmtime (&unixtime); (void) fprintf (stderr, "time at server %s is currently %s", hostname, asctime (timeptr)); } return (unixtime); } /* END-OF-FILE */