1 # helper for DNS management tool
3 # Copyright (C) Amitay Isaacs 2011-2012
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 from samba
.dcerpc
import dnsserver
, dnsp
22 # Always create a copy of strings when creating DNS_RPC_RECORDs
23 # to overcome the bug in pidl generated python bindings.
26 class ARecord(dnsserver
.DNS_RPC_RECORD
):
27 def __init__(self
, ip_addr
, serial
=1, ttl
=900, rank
=dnsp
.DNS_RANK_ZONE
,
29 super(ARecord
, self
).__init
__()
30 self
.wType
= dnsp
.DNS_TYPE_A
31 self
.dwFlags
= rank | node_flag
32 self
.dwSerial
= serial
33 self
.dwTtlSeconds
= ttl
34 self
._ip
_addr
= ip_addr
[:]
35 self
.data
= self
._ip
_addr
38 class AAAARecord(dnsserver
.DNS_RPC_RECORD
):
40 def __init__(self
, ip6_addr
, serial
=1, ttl
=900, rank
=dnsp
.DNS_RANK_ZONE
,
42 super(AAAARecord
, self
).__init
__()
43 self
.wType
= dnsp
.DNS_TYPE_AAAA
44 self
.dwFlags
= rank | node_flag
45 self
.dwSerial
= serial
46 self
.dwTtlSeconds
= ttl
47 self
._ip
6_addr
= ip6_addr
[:]
48 self
.data
= self
._ip
6_addr
51 class PTRRecord(dnsserver
.DNS_RPC_RECORD
):
53 def __init__(self
, ptr
, serial
=1, ttl
=900, rank
=dnsp
.DNS_RANK_ZONE
,
55 super(PTRRecord
, self
).__init
__()
56 self
.wType
= dnsp
.DNS_TYPE_PTR
57 self
.dwFlags
= rank | node_flag
58 self
.dwSerial
= serial
59 self
.dwTtlSeconds
= ttl
61 ptr_name
= dnsserver
.DNS_RPC_NAME()
62 ptr_name
.str = self
._ptr
63 ptr_name
.len = len(ptr
)
67 class CNameRecord(dnsserver
.DNS_RPC_RECORD
):
69 def __init__(self
, cname
, serial
=1, ttl
=900, rank
=dnsp
.DNS_RANK_ZONE
,
71 super(CNameRecord
, self
).__init
__()
72 self
.wType
= dnsp
.DNS_TYPE_CNAME
73 self
.dwFlags
= rank | node_flag
74 self
.dwSerial
= serial
75 self
.dwTtlSeconds
= ttl
76 self
._cname
= cname
[:]
77 cname_name
= dnsserver
.DNS_RPC_NAME()
78 cname_name
.str = self
._cname
79 cname_name
.len = len(cname
)
80 self
.data
= cname_name
83 class NSRecord(dnsserver
.DNS_RPC_RECORD
):
85 def __init__(self
, dns_server
, serial
=1, ttl
=900, rank
=dnsp
.DNS_RANK_ZONE
,
87 super(NSRecord
, self
).__init
__()
88 self
.wType
= dnsp
.DNS_TYPE_NS
89 self
.dwFlags
= rank | node_flag
90 self
.dwSerial
= serial
91 self
.dwTtlSeconds
= ttl
92 self
._dns
_server
= dns_server
[:]
93 ns
= dnsserver
.DNS_RPC_NAME()
94 ns
.str = self
._dns
_server
95 ns
.len = len(dns_server
)
99 class MXRecord(dnsserver
.DNS_RPC_RECORD
):
101 def __init__(self
, mail_server
, preference
, serial
=1, ttl
=900,
102 rank
=dnsp
.DNS_RANK_ZONE
, node_flag
=0):
103 super(MXRecord
, self
).__init
__()
104 self
.wType
= dnsp
.DNS_TYPE_MX
105 self
.dwFlags
= rank | node_flag
106 self
.dwSerial
= serial
107 self
.dwTtlSeconds
= ttl
108 self
._mail
_server
= mail_server
[:]
109 mx
= dnsserver
.DNS_RPC_RECORD_NAME_PREFERENCE()
110 mx
.wPreference
= preference
111 mx
.nameExchange
.str = self
._mail
_server
112 mx
.nameExchange
.len = len(mail_server
)
116 class SOARecord(dnsserver
.DNS_RPC_RECORD
):
118 def __init__(self
, mname
, rname
, serial
=1, refresh
=900, retry
=600,
119 expire
=86400, minimum
=3600, ttl
=3600, rank
=dnsp
.DNS_RANK_ZONE
,
120 node_flag
=dnsp
.DNS_RPC_FLAG_AUTH_ZONE_ROOT
):
121 super(SOARecord
, self
).__init
__()
122 self
.wType
= dnsp
.DNS_TYPE_SOA
123 self
.dwFlags
= rank | node_flag
124 self
.dwSerial
= serial
125 self
.dwTtlSeconds
= ttl
126 self
._mname
= mname
[:]
127 self
._rname
= rname
[:]
128 soa
= dnsserver
.DNS_RPC_RECORD_SOA()
129 soa
.dwSerialNo
= serial
130 soa
.dwRefresh
= refresh
132 soa
.dwExpire
= expire
133 soa
.dwMinimumTtl
= minimum
134 soa
.NamePrimaryServer
.str = self
._mname
135 soa
.NamePrimaryServer
.len = len(mname
)
136 soa
.ZoneAdministratorEmail
.str = self
._rname
137 soa
.ZoneAdministratorEmail
.len = len(rname
)
141 class SRVRecord(dnsserver
.DNS_RPC_RECORD
):
143 def __init__(self
, target
, port
, priority
=0, weight
=100, serial
=1, ttl
=900,
144 rank
=dnsp
.DNS_RANK_ZONE
, node_flag
=0):
145 super(SRVRecord
, self
).__init
__()
146 self
.wType
= dnsp
.DNS_TYPE_SRV
147 self
.dwFlags
= rank | node_flag
148 self
.dwSerial
= serial
149 self
.dwTtlSeconds
= ttl
150 self
._target
= target
[:]
151 srv
= dnsserver
.DNS_RPC_RECORD_SRV()
152 srv
.wPriority
= priority
155 srv
.nameTarget
.str = self
._target
156 srv
.nameTarget
.len = len(target
)
160 class TXTRecord(dnsserver
.DNS_RPC_RECORD
):
162 def __init__(self
, slist
, serial
=1, ttl
=900, rank
=dnsp
.DNS_RANK_ZONE
,
164 super(TXTRecord
, self
).__init
__()
165 self
.wType
= dnsp
.DNS_TYPE_TXT
166 self
.dwFlags
= rank | node_flag
167 self
.dwSerial
= serial
168 self
.dwTtlSeconds
= ttl
171 self
._slist
.append(s
[:])
173 for s
in self
._slist
:
174 name
= dnsserver
.DNS_RPC_NAME()
178 txt
= dnsserver
.DNS_RPC_RECORD_STRING()
179 txt
.count
= len(slist
)