mirror of
https://github.com/fortra/impacket
synced 2026-06-08 14:15:13 +00:00
1146 lines
40 KiB
Python
1146 lines
40 KiB
Python
# Impacket - Collection of Python classes for working with network protocols.
|
|
#
|
|
# Copyright Fortra, LLC and its affiliated companies
|
|
#
|
|
# All rights reserved.
|
|
#
|
|
# This software is provided under a slightly modified version
|
|
# of the Apache Software License. See the accompanying LICENSE file
|
|
# for more information.
|
|
#
|
|
# Tested so far:
|
|
# (h)NetrConnectionEnum
|
|
# (h)NetrFileEnum
|
|
# (h)NetrFileGetInfo
|
|
# (h)NetrFileClose
|
|
# (h)NetrSessionEnum
|
|
# (h)NetrSessionDel
|
|
# (h)NetrShareAdd
|
|
# (h)NetrShareDel
|
|
# (h)NetrShareEnum
|
|
# (h)NetrShareEnumSticky
|
|
# (h)NetrShareGetInfo
|
|
# (h)NetrShareDelSticky
|
|
# (h)NetrShareDelStart
|
|
# (h)NetrShareDelCommit
|
|
# (h)NetrShareCheck
|
|
# (h)NetrServerGetInfo
|
|
# (h)NetrServerDiskEnum
|
|
# (h)NetrServerStatisticsGet
|
|
# (h)NetrRemoteTOD
|
|
# (h)NetrServerTransportEnum
|
|
# (h)NetrpGetFileSecurity
|
|
# (h)NetrpSetFileSecurity
|
|
# (h)NetprPathType
|
|
# (h)NetprPathCanonicalize
|
|
# (h)NetprPathCompare
|
|
# (h)NetprNameValidate
|
|
# (h)NetprNameCanonicalize
|
|
# (h)NetprNameCompare
|
|
# (h)NetrDfsGetVersion
|
|
# (h)NetrDfsModifyPrefix
|
|
# (h)NetrDfsFixLocalVolume
|
|
# (h)NetrDfsManagerReportSiteInfo
|
|
# (h)NetrServerAliasAdd
|
|
# (h)NetrServerAliasEnum
|
|
# (h)NetrServerAliasDel
|
|
# NetrShareDelEx
|
|
# NetrServerTransportAdd
|
|
# NetrServerTransportDel
|
|
# NetrServerTransportAddEx
|
|
# NetrServerTransportDelEx
|
|
# NetrDfsCreateLocalPartition
|
|
# NetrDfsDeleteLocalPartition
|
|
# NetrDfsSetLocalVolumeState
|
|
# NetrDfsCreateExitPoint
|
|
# NetrDfsDeleteExitPoint
|
|
# NetrShareSetInfo
|
|
#
|
|
# Not yet:
|
|
# NetrServerSetInfo
|
|
#
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
|
|
import pytest
|
|
import unittest
|
|
from tests.dcerpc import DCERPCTests
|
|
|
|
from impacket.dcerpc.v5 import srvs
|
|
from impacket.dcerpc.v5.dtypes import NULL, OWNER_SECURITY_INFORMATION
|
|
|
|
|
|
class SRVSTests(DCERPCTests):
|
|
iface_uuid = srvs.MSRPC_UUID_SRVS
|
|
string_binding = r"ncacn_np:{0.machine}[\PIPE\srvsvc]"
|
|
authn = True
|
|
|
|
def test_NetrConnectionEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrConnectionEnum()
|
|
request['ServerName'] = '\\\\%s\x00' % self.machine
|
|
request['Qualifier'] = 'IPC$\x00'
|
|
request['InfoStruct']['Level'] = 1
|
|
request['InfoStruct']['ConnectInfo']['tag'] = 1
|
|
request['PreferedMaximumLength'] = 8192
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['Level'] = 0
|
|
request['InfoStruct']['ConnectInfo']['tag'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrConnectionEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrConnectionEnum(dce, 'IPC$\x00', 1)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrConnectionEnum(dce, 'IPC$\x00', 0)
|
|
resp.dump()
|
|
|
|
def test_NetrFileEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrFileEnum()
|
|
request['ServerName'] = '\\\\%s\x00' % self.machine
|
|
request['BasePath'] = NULL
|
|
request['UserName'] = NULL
|
|
request['InfoStruct']['Level'] = 2
|
|
request['InfoStruct']['FileInfo']['tag'] = 2
|
|
request['PreferedMaximumLength'] = 8192
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
request['InfoStruct']['Level'] = 3
|
|
request['InfoStruct']['FileInfo']['tag'] = 3
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrFileEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrFileEnum(dce, NULL, NULL, 2)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrFileEnum(dce, NULL, NULL, 3)
|
|
resp.dump()
|
|
|
|
def test_NetrFileGetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrFileEnum()
|
|
request['ServerName'] = '\\\\%s\x00' % self.machine
|
|
request['BasePath'] = NULL
|
|
request['UserName'] = NULL
|
|
request['InfoStruct']['Level'] = 2
|
|
request['InfoStruct']['FileInfo']['tag'] = 2
|
|
request['PreferedMaximumLength'] = 8192
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrFileGetInfo()
|
|
request['ServerName'] = '\\\\%s\x00' % self.machine
|
|
request['FileId'] = resp['InfoStruct']['FileInfo']['Level2']['Buffer'][0]['fi2_id']
|
|
request['Level'] = 2
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 3
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrFileGetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrFileEnum(dce, NULL, NULL, 2)
|
|
resp.dump()
|
|
|
|
resp0 = srvs.hNetrFileGetInfo(dce, resp['InfoStruct']['FileInfo']['Level2']['Buffer'][0]['fi2_id'], 2)
|
|
resp0.dump()
|
|
|
|
resp = srvs.hNetrFileGetInfo(dce, resp['InfoStruct']['FileInfo']['Level2']['Buffer'][0]['fi2_id'], 3)
|
|
resp.dump()
|
|
|
|
def test_NetrFileClose(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrFileEnum()
|
|
request['ServerName'] = '\\\\%s\x00' % self.machine
|
|
request['BasePath'] = NULL
|
|
request['UserName'] = NULL
|
|
request['InfoStruct']['Level'] = 2
|
|
request['InfoStruct']['FileInfo']['tag'] = 2
|
|
request['PreferedMaximumLength'] = 8192
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrFileClose()
|
|
request['ServerName'] = '\\\\%s\x00' % self.machine
|
|
request['FileId'] = resp['InfoStruct']['FileInfo']['Level2']['Buffer'][0]['fi2_id']
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except Exception as e:
|
|
# I might be closing myself ;)
|
|
if str(e).find('STATUS_PIPE_BROKEN') < 0 and str(e).find('STATUS_FILE_CLOSED') < 0 and str(e).find('STATUS_INVALID_HANDLE') < 0 and str(e).find('0x90a') < 0:
|
|
raise
|
|
|
|
def test_hNetrFileClose(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrFileEnum(dce, NULL, NULL, 2)
|
|
resp.dump()
|
|
|
|
try:
|
|
resp = srvs.hNetrFileClose(dce, resp['InfoStruct']['FileInfo']['Level2']['Buffer'][0]['fi2_id'])
|
|
resp.dump()
|
|
except Exception as e:
|
|
# I might be closing myself ;)
|
|
if str(e).find('STATUS_PIPE_BROKEN') < 0 and str(e).find('STATUS_FILE_CLOSED') < 0 and str(e).find('STATUS_INVALID_HANDLE') < 0 and str(e).find('0x90a') < 0:
|
|
raise
|
|
|
|
def test_NetrSessionEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrSessionEnum()
|
|
request['ServerName'] = NULL
|
|
request['ClientName'] = NULL
|
|
request['UserName'] = NULL
|
|
request['InfoStruct']['Level'] = 0
|
|
request['InfoStruct']['SessionInfo']['tag'] = 0
|
|
request['InfoStruct']['SessionInfo']['Level0']['Buffer'] = NULL
|
|
request['PreferedMaximumLength'] = 0xffffffff
|
|
request['ResumeHandle'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['Level'] = 1
|
|
request['InfoStruct']['SessionInfo']['tag'] = 1
|
|
request['InfoStruct']['SessionInfo']['Level1']['Buffer'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['Level'] = 2
|
|
request['InfoStruct']['SessionInfo']['tag'] = 2
|
|
request['InfoStruct']['SessionInfo']['Level2']['Buffer'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['Level'] = 10
|
|
request['InfoStruct']['SessionInfo']['tag'] = 10
|
|
request['InfoStruct']['SessionInfo']['Level10']['Buffer'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['Level'] = 502
|
|
request['InfoStruct']['SessionInfo']['tag'] = 502
|
|
request['InfoStruct']['SessionInfo']['Level502']['Buffer'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrSessionEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrSessionEnum(dce, NULL, NULL, 0)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrSessionEnum(dce, NULL, NULL, 1)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrSessionEnum(dce, NULL, NULL, 2)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrSessionEnum(dce, NULL, NULL, 10)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrSessionEnum(dce, NULL, NULL, 502)
|
|
resp.dump()
|
|
|
|
def test_NetrSessionDel(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrSessionEnum()
|
|
request['ServerName'] = NULL
|
|
request['ClientName'] = NULL
|
|
request['UserName'] = NULL
|
|
request['InfoStruct']['Level'] = 502
|
|
request['InfoStruct']['SessionInfo']['tag'] = 502
|
|
request['InfoStruct']['SessionInfo']['Level502']['Buffer'] = NULL
|
|
request['PreferedMaximumLength'] = 0xffffffff
|
|
request['ResumeHandle'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrSessionDel()
|
|
request['ServerName'] = NULL
|
|
request['ClientName'] = resp['InfoStruct']['SessionInfo']['Level502']['Buffer'][0]['sesi502_cname']
|
|
request['UserName'] = resp['InfoStruct']['SessionInfo']['Level502']['Buffer'][0]['sesi502_username']
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if e.get_error_code() != 0x908:
|
|
raise
|
|
|
|
def test_hNetrSessionDel(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrSessionEnum(dce, NULL, NULL, 502)
|
|
resp.dump()
|
|
|
|
try:
|
|
resp = srvs.hNetrSessionDel(dce, resp['InfoStruct']['SessionInfo']['Level502']['Buffer'][0]['sesi502_cname'], resp['InfoStruct']['SessionInfo']['Level502']['Buffer'][0]['sesi502_username'] )
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if e.get_error_code() != 0x908:
|
|
raise
|
|
|
|
def test_NetrShareAdd_NetrShareDel(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareAdd()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 2
|
|
request['InfoStruct']['tag'] = 2
|
|
request['InfoStruct']['ShareInfo2']['shi2_netname'] = 'BETUSHARE\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_type'] = srvs.STYPE_TEMPORARY
|
|
request['InfoStruct']['ShareInfo2']['shi2_remark'] = 'My Remark\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_max_uses'] = 0xFFFFFFFF
|
|
request['InfoStruct']['ShareInfo2']['shi2_path'] = 'c:\\\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_passwd'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrShareDel()
|
|
request['ServerName'] = NULL
|
|
request['NetName'] = 'BETUSHARE\x00'
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrShareAdd_hNetrShareDel(self):
|
|
dce, rpc_transport = self.connect()
|
|
shareInfo = srvs.SHARE_INFO_2()
|
|
shareInfo['shi2_netname'] = 'BETUSHARE\x00'
|
|
shareInfo['shi2_type'] = srvs.STYPE_TEMPORARY
|
|
shareInfo['shi2_remark'] = 'My Remark\x00'
|
|
shareInfo['shi2_max_uses'] = 0xFFFFFFFF
|
|
shareInfo['shi2_path'] = 'c:\\\x00'
|
|
shareInfo['shi2_passwd'] = NULL
|
|
resp = srvs.hNetrShareAdd(dce, 2, shareInfo)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareDel(dce, 'BETUSHARE\x00')
|
|
resp.dump()
|
|
|
|
def test_NetrShareEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareEnum()
|
|
request['ServerName'] = NULL
|
|
request['PreferedMaximumLength'] = 0xffffffff
|
|
request['ResumeHandle'] = NULL
|
|
request['InfoStruct']['ShareInfo']['tag'] = 0
|
|
request['InfoStruct']['ShareInfo']['Level0']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['ShareInfo']['tag'] = 1
|
|
request['InfoStruct']['ShareInfo']['Level1']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 1
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['ShareInfo']['tag'] = 2
|
|
request['InfoStruct']['ShareInfo']['Level2']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 2
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['ShareInfo']['tag'] = 501
|
|
request['InfoStruct']['ShareInfo']['Level501']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 501
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['ShareInfo']['tag'] = 502
|
|
request['InfoStruct']['ShareInfo']['Level502']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 502
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['ShareInfo']['tag'] = 503
|
|
request['InfoStruct']['ShareInfo']['Level503']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 503
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrShareEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrShareEnum(dce, 0)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareEnum(dce, 1)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareEnum(dce, 2)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareEnum(dce, 501)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareEnum(dce, 502)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareEnum(dce, 503)
|
|
resp.dump()
|
|
|
|
def tes_NetrShareEnumSticky(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareEnumSticky()
|
|
request['ServerName'] = NULL
|
|
request['PreferedMaximumLength'] = 0xffffffff
|
|
request['ResumeHandle'] = NULL
|
|
request['InfoStruct']['ShareInfo']['tag'] = 502
|
|
request['InfoStruct']['ShareInfo']['Level502']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 502
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['ShareInfo']['tag'] = 503
|
|
request['InfoStruct']['ShareInfo']['Level503']['Buffer'] = NULL
|
|
request['InfoStruct']['Level'] = 503
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def tes_hNetrShareEnumSticky(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrShareEnumSticky(dce, 502)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareEnumSticky(dce, 503)
|
|
resp.dump()
|
|
|
|
def test_NetrShareGetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareGetInfo()
|
|
request['ServerName'] = NULL
|
|
request['NetName'] = 'IPC$\x00'
|
|
request['Level'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 1
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 2
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 501
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 502
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 503
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 1005
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrShareGetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 0)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 1)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 2)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 501)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 502)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 503)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 1005)
|
|
resp.dump()
|
|
|
|
def test_NetrShareSetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareGetInfo()
|
|
request['ServerName'] = NULL
|
|
request['NetName'] = 'IPC$\x00'
|
|
request['Level'] = 1
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
oldValue = resp['InfoStruct']['ShareInfo1']['shi1_remark']
|
|
|
|
req = srvs.NetrShareSetInfo()
|
|
req['ServerName'] = NULL
|
|
req['NetName'] = 'IPC$\x00'
|
|
req['Level'] = 1
|
|
req['ShareInfo']['tag'] = 1
|
|
req['ShareInfo']['ShareInfo1'] = resp['InfoStruct']['ShareInfo1']
|
|
req['ShareInfo']['ShareInfo1']['shi1_remark'] = 'BETUS\x00'
|
|
resp = dce.request(req)
|
|
resp.dump()
|
|
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
req['ShareInfo']['ShareInfo1']['shi1_remark'] = oldValue
|
|
resp = dce.request(req)
|
|
resp.dump()
|
|
|
|
def test_hNetrShareSetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 1)
|
|
resp.dump()
|
|
oldValue = resp['InfoStruct']['ShareInfo1']['shi1_remark']
|
|
|
|
shareInfo = resp['InfoStruct']['ShareInfo1']
|
|
shareInfo['shi1_remark'] = 'BETUS\x00'
|
|
resp = srvs.hNetrShareSetInfo(dce, 'IPC$\x00', 1, shareInfo)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareGetInfo(dce, 'IPC$\x00', 1)
|
|
resp.dump()
|
|
|
|
shareInfo['shi1_remark'] = oldValue
|
|
resp = srvs.hNetrShareSetInfo(dce, 'IPC$\x00', 1, shareInfo)
|
|
resp.dump()
|
|
|
|
def tes_hNetrShareDelSticky(self):
|
|
dce, rpc_transport = self.connect()
|
|
|
|
shareInfo = srvs.SHARE_INFO_2()
|
|
shareInfo['shi2_netname'] = 'BETUSHARE\x00'
|
|
shareInfo['shi2_type'] = 0
|
|
shareInfo['shi2_remark'] = 'My Remark\x00'
|
|
shareInfo['shi2_max_uses'] = 0xFFFFFFFF
|
|
shareInfo['shi2_path'] = 'c:\\\x00'
|
|
shareInfo['shi2_passwd'] = NULL
|
|
resp = srvs.hNetrShareAdd(dce, 2, shareInfo)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareDelSticky(dce, 'BETUSHARE\x00')
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareDel(dce, 'BETUSHARE\x00')
|
|
resp.dump()
|
|
|
|
def tes_NetrShareDelSticky(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareAdd()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 2
|
|
request['InfoStruct']['tag'] = 2
|
|
request['InfoStruct']['ShareInfo2']['shi2_netname'] = 'BETUSHARE\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_type'] = 0
|
|
request['InfoStruct']['ShareInfo2']['shi2_remark'] = 'My Remark\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_max_uses'] = 0xFFFFFFFF
|
|
request['InfoStruct']['ShareInfo2']['shi2_path'] = 'c:\\\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_passwd'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrShareDelSticky()
|
|
request['ServerName'] = NULL
|
|
request['NetName'] = 'BETUSHARE\x00'
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrShareDel()
|
|
request['ServerName'] = NULL
|
|
request['NetName'] = 'BETUSHARE\x00'
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_NetrShareDelStart_NetrShareDelCommit(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareAdd()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 2
|
|
request['InfoStruct']['tag'] = 2
|
|
request['InfoStruct']['ShareInfo2']['shi2_netname'] = 'BETUSHARE\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_type'] = 0
|
|
request['InfoStruct']['ShareInfo2']['shi2_remark'] = 'My Remark\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_max_uses'] = 0xFFFFFFFF
|
|
request['InfoStruct']['ShareInfo2']['shi2_path'] = 'c:\\\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_passwd'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrShareDelStart()
|
|
request['ServerName'] = NULL
|
|
request['NetName'] = 'BETUSHARE\x00'
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrShareDelCommit()
|
|
request['ContextHandle'] = resp['ContextHandle']
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrShareDelStart_hNetrShareDelCommit(self):
|
|
dce, rpc_transport = self.connect()
|
|
|
|
shareInfo = srvs.SHARE_INFO_2()
|
|
shareInfo['shi2_netname'] = 'BETUSHARE\x00'
|
|
shareInfo['shi2_type'] = 0
|
|
shareInfo['shi2_remark'] = 'My Remark\x00'
|
|
shareInfo['shi2_max_uses'] = 0xFFFFFFFF
|
|
shareInfo['shi2_path'] = 'c:\\\x00'
|
|
shareInfo['shi2_passwd'] = NULL
|
|
resp = srvs.hNetrShareAdd(dce, 2, shareInfo)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareDelStart(dce, 'BETUSHARE\x00')
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrShareDelCommit(dce, resp['ContextHandle'])
|
|
resp.dump()
|
|
|
|
def test_NetrShareCheck(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareCheck()
|
|
request['ServerName'] = NULL
|
|
request['Device'] = 'C:\\\x00'
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrShareCheck(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrShareCheck(dce, 'C:\\\x00')
|
|
resp.dump()
|
|
|
|
def test_NetrServerGetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerGetInfo()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 100
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 101
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 102
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 103
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 502
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['Level'] = 503
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrServerGetInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrServerGetInfo(dce, 100)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerGetInfo(dce, 101)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerGetInfo(dce, 102)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerGetInfo(dce, 103)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerGetInfo(dce, 502)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerGetInfo(dce, 503)
|
|
resp.dump()
|
|
|
|
def test_NetrServerDiskEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerDiskEnum()
|
|
request['ServerName'] = NULL
|
|
request['ResumeHandle'] = NULL
|
|
request['Level'] = 0
|
|
request['DiskInfoStruct']['Buffer'] = NULL
|
|
request['PreferedMaximumLength'] = 0xffffffff
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrServerDiskEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrServerDiskEnum(dce, 0)
|
|
resp.dump()
|
|
|
|
def test_NetrServerStatisticsGet(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerStatisticsGet()
|
|
request['ServerName'] = NULL
|
|
request['Service'] = NULL
|
|
request['Level'] = 0
|
|
request['Options'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrServerStatisticsGet(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrServerStatisticsGet(dce, NULL, 0, 0)
|
|
resp.dump()
|
|
|
|
def test_NetrRemoteTOD(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrRemoteTOD()
|
|
request['ServerName'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrRemoteTOD(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrRemoteTOD(dce)
|
|
resp.dump()
|
|
|
|
def test_NetrServerTransportEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerTransportEnum()
|
|
request['ServerName'] = NULL
|
|
request['PreferedMaximumLength'] = 0xffffffff
|
|
request['ResumeHandle'] = NULL
|
|
request['InfoStruct']['Level'] = 0
|
|
request['InfoStruct']['XportInfo']['tag'] = 0
|
|
request['InfoStruct']['XportInfo']['Level0']['Buffer'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['Level'] = 1
|
|
request['InfoStruct']['XportInfo']['tag'] = 1
|
|
request['InfoStruct']['XportInfo']['Level1']['Buffer'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request['InfoStruct']['Level'] = 2
|
|
request['InfoStruct']['XportInfo']['tag'] = 2
|
|
request['InfoStruct']['XportInfo']['Level2']['Buffer'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrServerTransportEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrServerTransportEnum(dce, 0)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerTransportEnum(dce, 1)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerTransportEnum(dce, 2)
|
|
resp.dump()
|
|
|
|
def test_NetrpGetFileSecurity_NetrpSetFileSecurity(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrpGetFileSecurity()
|
|
request['ServerName'] = NULL
|
|
request['ShareName'] = 'C$\x00'
|
|
request['lpFileName'] = '\\Windows\x00'
|
|
request['RequestedInformation'] = OWNER_SECURITY_INFORMATION
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
req = srvs.NetrpSetFileSecurity()
|
|
req['ServerName'] = NULL
|
|
req['ShareName'] = 'C$\x00'
|
|
req['lpFileName'] = '\\Windows\x00'
|
|
req['SecurityInformation'] = OWNER_SECURITY_INFORMATION
|
|
req['SecurityDescriptor'] = resp['SecurityDescriptor']
|
|
resp = dce.request(req)
|
|
resp.dump()
|
|
|
|
def test_hNetrpGetFileSecurity_hNetrpSetFileSecurity(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetrpGetFileSecurity(dce, 'C$\x00', '\\Windows\x00', OWNER_SECURITY_INFORMATION)
|
|
|
|
resp = srvs.hNetrpSetFileSecurity(dce,'C$\x00', '\\Windows\x00', OWNER_SECURITY_INFORMATION, resp)
|
|
resp.dump()
|
|
|
|
def test_NetprPathType(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetprPathType()
|
|
request['ServerName'] = NULL
|
|
request['PathName'] = '\\pagefile.sys\x00'
|
|
request['Flags'] = 1
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetprPathType(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetprPathType(dce, '\\pagefile.sys\x00', 1)
|
|
resp.dump()
|
|
|
|
def test_NetprPathCanonicalize(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetprPathCanonicalize()
|
|
request['ServerName'] = NULL
|
|
request['PathName'] = '\\pagefile.sys\x00'
|
|
request['OutbufLen'] = 50
|
|
request['Prefix'] = 'c:\x00'
|
|
request['PathType'] = 0
|
|
request['Flags'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetprPathCanonicalize(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetprPathCanonicalize(dce, '\\pagefile.sys\x00', 'c:\x00', 50, 0, 0)
|
|
resp.dump()
|
|
|
|
def test_NetprPathCompare(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetprPathCompare()
|
|
request['ServerName'] = NULL
|
|
request['PathName1'] = 'c:\\pagefile.sys\x00'
|
|
request['PathName2'] = 'c:\\pagefile.sys\x00'
|
|
request['PathType'] = 0
|
|
request['Flags'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetprPathCompare(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetprPathCompare(dce, 'c:\\pagefile.sys\x00', 'c:\\pagefile.sys\x00')
|
|
resp.dump()
|
|
|
|
def test_NetprNameValidate(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetprNameValidate()
|
|
request['ServerName'] = NULL
|
|
request['Name'] = 'Administrator\x00'
|
|
request['NameType'] = srvs.NAMETYPE_USER
|
|
request['Flags'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetprNameValidate(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetprNameValidate(dce, 'Administrator\x00', srvs.NAMETYPE_USER)
|
|
resp.dump()
|
|
|
|
def test_NetprNameCanonicalize(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetprNameCanonicalize()
|
|
request['ServerName'] = NULL
|
|
request['Name'] = 'Administrator\x00'
|
|
request['OutbufLen'] = 50
|
|
request['NameType'] = srvs.NAMETYPE_USER
|
|
request['Flags'] = 0x80000000
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetprNameCanonicalize(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetprNameCanonicalize(dce, 'Administrator\x00', 50, srvs.NAMETYPE_USER, 0x80000000)
|
|
resp.dump()
|
|
|
|
def test_NetprNameCompare(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetprNameCompare()
|
|
request['ServerName'] = NULL
|
|
request['Name1'] = 'Administrator\x00'
|
|
request['Name2'] = 'Administrator\x00'
|
|
request['NameType'] = srvs.NAMETYPE_USER
|
|
request['Flags'] = 0x80000000
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetprNameCompare(self):
|
|
dce, rpc_transport = self.connect()
|
|
resp = srvs.hNetprNameCompare(dce, 'Administrator\x00', 'Administrator\x00', srvs.NAMETYPE_USER, 0x80000000)
|
|
resp.dump()
|
|
|
|
def test_NetrDfsGetVersion(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsGetVersion()
|
|
request['ServerName'] = NULL
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if e.get_error_code() != 0x2:
|
|
raise
|
|
|
|
def test_hNetrDfsGetVersion(self):
|
|
dce, rpc_transport = self.connect()
|
|
try:
|
|
resp = srvs.hNetrDfsGetVersion(dce)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if e.get_error_code() != 0x2:
|
|
raise
|
|
|
|
def test_NetrDfsModifyPrefix(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsModifyPrefix()
|
|
request['ServerName'] = NULL
|
|
request['Prefix'] = 'c:\\\x00'
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if e.get_error_code() != 0x32:
|
|
raise
|
|
|
|
def test_NetrDfsFixLocalVolume(self):
|
|
# This one I cannot make it work. It's only supported on w2k and xp
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsFixLocalVolume()
|
|
request['ServerName'] = NULL
|
|
request['VolumeName'] = r'\??\C:\DfsShare'
|
|
request['EntryType'] = srvs.PKT_ENTRY_TYPE_LEAFONLY
|
|
request['ServiceType'] = srvs.DFS_SERVICE_TYPE_LOCAL
|
|
request['StgId'] = 'NONE\x00'
|
|
request['EntryPrefix'] = 'c:\\\x00'
|
|
request['RelationInfo']['Buffer'] = NULL
|
|
request['CreateDisposition'] = srvs.FILE_SUPERSEDE
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCException as e:
|
|
if str(e) != 'rpc_x_bad_stub_data':
|
|
raise
|
|
|
|
def test_NetrDfsManagerReportSiteInfo(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsManagerReportSiteInfo()
|
|
request['ServerName'] = NULL
|
|
request['ppSiteInfo'] = NULL
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if str(e).find('ERROR_NOT_SUPPORTED') < 0:
|
|
raise
|
|
|
|
def test_NetrServerAliasAdd_NetrServerAliasDel(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerAliasAdd()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 0
|
|
request['InfoStruct']['tag'] = 0
|
|
request['InfoStruct']['ServerAliasInfo0']['srvai0_alias'] = 'BETOALIAS\x00'
|
|
request['InfoStruct']['ServerAliasInfo0']['srvai0_target'] = '%s\x00' % self.machine
|
|
request['InfoStruct']['ServerAliasInfo0']['srvai0_default'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrServerAliasDel()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 0
|
|
request['InfoStruct']['tag'] = 0
|
|
request['InfoStruct']['ServerAliasInfo0']['srvai0_alias'] = 'BETOALIAS\x00'
|
|
request['InfoStruct']['ServerAliasInfo0']['srvai0_target'] = '%s\x00' % self.machine
|
|
request['InfoStruct']['ServerAliasInfo0']['srvai0_default'] = 0
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def test_hNetrServerAliasAdd_hNetrServerAliasDel(self):
|
|
dce, rpc_transport = self.connect()
|
|
aliasInfo = srvs.SERVER_ALIAS_INFO_0()
|
|
aliasInfo['srvai0_alias'] = 'BETOALIAS\x00'
|
|
aliasInfo['srvai0_target'] = '%s\x00' % self.machine
|
|
aliasInfo['srvai0_default'] = 0
|
|
resp = srvs.hNetrServerAliasAdd(dce, 0, aliasInfo)
|
|
resp.dump()
|
|
|
|
resp = srvs.hNetrServerAliasDel(dce, 0, aliasInfo)
|
|
resp.dump()
|
|
|
|
def test_NetrServerAliasEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerAliasEnum()
|
|
request['ServerName'] = NULL
|
|
request['InfoStruct']['Level'] = 0
|
|
request['InfoStruct']['ServerAliasInfo']['tag'] = 0
|
|
request['InfoStruct']['ServerAliasInfo']['Level0']['Buffer'] = NULL
|
|
request['PreferedMaximumLength'] = 0xffffffff
|
|
request['ResumeHandle'] = NULL
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if str(e) != 'ERROR_NOT_SUPPORTED':
|
|
raise
|
|
|
|
def test_hNetrServerAliasEnum(self):
|
|
dce, rpc_transport = self.connect()
|
|
try:
|
|
resp = srvs.hNetrServerAliasEnum(dce, 0)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
print(e)
|
|
if str(e) != 'ERROR_NOT_SUPPORTED':
|
|
raise
|
|
|
|
def test_NetrShareDelEx(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrShareAdd()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 2
|
|
request['InfoStruct']['tag'] = 2
|
|
request['InfoStruct']['ShareInfo2']['shi2_netname'] = 'BETUSHARE\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_type'] = srvs.STYPE_TEMPORARY
|
|
request['InfoStruct']['ShareInfo2']['shi2_remark'] = 'My Remark\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_max_uses'] = 0xFFFFFFFF
|
|
request['InfoStruct']['ShareInfo2']['shi2_path'] = 'c:\\\x00'
|
|
request['InfoStruct']['ShareInfo2']['shi2_passwd'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
request = srvs.NetrShareDelEx()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 503
|
|
request['ShareInfo']['tag'] = 503
|
|
request['ShareInfo']['ShareInfo503']['shi503_netname'] ='BETUSHARE\x00'
|
|
request['ShareInfo']['ShareInfo503']['shi503_type'] = srvs.STYPE_TEMPORARY
|
|
request['ShareInfo']['ShareInfo503']['shi503_remark'] = 'My Remark\x00'
|
|
request['ShareInfo']['ShareInfo503']['shi503_permissions'] = 0
|
|
request['ShareInfo']['ShareInfo503']['shi503_max_uses'] = 0xFFFFFFFF
|
|
request['ShareInfo']['ShareInfo503']['shi503_current_uses'] = 0
|
|
request['ShareInfo']['ShareInfo503']['shi503_path'] = 'c:\\\x00'
|
|
request['ShareInfo']['ShareInfo503']['shi503_passwd'] = NULL
|
|
request['ShareInfo']['ShareInfo503']['shi503_servername'] = NULL
|
|
request['ShareInfo']['ShareInfo503']['shi503_reserved'] = 0
|
|
request['ShareInfo']['ShareInfo503']['shi503_security_descriptor'] = NULL
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
def ttt_NetrServerTransportAdd_NetrServerTransportDel(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerTransportAdd()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 0
|
|
request['Buffer']['svti0_numberofvcs'] = 0
|
|
request['Buffer']['svti0_transportname'] = '\\Device\\NetbiosSmb\x00'
|
|
request['Buffer']['svti0_transportaddress'] = list('%s' % self.machine)
|
|
request['Buffer']['svti0_transportaddresslength'] = len(request['Buffer']['svti0_transportaddress'])
|
|
request['Buffer']['svti0_networkaddress'] = '%s\x00' % self.machine
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
req = srvs.NetrServerTransportDel()
|
|
req['ServerName'] = NULL
|
|
req['Level'] = 0
|
|
req['Buffer'] = request['Buffer']
|
|
resp = dce.request(req)
|
|
resp.dump()
|
|
|
|
def ttt_NetrServerTransportAddEx_NetrServerTransportDelEx(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrServerTransportAddEx()
|
|
request['ServerName'] = NULL
|
|
request['Level'] = 0
|
|
request['Buffer']['tag'] = 0
|
|
request['Buffer']['Transport0']['svti0_numberofvcs'] = 0
|
|
request['Buffer']['Transport0']['svti0_transportname'] = '\\Device\\NetbiosSmb\x00'
|
|
request['Buffer']['Transport0']['svti0_transportaddress'] = list('%s' % self.machine)
|
|
request['Buffer']['Transport0']['svti0_transportaddresslength'] = len(request['Buffer']['Transport0']['svti0_transportaddress'])
|
|
request['Buffer']['Transport0']['svti0_networkaddress'] = '%s\x00' % self.machine
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
|
|
req = srvs.NetrServerTransportDelEx()
|
|
req['ServerName'] = NULL
|
|
req['Level'] = 0
|
|
req['Buffer']['tag'] = 0
|
|
req['Buffer']['Transport0'] = request['Buffer']['Transport0']
|
|
resp = dce.request(req)
|
|
resp.dump()
|
|
|
|
def test_NetrDfsCreateLocalPartition(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsCreateLocalPartition()
|
|
request['ServerName'] = NULL
|
|
request['ShareName'] = 'C$\x00'
|
|
#request['EntryUid'] = 0
|
|
request['EntryPrefix'] = 'c:\\\x00'
|
|
request['ShortName'] = 'c:\\betus\x00'
|
|
request['RelationInfo']['Buffer'] = NULL
|
|
request['Force'] = 0
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if str(e).find('ERROR_NOT_SUPPORTED') < 0:
|
|
raise
|
|
|
|
def test_NetrDfsDeleteLocalPartition(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsDeleteLocalPartition()
|
|
request['ServerName'] = NULL
|
|
request['Prefix'] = 'c:\\\x00'
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if str(e).find('ERROR_NOT_SUPPORTED') < 0:
|
|
raise
|
|
|
|
def test_NetrDfsSetLocalVolumeState(self):
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsSetLocalVolumeState()
|
|
request['ServerName'] = NULL
|
|
request['Prefix'] = 'c:\\\x00'
|
|
request['State'] = 0x80
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if str(e).find('ERROR_NOT_SUPPORTED') < 0:
|
|
raise
|
|
|
|
def test_NetrDfsCreateExitPoint(self):
|
|
# Cannot make it work, supported only on w2k and xp
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsCreateExitPoint()
|
|
request['ServerName'] = NULL
|
|
request['Prefix'] = 'c:\\\x00'
|
|
request['Type'] = srvs.PKT_ENTRY_TYPE_LEAFONLY
|
|
request['ShortPrefixLen'] = 50
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCException as e:
|
|
if str(e).find('rpc_x_bad_stub_data') < 0:
|
|
raise
|
|
|
|
def test_NetrDfsDeleteExitPoint(self):
|
|
# Cannot make it work, supported only on w2k and xp
|
|
dce, rpc_transport = self.connect()
|
|
request = srvs.NetrDfsDeleteExitPoint()
|
|
request['ServerName'] = NULL
|
|
request['Prefix'] = 'c:\\\x00'
|
|
request['Type'] = srvs.PKT_ENTRY_TYPE_LEAFONLY
|
|
try:
|
|
resp = dce.request(request)
|
|
resp.dump()
|
|
except srvs.DCERPCSessionError as e:
|
|
if str(e).find('ERROR_NOT_SUPPORTED') < 0:
|
|
raise
|
|
|
|
|
|
@pytest.mark.remote
|
|
class SRVSTestsSMBTransport(SRVSTests, unittest.TestCase):
|
|
transfer_syntax = DCERPCTests.TRANSFER_SYNTAX_NDR
|
|
|
|
|
|
@pytest.mark.remote
|
|
class SRVSTestsSMBTransport64(SRVSTests, unittest.TestCase):
|
|
transfer_syntax = DCERPCTests.TRANSFER_SYNTAX_NDR64
|
|
|
|
|
|
# Process command-line arguments.
|
|
if __name__ == "__main__":
|
|
unittest.main(verbosity=1)
|