1 # -*- coding: utf-8 -*-
3 # Unix SMB/CIFS implementation.
4 # Copyright © Andrew Bartlett <abartlet@samba.org> 2021
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 """Test of Network Data Representation (NDR) marshalling and unmarshalling."""
23 import samba
.ndr
as ndr
24 from samba
.dcerpc
import winbind
, security
, lsa
26 class NdrTestCase(samba
.tests
.TestCase
):
27 def test_wbint_Principal(self
):
28 x
= winbind
.wbint_Principal()
30 x
.sid
= security
.dom_sid(security
.SID_NT_SCHANNEL_AUTHENTICATION
)
32 x
.type = lsa
.SID_NAME_USER
38 y
= ndr
.ndr_unpack(winbind
.wbint_Principal
, b
)
40 self
.assertEqual(x
.sid
, y
.sid
)
41 self
.assertEqual(x
.type, y
.type)
42 self
.assertEqual(x
.name
, y
.name
)
44 def test_wbint_Principal_null_name(self
):
45 x
= winbind
.wbint_Principal()
47 x
.sid
= security
.dom_sid(security
.SID_NT_SCHANNEL_AUTHENTICATION
)
49 x
.type = lsa
.SID_NAME_USER
55 y
= ndr
.ndr_unpack(winbind
.wbint_Principal
, b
)
57 self
.assertEqual(x
.sid
, y
.sid
)
58 self
.assertEqual(x
.type, y
.type)
59 self
.assertEqual(x
.name
, y
.name
)
61 def test_wbint_Principals(self
):
65 for i
in range(0, 10):
66 x
= winbind
.wbint_Principal()
68 x
.sid
= security
.dom_sid(security
.SID_NT_SCHANNEL_AUTHENTICATION
)
70 x
.type = lsa
.SID_NAME_USER
76 wb_principals
= winbind
.wbint_Principals()
77 wb_principals
.num_principals
= 10
78 wb_principals
.principals
= principals
80 b
= ndr
.ndr_pack(wb_principals
)
82 unpacked_principals
= ndr
.ndr_unpack(winbind
.wbint_Principals
,
85 self
.assertEqual(wb_principals
.num_principals
,
86 unpacked_principals
.num_principals
)
88 for i
in range(0, 10):
90 y
= unpacked_principals
.principals
[i
]
91 self
.assertEqual(x
.sid
, y
.sid
)
92 self
.assertEqual(x
.type, y
.type)
93 self
.assertEqual(x
.name
, y
.name
)
95 def test_wbint_10_Principals(self
):
97 (principals
, unpacked_principals
) = self
._test
_wbint
_Principals
(num
)
99 for i
in range(0, num
):
101 y
= unpacked_principals
.principals
[i
]
102 self
.assertEqual(x
.sid
, y
.sid
)
103 self
.assertEqual(x
.type, y
.type)
104 self
.assertEqual(x
.name
, y
.name
)
106 def test_wbint_max_token_Principals(self
):
107 self
._test
_wbint
_Principals
(samba
._glue
.ndr_token_max_list_size()+1)
109 def _test_wbint_Principals(self
, num
):
112 for i
in range(0, num
):
113 x
= winbind
.wbint_Principal()
115 x
.sid
= security
.dom_sid(security
.SID_NT_SCHANNEL_AUTHENTICATION
+ "-%d" % num
)
117 x
.type = lsa
.SID_NAME_USER
119 x
.name
= "fred%d" % num
123 wb_principals
= winbind
.wbint_Principals()
124 wb_principals
.num_principals
= num
125 wb_principals
.principals
= principals
127 b
= ndr
.ndr_pack(wb_principals
)
130 unpacked_principals
= ndr
.ndr_unpack(winbind
.wbint_Principals
,
132 except RuntimeError as e
:
135 self
.assertEqual(wb_principals
.num_principals
,
136 unpacked_principals
.num_principals
)
138 return (principals
, unpacked_principals
)