1 # Unix SMB/CIFS implementation.
2 # Copyright (C) Amitay Isaacs <amitay@gmail.com> 2011
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 """Tests for samba.dcerpc.dnsserver"""
20 from samba
.dcerpc
import dnsp
, dnsserver
21 from samba
.tests
import RpcInterfaceTestCase
, env_get_var_value
22 from samba
.netcmd
.dns
import ARecord
24 class DnsserverTests(RpcInterfaceTestCase
):
27 super(DnsserverTests
, self
).setUp()
28 self
.server
= env_get_var_value("SERVER_IP")
29 self
.zone
= env_get_var_value("REALM").lower()
30 self
.conn
= dnsserver
.dnsserver("ncacn_ip_tcp:%s" % (self
.server
),
32 self
.get_credentials())
34 def test_operation2(self
):
38 def test_query2(self
):
39 typeid
, result
= self
.conn
.DnssrvQuery2(dnsserver
.DNS_CLIENT_VERSION_W2K
,
44 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_SERVER_INFO_W2K
, typeid
)
46 typeid
, result
= self
.conn
.DnssrvQuery2(dnsserver
.DNS_CLIENT_VERSION_DOTNET
,
51 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_SERVER_INFO_DOTNET
, typeid
)
53 typeid
, result
= self
.conn
.DnssrvQuery2(dnsserver
.DNS_CLIENT_VERSION_LONGHORN
,
58 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_SERVER_INFO
, typeid
)
60 def test_operation2(self
):
61 client_version
= dnsserver
.DNS_CLIENT_VERSION_LONGHORN
62 rev_zone
= '1.168.192.in-addr.arpa'
64 zone_create
= dnsserver
.DNS_RPC_ZONE_CREATE_INFO_LONGHORN()
65 zone_create
.pszZoneName
= rev_zone
66 zone_create
.dwZoneType
= dnsp
.DNS_ZONE_TYPE_PRIMARY
67 zone_create
.fAllowUpdate
= dnsp
.DNS_ZONE_UPDATE_SECURE
68 zone_create
.fAging
= 0
69 zone_create
.dwDpFlags
= dnsserver
.DNS_DP_DOMAIN_DEFAULT
72 self
.conn
.DnssrvOperation2(client_version
,
78 dnsserver
.DNSSRV_TYPEID_ZONE_CREATE
,
81 request_filter
= (dnsserver
.DNS_ZONE_REQUEST_REVERSE |
82 dnsserver
.DNS_ZONE_REQUEST_PRIMARY
)
83 typeid
, zones
= self
.conn
.DnssrvComplexOperation2(client_version
,
88 dnsserver
.DNSSRV_TYPEID_DWORD
,
90 self
.assertEquals(1, zones
.dwZoneCount
)
93 self
.conn
.DnssrvOperation2(client_version
,
99 dnsserver
.DNSSRV_TYPEID_NULL
,
102 typeid
, zones
= self
.conn
.DnssrvComplexOperation2(client_version
,
107 dnsserver
.DNSSRV_TYPEID_DWORD
,
109 self
.assertEquals(0, zones
.dwZoneCount
)
112 def test_complexoperation2(self
):
113 client_version
= dnsserver
.DNS_CLIENT_VERSION_LONGHORN
114 request_filter
= (dnsserver
.DNS_ZONE_REQUEST_FORWARD |
115 dnsserver
.DNS_ZONE_REQUEST_PRIMARY
)
116 typeid
, zones
= self
.conn
.DnssrvComplexOperation2(client_version
,
121 dnsserver
.DNSSRV_TYPEID_DWORD
,
123 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_ZONE_LIST
, typeid
)
124 self
.assertEquals(2, zones
.dwZoneCount
)
126 request_filter
= (dnsserver
.DNS_ZONE_REQUEST_REVERSE |
127 dnsserver
.DNS_ZONE_REQUEST_PRIMARY
)
128 typeid
, zones
= self
.conn
.DnssrvComplexOperation2(client_version
,
133 dnsserver
.DNSSRV_TYPEID_DWORD
,
135 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_ZONE_LIST
, typeid
)
136 self
.assertEquals(0, zones
.dwZoneCount
)
139 def test_enumrecords2(self
):
140 client_version
= dnsserver
.DNS_CLIENT_VERSION_LONGHORN
141 record_type
= dnsp
.DNS_TYPE_NS
142 select_flags
= (dnsserver
.DNS_RPC_VIEW_ROOT_HINT_DATA |
143 dnsserver
.DNS_RPC_VIEW_ADDITIONAL_DATA
)
144 buflen
, roothints
= self
.conn
.DnssrvEnumRecords2(client_version
,
154 self
.assertEquals(14, roothints
.count
) # 1 NS + 13 A records (a-m)
157 def test_updaterecords2(self
):
158 client_version
= dnsserver
.DNS_CLIENT_VERSION_LONGHORN
159 record_type
= dnsp
.DNS_TYPE_A
160 select_flags
= dnsserver
.DNS_RPC_VIEW_AUTHORITY_DATA
163 rec
= ARecord('1.2.3.4')
164 rec2
= ARecord('5.6.7.8')
167 add_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
168 add_rec_buf
.rec
= rec
169 self
.conn
.DnssrvUpdateRecord2(client_version
,
177 buflen
, result
= self
.conn
.DnssrvEnumRecords2(client_version
,
187 self
.assertEquals(1, result
.count
)
188 self
.assertEquals(1, result
.rec
[0].wRecordCount
)
189 self
.assertEquals(dnsp
.DNS_TYPE_A
, result
.rec
[0].records
[0].wType
)
190 self
.assertEquals('1.2.3.4', result
.rec
[0].records
[0].data
)
193 add_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
194 add_rec_buf
.rec
= rec2
195 del_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
196 del_rec_buf
.rec
= rec
197 self
.conn
.DnssrvUpdateRecord2(client_version
,
205 buflen
, result
= self
.conn
.DnssrvEnumRecords2(client_version
,
215 self
.assertEquals(1, result
.count
)
216 self
.assertEquals(1, result
.rec
[0].wRecordCount
)
217 self
.assertEquals(dnsp
.DNS_TYPE_A
, result
.rec
[0].records
[0].wType
)
218 self
.assertEquals('5.6.7.8', result
.rec
[0].records
[0].data
)
221 del_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
222 del_rec_buf
.rec
= rec2
223 self
.conn
.DnssrvUpdateRecord2(client_version
,
231 self
.assertRaises(RuntimeError, self
.conn
.DnssrvEnumRecords2
,