Guest User

DNS Server

a guest
Oct 28th, 2012
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.73 KB | None | 0 0
  1. -- DNS Server Software - Version 1.0.0                      --
  2. -- Part of Interweb; Created for ComputerCraft              --
  3. -- Written by Amarite1                                      --
  4. -- http://t3kbau5.tk/                                       --
  5. -- Liscense: http://creativecommons.org/licenses/by-sa/3.0/ --
  6. --------------------------------------------------------------
  7.  
  8. rednet.open('back') --change this to whatever side the internet cable/wireless modem is on. Copy/paste as many times as you need. Valid sides: back, front, top, bottom, left, right
  9.  
  10.  
  11. --previously in the api
  12. function resolve(domain)
  13.     returnString = "ERROR"
  14.     if fs.exists("records/" .. domain) then
  15.         print("Domain exists")
  16.         dnsRecord = fs.open("records/" .. domain, "r")
  17.         recordType = dnsRecord.readLine()
  18.         pointsTo = dnsRecord.readLine()
  19.         if recordType == "A" then
  20.             print(domain .. " has an A record!")
  21.         elseif recordType == "C" then
  22.             print("CNAME POINTS TO:" .. pointsTo)
  23.             cnameRecord = fs.open("records/" .. pointsTo, "r")
  24.             cnameType = cnameRecord.readLine()
  25.             pointsTo = cnameRecord.readLine()
  26.             cnameRecord.close()
  27.         end
  28.         dnsRecord.close()
  29.         print(pointsTo)
  30.         returnString = pointsTo
  31.     else
  32.         returnString = "Domain not registered"
  33.     end
  34.     print("Return String: " .. returnString)
  35.     return returnString
  36. end
  37.  
  38. function registerDomain(domain, recordType, pointsTo, password)
  39.     if fs.exists("records/" .. domain) then
  40.         return "Domain already registered"
  41.     else
  42.         if recordType ~= nil and pointsTo ~= nil then
  43.             newRecord = fs.open("records/" .. domain, "w")
  44.             newRecord.writeLine(recordType)
  45.             newRecord.writeLine(pointsTo)
  46.             newRecord.close()
  47.             recordAdmin = fs.open("admin/" .. domain, "w")
  48.             recordAdmin.writeLine(password)
  49.             recordAdmin.close()
  50.             return "Domain " .. domain .. " now has a/an " .. recordType .. " pointing to " .. pointsTo
  51.         else
  52.             return "Insufficient data provided"
  53.         end
  54.     end
  55. end
  56.  
  57. --new functions, not in api
  58. function modifyDomain(domain, password, recordType, pointsTo)
  59.     if fs.exists("records/" .. domain) then
  60.         recordAdmin = fs.open("admin/" .. domain, "r")
  61.         if recordAdmin.readLine() == password then
  62.             recordAdmin.close()
  63.             record = fs.open("records/" .. domain, "w")
  64.             record.writeLine(recordType)
  65.             record.writeLine(pointsTo)
  66.             record.close()
  67.             return "Modified"
  68.         else
  69.             return "Incorrect password"
  70.         end
  71.     else
  72.         return "Domain does not exist"
  73.     end
  74. end
  75.  
  76. function deleteDomain(domain, password)
  77.     if fs.exists("records/" .. domain) then
  78.         recordAdmin = fs.open("admin/" .. domain, "r")
  79.         if recordAdmin.readLine() == password then
  80.             recordAdmin.close()
  81.             sleep(0.1)
  82.             print(fs.isReadOnly("records/" .. domain))
  83.             fs.delete("records/" .. domain)
  84.             fs.delete("admin/" .. domain)
  85.             return "Deleted"
  86.         else
  87.             return "Incorrect password"
  88.         end
  89.     else
  90.         return "Domain does not exist"
  91.     end
  92. end
  93. --split string function
  94. function split(str, pat)
  95.    local t = {}
  96.    local fpat = "(.-)" .. pat
  97.    local last_end = 1
  98.    local s, e, cap = str:find(fpat, 1)
  99.    while s do
  100.           if s ~= 1 or cap ~= "" then
  101.   table.insert(t,cap)
  102.           end
  103.           last_end = e+1
  104.           s, e, cap = str:find(fpat, last_end)
  105.    end
  106.    if last_end <= #str then
  107.           cap = str:sub(last_end)
  108.           table.insert(t, cap)
  109.    end
  110.    return t
  111. end
  112. while true do
  113.     sender, request, distance = rednet.receive(10)
  114.     if request ~= nil then
  115.         print(request)
  116.         packetArray = {}
  117.         packetArray = split(request, "<#>")
  118.     end
  119.     if request ~= nil and packetArray[1] == tostring(os.getComputerID()) then
  120.         print("Message received")
  121.         requestArray = split(packetArray[2], "+")
  122.         print("Array created: " .. requestArray[1] .. " " .. requestArray[2])
  123.         if requestArray[1] == "resolve" then
  124.             print("Resolve " .. requestArray[2])
  125.             resolveResult = resolve(requestArray[2])
  126.             print("Resolve Result: " .. resolveResult)
  127.             --rednet.send(sender, sender .. "<#>" .. resolveResult)
  128.             sleep(0.1)
  129.             rednet.send(sender, sender .. "<#>" .. resolveResult)
  130.         elseif requestArray[1] == "register" then
  131.             print("Register " .. requestArray[2] .. " " .. requestArray[3] .. " " .. requestArray[4])
  132.             registerResult = registerDomain(requestArray[2], requestArray[3], requestArray[4], requestArray[5])
  133.             print("Register Result: " .. registerResult)
  134.             sleep(0.1)
  135.             rednet.send(sender, sender .. "<#>" .. registerResult)
  136.         elseif requestArray[1] == "modify" then
  137.             result = modifyDomain(requestArray[2], requestArray[3], requestArray[4], requestArray[5])
  138.             sleep(0.1)
  139.             rednet.send(sender, sender .. "<#>" .. result)
  140.        
  141.         elseif requestArray[1] == "delete" then
  142.             result = deleteDomain(requestArray[2], requestArray[3])
  143.             sleep(0.1)
  144.             rednet.send(sender, sender .. "<#>" .. result)
  145.         end
  146.     end
  147. end
Advertisement
Add Comment
Please, Sign In to add comment