trost@reed.bitnet (Bill Trost) (11/28/89)
We have rdate on some of our machines but not others; anyone know of a free rdate and where I could get it? -- --
wnp@iiasa.ac.at (Wolf PAUL ) (12/01/90)
Is the source code for timed available, or is it proprietary? If Sun's timed is proprietary, has anyone written a PD or distributable program offering the same functionality? Thanks for any and all info! Wolf -- W.N.Paul, Int. Institute f. Applied Systems Analysis, A-2361 Laxenburg--Austria PHONE: +43-2236-71521-465 INTERNET: wnp%iiasa@relay.eu.net FAX: +43-2236-71313 UUCP: uunet!iiasa!wnp HOME: +43-2236-618514 BITNET: tuvie!iiasa!wnp@awiuni01.BITNET
geoff@hinode.East.Sun.COM (Geoff Arnold @ Sun BOS - R.H. coast near the top) (12/01/90)
Quoth wnp%iiasa@relay.eu.net (Wolf PAUL ) (in <978@iiasa.UUCP>): # #Is the source code for timed available, or is it proprietary? It's available - here's the source corresponding to the recently-posted binary. Note that this needs "unix2dos"ing... #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh to create the files: # rdate.c # This archive created: Fri Nov 30 14:10:44 1990 by geoff, Sun Microsystems PC-NFS Engineering # # export PATH; PATH=/bin:$PATH if test -f rdate.c ; then echo shar: will not over-write existing file rdate.c else echo shar: extracting rdate.c, 3812 characters sed 's/^X//' > rdate.c <<'SHAR_EOF' X/* X * rdate - get date from remote machine X * X * X * "rdate" sets the date and time, obtaining a timestamp froma X * network host via the tcp/time socket. Since this returns X * a value in seconds since Jan 1, 1900, we must X * subtract 86400(365*70 + 17) to convert this to the time X * since Jan 1, 1970. (Note that to avoid Microsoft C 4.0 X * compiler glitches we must compute this at run time.) X * X * This program is supplied as an example of how to use the PC-NFS X * Programmer's Toolkit to port typical socket-based network applications X * from Unix systems to PCs running PC-NFS and DOS. It is supplied X * "as is" with no warranty or support. X * X * The binary (rdate.exe) was built using Microsoft C 4.0 and the X * "medium model" Toolkit libraries using the following batch file: X * X * msc /AM /Ox /Ze rdate.c ; X * echo rdate + > lf X * echo ..\toolkit\tcpypobj\myp_rtns.obj ..\toolkit\tcpypobj\mprotrtn.obj >> lf X * echo rdate.exe >> lf X * echo rdate /m >> lf X * echo ..\toolkit\mlibtk.lib >> lf X * link /ST:16384 @lf X * X */ X X X#include <stdio.h> X#include <stdlib.h> X#include <dos.h> X#include <io.h> X#include <string.h> X#include <sys\nfs_time.h> X#include <sys\types.h> X#include <sys\socket.h> X#include <netinet\in.h> X#include <netdb.h> X#include <tklib.h> X X X X/* Local Function Prototypes */ X Xvoid main(int argc,char * *argv); Xint setdostime(unsigned long t); X Xextern int errno; X Xvoid main(argc, argv) X int argc; X char **argv; X{ X struct sockaddr_in server; X int s, i, p, q; X u_long t; X u_long toff; X struct servent *sp; X struct protoent *pp; X struct hostent *hp; X X if (argc != 2) { X fprintf(stderr, "usage: rdate host\n"); X exit(1); X } X if ((hp = gethostbyname(argv[1])) == NULL) { X fprintf(stderr, "rdate: unknown host %s\n", X argv[1]); X exit(1); X } X if ((sp = getservbyname("time", "tcp")) != NULL) X p = sp->s_port; X else X p = htons(37); /* default from Assigned Numbers RFC */ X X if ((pp = getprotobyname("tcp")) != NULL) X q = pp->p_proto; X else X q = 6; /* default from Assigned Numbers */ X X if ((s = socket(AF_INET, SOCK_STREAM, q)) == 0) { X perror("rdate: socket"); X exit(1); X } X X bzero((char *)&server, sizeof (server)); X bcopy(hp->h_addr, (char *)&server.sin_addr, hp->h_length); X server.sin_family = hp->h_addrtype; X server.sin_port = p; X X if (connect(s, (struct sockaddr *)&server, sizeof (server)) < 0) { X perror("rdate: connect"); X exit(1); X } X if (read(s, (char *)&t, sizeof (long)) != sizeof (long)) { X perror("rdate: read"); X exit(1); X } X t = (u_long)ntohl(t); X X/* begin hack to avoid MSC problem */ X X toff = 86400L; X toff = toff * 25567L; X/* end hack */ X X if (t < toff) { X fprintf(stderr, "rdate: %s returned an unreasonable time\n", X argv[1]); X exit(1); X } X X t -= toff; X X i = setdostime(t); X X if (i == -1) X perror("rdate: unable to set time of day"); X else X printf("%s", ctime(&t)); X exit(0); X} X X X/* X * setdostime (t) sets the PC DOS date and time values according to X * the timestamp in t. We first call "localtime" to obtain the X * individual year, month, day, hour, minute and second values and X * then use the DOS "set time" and "set date" functions. Note that X * for "localtime" to operate properly, the "TZ" environment variable X * must be correct. X */ X Xsetdostime(t) Xu_long t; X{ Xstruct tm *tp; Xunion REGS inregs; Xunion REGS outregs; X X tp = localtime(&t); X inregs.h.ah = 0x2d; /* set time */ X inregs.h.ch = (unsigned char)tp->tm_hour; X inregs.h.dh = (unsigned char)tp->tm_sec; X inregs.h.cl = (unsigned char)tp->tm_min; X inregs.h.dl = (unsigned char)0; X intdos(&inregs, &outregs); X if (outregs.h.al) X return(-1); X X inregs.h.ah = 0x2b; /*set date */ X inregs.x.cx = tp->tm_year + 1900; X inregs.h.dh = (unsigned char)tp->tm_mon + 1; X inregs.h.dl = (unsigned char)tp->tm_mday; X intdos(&inregs, &outregs); X if ((int)outregs.h.al) X return(-1); X X return(0); X} SHAR_EOF len=`wc -c < rdate.c` if test $len != 3812 ; then echo shar: rdate.c was $len bytes long, should have been 3812 fi fi # end of overwriting check exit 0 # End of shell archive -- Geoff Arnold, PC-NFS architect, Sun Microsystems. (geoff@East.Sun.COM) -- *** "Now is no time to speculate or hypothecate, but rather a time *** *** for action, or at least not a time to rule it out, though not *** *** necessarily a time to rule it in, either." - George Bush ***