sys.path.insert(0, 'bin/python')
import samba.tests
-from samba.dcerpc import srvsvc, dnsserver
+from samba.dcerpc import srvsvc, dnsserver, netlogon
import os
from samba.samba3 import libsmb_samba_internal as libsmb
from samba.samba3 import param as s3param
class AuthLogTests(samba.tests.auth_log_base.AuthLogTestBase):
+ netlogon_aes_flags = (
+ netlogon.NETLOGON_NEG_ACCOUNT_LOCKOUT |
+ netlogon.NETLOGON_NEG_PERSISTENT_SAMREPL |
+ netlogon.NETLOGON_NEG_ARCFOUR |
+ netlogon.NETLOGON_NEG_PROMOTION_COUNT |
+ netlogon.NETLOGON_NEG_CHANGELOG_BDC |
+ netlogon.NETLOGON_NEG_FULL_SYNC_REPL |
+ netlogon.NETLOGON_NEG_MULTIPLE_SIDS |
+ netlogon.NETLOGON_NEG_REDO |
+ netlogon.NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL |
+ netlogon.NETLOGON_NEG_SEND_PASSWORD_INFO_PDC |
+ netlogon.NETLOGON_NEG_GENERIC_PASSTHROUGH |
+ netlogon.NETLOGON_NEG_CONCURRENT_RPC |
+ netlogon.NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL |
+ netlogon.NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL |
+ netlogon.NETLOGON_NEG_STRONG_KEYS |
+ netlogon.NETLOGON_NEG_TRANSITIVE_TRUSTS |
+ netlogon.NETLOGON_NEG_DNS_DOMAIN_TRUSTS |
+ netlogon.NETLOGON_NEG_PASSWORD_SET2 |
+ netlogon.NETLOGON_NEG_GETDOMAININFO |
+ netlogon.NETLOGON_NEG_CROSS_FOREST_TRUSTS |
+ netlogon.NETLOGON_NEG_SUPPORTS_AES |
+ netlogon.NETLOGON_NEG_AUTHENTICATED_RPC_LSASS |
+ netlogon.NETLOGON_NEG_AUTHENTICATED_RPC)
+ # "0x610FFFFF"
+ netlogon_aes_flags_str = "0x%08X" % netlogon_aes_flags
def setUp(self):
super().setUp()
password = os.environ["PASSWORD"]
samlogon = "samlogon %s %s %s %d" % (user, password, workstation, 1)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_interactive_bad_password(self):
workstation = "AuthLogTests"
password = "badPassword"
samlogon = "samlogon %s %s %s %d" % (user, password, workstation, 1)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_interactive_bad_user(self):
workstation = "AuthLogTests"
password = os.environ["PASSWORD"]
samlogon = "samlogon %s %s %s %d" % (user, password, workstation, 1)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_network(self):
workstation = "AuthLogTests"
password = os.environ["PASSWORD"]
samlogon = "samlogon %s %s %s %d" % (user, password, workstation, 2)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_network_bad_password(self):
workstation = "AuthLogTests"
password = "badPassword"
samlogon = "samlogon %s %s %s %d" % (user, password, workstation, 2)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
password = os.environ["PASSWORD"]
samlogon = "samlogon %s %s %s %d" % (user, password, workstation, 2)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_network_mschap(self):
workstation = "AuthLogTests"
samlogon = "samlogon %s %s %s %d 0x00010000" % (
user, password, workstation, 2)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_network_mschap_bad_password(self):
workstation = "AuthLogTests"
samlogon = "samlogon %s %s %s %d 0x00010000" % (
user, password, workstation, 2)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_network_mschap_bad_user(self):
workstation = "AuthLogTests"
samlogon = "samlogon %s %s %s %d 0x00010000" % (
user, password, workstation, 2)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertIn(received, [4, 5],
"Did not receive the expected number of messages")
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
def test_samlogon_schannel_seal(self):
workstation = "AuthLogTests"
password = os.environ["PASSWORD"]
samlogon = "schannel;samlogon %s %s %s" % (user, password, workstation)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertEqual("SEAL", msg["Authorization"]["transportProtection"])
self.assertTrue(self.is_guid(msg["Authorization"]["sessionId"]))
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
# Signed logons get promoted to sealed, this test ensures that
# this behaviour is not removed accidentally
def test_samlogon_schannel_sign(self):
samlogon = "schannelsign;samlogon %s %s %s" % (
user, password, workstation)
- call(["bin/rpcclient", "-c", samlogon, "-U%", server])
+ call(["bin/rpcclient", "-c", samlogon, "-U%", server,
+ "--option=clientusekrb5netlogon=no"])
messages = self.waitForMessages(isLastExpectedMessage)
messages = self.remove_netlogon_messages(messages)
self.assertEqual("SEAL", msg["Authorization"]["transportProtection"])
self.assertTrue(self.is_guid(msg["Authorization"]["sessionId"]))
+ msg = messages[-1]
+ self.assertEqual("Authentication", msg["type"])
+ self.assertEqual(self.netlogon_aes_flags_str,
+ msg["Authentication"]["netlogonNegotiateFlags"])
+
if __name__ == '__main__':
import unittest