#! /bin/lua
--[[
# This script based on:
#   http://www.damnsmalllinux.org/f/topic-3-23-17618-0.html
#
# Modified by Karl Mowatt-Wilson, 24 Apr 2007.
# Needed to change host (time.nist.gov no longer serves on port 13) 
#  See http://tf.nist.gov/service/its.htm
# Added receive of line before loop.
#----------------
# This lua script based in part of the idea expressed in
# the bash script from newOldUser of the damnsmall linux forums
# by Robert Shingledecker - 2007/02/17
# This script gets time information from time.nist.gov in
# universal time format. It then rearranges it into
# the format that the date command uses MMDDhhmmCCYY.ss
# and issues the date command as super user.
#
# An internet connection must be available
#
#  sample of returned information follows
#54144 07-02-13 16:14:43 00 0 0  95.3 UTC(NIST) *
#1---0----1----1----2----2----3----3----4----4----5
#1---5----0----5----0----5----0----5----0----5----0
--]]

host = "time-a.nist.gov"
port = 13
target = {10,13,16,19,7,22}
date = ""

timeserver,err = socket.connect(host,port)
if err then
  print("Could not connect "..err)
  os.exit(1)
end
_,err = timeserver:send("anything\n")
if err then
  print("Error in sending "..err)
  os.exit(1)
end

-- KMW: need to rx a line, otherwise error.
_,_ = timeserver:receive('*l')

timeserver:settimeout(0.10)
while 1 do
  line,err = timeserver:receive('*l')
  if err then
     print("Error in receiving - "..err)
     os.exit(1)
  end
  if string.find(line,"UTC") then
     for i = 1, 6 do
        if i == 5 then date = date .. "20" end
        if i == 6 then date = date .. "." end
        date = date .. string.sub(line,target[i],target[i]+1)
     end
     os.execute("date -u "..date)
     os.exit(0)
  end
end
