Advertisement
Guest User

Untitled

a guest
May 31st, 2013
820
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Script Name: UpdateYaDNS
  2. # Created by Klajnor 16.05.2013
  3. # Last update by Klajnor 21.05.2013
  4. # Last update by Klajnor 22.05.2013
  5. # Last update by Klajnor 31.05.2013: Update subdomain record
  6. # Tested on 6.0rc14 and 6.0
  7.  
  8. # Set needed variables
  9.  
  10. #Root domain
  11. :local YaDNSdomain "domain.ru"
  12. :local YaDNSsubdomain "xxx.domain.ru"
  13.  
  14. # read http://api.yandex.ru/pdd/doc/api-pdd/reference/api-dns_get_token.xml#api-dns_get_token
  15. :local YaDNStoken "132456789012345678901234567890"
  16.  
  17. # read http://api.yandex.ru/pdd/doc/api-pdd/reference/api-dns_edit_a_record.xml
  18. :local YaDNSrecordid "1234567"
  19. :local YaDNSTTL "300"
  20.  
  21. :global YaDNSForceUpdateOnce
  22. :global YaDNSPreviousIP
  23. :local YaDNSInterfaceName "PPPoE_NBN"
  24. :local YaDNSDomainRecord
  25.  
  26. # get the current IP address from the interface
  27.  
  28. :if ([:len [/interface find name=$YaDNSInterfaceName]] = 0 ) do={
  29. :log info "UpdateYaDNS: No interface named $YaDNSInterfaceName , please check configuration."
  30. :error "UpdateYaDNS: No interface named $YaDNSInterfaceName , please check configuration."
  31. }
  32.  
  33. :if ([:typeof $YaDNSPreviousIP] = "nothing" ) do={ :global YaDNSPreviousIP 0.0.0.0 }
  34.  
  35. :local YaDNSYaDNSCurrentIPMask [ /ip address get [/ip address find interface=$YaDNSInterfaceName] address ]
  36.  
  37. :local YaDNSCurrentIP [:pick $YaDNSYaDNSCurrentIPMask 0 [:find $YaDNSYaDNSCurrentIPMask "/"]]
  38.  
  39.  
  40. :if ([ :typeof $YaDNSCurrentIP ] = "nothing" ) do= {
  41. :log info "UpdateDynDNS: No ip address present on $YaDNSInterfaceName, please check."
  42. :error "UpdateDynDNS: No ip address present on $YaDNSInterfaceName, please check."
  43. }
  44.  
  45. :local YaDNSsrcpath1 ( "nsapi/get_domain_records.xml\?token=" . $YaDNStoken . "&domain=" . $YaDNSdomain )
  46.  
  47. :local YaDNSAPI [:resolve "pddimp.yandex.ru"]
  48. /tool fetch mode=https address="$YaDNSAPI" host="pddimp.yandex.ru" src-path=$YaDNSsrcpath1 dst-path="/YaDNSGetDomainRecord.txt"
  49.  
  50. :local Result1 [/file get YaDNSGetDomainRecord.txt contents]
  51. :local Result2 [:pick $Result1 ([:find $Result1 "id=\"$YaDNSrecordid"]) ([:find $Result1 "id=\"$YaDNSrecordid"]+42) ]
  52. :set YaDNSDomainRecord [:pick $Result2 ([:find $Result2 ">"] + 1) ( [:find $Result2 "<"] ) ]
  53.  
  54. :if (($YaDNSForceUpdateOnce or ($YaDNSCurrentIP != $YaDNSPreviousIP) or ($YaDNSCurrentIP != $YaDNSDomainRecord)) = true) do={
  55.  
  56. :log info "UpdateYaDNS: Try Update"
  57.  
  58. :log info "UpdateYaDNS: YaDNSForceUpdateOnce = $YaDNSForceUpdateOnce"
  59. :log info "UpdateYaDNS: YaDNSPreviousIP = $YaDNSPreviousIP"
  60. :log info "UpdateYaDNS: YaDNSCurrentIP = $YaDNSCurrentIP"
  61. :log info "UpdateYaDNS: YaDNSDomainRecord = $YaDNSDomainRecord"
  62.  
  63. :local YaDNSsrcpath2 ( "nsapi/edit_a_record.xml\?token=" . $YaDNStoken . "&domain=" . $YaDNSdomain . "&record_id=" . $YaDNSrecordid . "&ttl=" . $YaDNSTTL . "&content=" . $YaDNSCurrentIP )
  64.  
  65. if ( $YaDNSdomain != $YaDNSsubdomain ) do={ set YaDNSsrcpath2 ($YaDNSsrcpath2 . "&subdomain=" . YaDNSsubdomain) }
  66.  
  67. :local YaDNSAPI [:resolve "pddimp.yandex.ru"]
  68.  
  69. /tool fetch mode=https address="$YaDNSAPI" host="pddimp.yandex.ru" src-path=$YaDNSsrcpath2 dst-path="/YaDNS.txt"
  70. :local result [/file get YaDNS.txt contents]
  71.  
  72. :global YaDNSResult [:pick $result ([:find $result "<error>"]+7) [:find $result "</error>"]]
  73.  
  74. :if ( $YaDNSResult = "ok" ) do={
  75. :set YaDNSForceUpdateOnce false
  76. :set YaDNSPreviousIP $YaDNSCurrentIP
  77. :log info "UpdateYaDNS: Update Success"
  78. }
  79.  
  80. :log info "UpdateYaDNS: Result: $YaDNSResult"
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement