Update of /cvsroot/pywin32/pywin32/win32/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31219/src
Modified Files:
win32security.i win32security_ds.cpp win32security_sspi.h
Log Message:
Add DsList* functions.
Index: win32security_ds.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/win32/src/win32security_ds.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** win32security_ds.cpp 24 May 2005 13:55:30 -0000 1.1
--- win32security_ds.cpp 31 May 2005 02:07:34 -0000 1.2
***************
*** 6,9 ****
--- 6,27 ----
#include "Lm.h" // for NetApiBufferFree, for some Ds functions.
+ // @object PyDS_NAME_RESULT_ITEM|A tuple representing a DS_NAME_RESULT_ITEM
+ // @tupleitem 0|int|status|
+ // @tupleitem 1|<o PyUnicode>|domain|
+ // @tupleitem 2|<o PyUnicode>|name|
+ static PyObject *PyObject_FromDS_NAME_RESULT(DS_NAME_RESULT *dsresult)
+ {
+ PyObject *ret = PyList_New(dsresult->cItems);
+ if (!ret) return NULL;
+ for (DWORD i=0;i<dsresult->cItems;i++) {
+ DS_NAME_RESULT_ITEM *pi = dsresult->rItems + i;
+ PyList_SET_ITEM(ret, i,
+ Py_BuildValue("iNN", pi->status,
+ PyWinObject_FromWCHAR(pi->pDomain),
+ PyWinObject_FromWCHAR(pi->pName)));
+ }
+ return ret;
+ }
+
// Directory service handle, yet another type of PyHANDLE
// @object PyDS_HANDLE|Directory service handle, returned by <om win32security.DsBind>
***************
*** 72,78 ****
if (!PyWinObject_AsHANDLE(obhandle, &dshandle))
return NULL;
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsUnBind)(&dshandle);
! Py_END_ALLOW_THREADS
if (err==NO_ERROR){
Py_INCREF(Py_None);
--- 90,96 ----
if (!PyWinObject_AsHANDLE(obhandle, &dshandle))
return NULL;
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsUnBind)(&dshandle);
! Py_END_ALLOW_THREADS
if (err==NO_ERROR){
Py_INCREF(Py_None);
***************
*** 188,196 ****
}
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsGetSpn)(ServiceType, ServiceClass, ServiceName,
InstancePort, cInstanceNames, (LPCWSTR *)InstanceNames,
InstancePorts, &cSpns, &Spns);
! Py_END_ALLOW_THREADS
if (err!=STATUS_SUCCESS)
PyWin_SetAPIError("DsGetSpn",err);
--- 206,214 ----
}
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsGetSpn)(ServiceType, ServiceClass, ServiceName,
InstancePort, cInstanceNames, (LPCWSTR *)InstanceNames,
InstancePorts, &cSpns, &Spns);
! Py_END_ALLOW_THREADS
if (err!=STATUS_SUCCESS)
PyWin_SetAPIError("DsGetSpn",err);
***************
*** 239,245 ****
if (!PyWinObject_AsWCHARArray(obspns, &spns, &spn_cnt))
goto done;
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsWriteAccountSpn)(dshandle, Operation, acct, spn_cnt, (LPCWSTR *)spns);
! Py_END_ALLOW_THREADS
if (err!=STATUS_SUCCESS)
PyWin_SetAPIError("DsWriteAccountSpn", err);
--- 257,263 ----
if (!PyWinObject_AsWCHARArray(obspns, &spns, &spn_cnt))
goto done;
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsWriteAccountSpn)(dshandle, Operation, acct, spn_cnt, (LPCWSTR *)spns);
! Py_END_ALLOW_THREADS
if (err!=STATUS_SUCCESS)
PyWin_SetAPIError("DsWriteAccountSpn", err);
***************
*** 256,260 ****
PyObject *PyDsGetDcName(PyObject *self, PyObject *args, PyObject *kw)
{
! static char *kw_items[]= {
"computerName","domainName","domainGUID","siteName", "flags", NULL,
};
--- 274,278 ----
PyObject *PyDsGetDcName(PyObject *self, PyObject *args, PyObject *kw)
{
! static char *kw_items[]= {
"computerName","domainName","domainGUID","siteName", "flags", NULL,
};
***************
*** 262,278 ****
CHECK_PFN(DsGetDcName);
PyObject *obServer = Py_None, *obDomain = Py_None, *obSiteName = Py_None;
! PyObject *obGUID = Py_None;
WCHAR *szServer = NULL, *szDomain = NULL, *szSiteName = NULL;
! GUID guidBuf, *pGUID = NULL;
PyObject *ret = NULL;
! DOMAIN_CONTROLLER_INFO *pdci = NULL;
! DWORD flags = 0;
DWORD err;
if (!PyArg_ParseTupleAndKeywords(args, kw, "|OOOOi:DsGetDcName", kw_items,
! &obServer,
! &obDomain,
! &obGUID,
! &obSiteName,
! &flags))
return NULL;
if (!PyWinObject_AsWCHAR(obServer, &szServer, TRUE))
--- 280,296 ----
CHECK_PFN(DsGetDcName);
PyObject *obServer = Py_None, *obDomain = Py_None, *obSiteName = Py_None;
! PyObject *obGUID = Py_None;
WCHAR *szServer = NULL, *szDomain = NULL, *szSiteName = NULL;
! GUID guidBuf, *pGUID = NULL;
PyObject *ret = NULL;
! DOMAIN_CONTROLLER_INFO *pdci = NULL;
! DWORD flags = 0;
DWORD err;
if (!PyArg_ParseTupleAndKeywords(args, kw, "|OOOOi:DsGetDcName", kw_items,
! &obServer,
! &obDomain,
! &obGUID,
! &obSiteName,
! &flags))
return NULL;
if (!PyWinObject_AsWCHAR(obServer, &szServer, TRUE))
***************
*** 282,309 ****
if (!PyWinObject_AsWCHAR(obSiteName, &szSiteName, TRUE))
goto done;
! if (obGUID != Py_None) {
! if (!PyWinObject_AsIID(obGUID, &guidBuf))
! goto done;
! pGUID = &guidBuf;
! }
! Py_BEGIN_ALLOW_THREADS
! err = (*pfnDsGetDcName)(szServer, szDomain, pGUID, szSiteName, flags, &pdci);
! Py_END_ALLOW_THREADS
if (err) {
PyWin_SetAPIError("DsGetDcName", err);
goto done;
}
! ret = Py_BuildValue("{s:N,s:N,s:i,s:N,s:N,s:N,s:i,s:N,s:N}",
! "DomainControllerName", PyWinObject_FromTCHAR(pdci->DomainControllerName),
! "DomainControllerAddress", PyWinObject_FromTCHAR(pdci->DomainControllerAddress),
! "DomainControllerAddressType", pdci->DomainControllerAddressType,
! "DomainGuid", PyWinObject_FromIID(pdci->DomainGuid),
! "DomainName", PyWinObject_FromTCHAR(pdci->DomainName),
! "DnsForestName", PyWinObject_FromTCHAR(pdci->DnsForestName),
! "Flags", pdci->Flags,
! "DcSiteName", PyWinObject_FromTCHAR(pdci->DcSiteName),
! "ClientSiteName", PyWinObject_FromTCHAR(pdci->ClientSiteName));
! // @rdesc The result is a dictionary with keys having the same name as the
! // Win32 DOMAIN_CONTROLLER_INFO struct.
done:
PyWinObject_FreeWCHAR(szServer);
--- 300,327 ----
if (!PyWinObject_AsWCHAR(obSiteName, &szSiteName, TRUE))
goto done;
! if (obGUID != Py_None) {
! if (!PyWinObject_AsIID(obGUID, &guidBuf))
! goto done;
! pGUID = &guidBuf;
! }
! Py_BEGIN_ALLOW_THREADS
! err = (*pfnDsGetDcName)(szServer, szDomain, pGUID, szSiteName, flags, &pdci);
! Py_END_ALLOW_THREADS
if (err) {
PyWin_SetAPIError("DsGetDcName", err);
goto done;
}
! ret = Py_BuildValue("{s:N,s:N,s:i,s:N,s:N,s:N,s:i,s:N,s:N}",
! "DomainControllerName", PyWinObject_FromTCHAR(pdci->DomainControllerName),
! "DomainControllerAddress", PyWinObject_FromTCHAR(pdci->DomainControllerAddress),
! "DomainControllerAddressType", pdci->DomainControllerAddressType,
! "DomainGuid", PyWinObject_FromIID(pdci->DomainGuid),
! "DomainName", PyWinObject_FromTCHAR(pdci->DomainName),
! "DnsForestName", PyWinObject_FromTCHAR(pdci->DnsForestName),
! "Flags", pdci->Flags,
! "DcSiteName", PyWinObject_FromTCHAR(pdci->DcSiteName),
! "ClientSiteName", PyWinObject_FromTCHAR(pdci->ClientSiteName));
! // @rdesc The result is a dictionary with keys having the same name as the
! // Win32 DOMAIN_CONTROLLER_INFO struct.
done:
PyWinObject_FreeWCHAR(szServer);
***************
*** 320,333 ****
DS_NAME_FLAGS flags;
DS_NAME_FORMAT formatOffered, formatDesired;
! PyObject *obNames;
PyObject *ret=NULL, *obhandle;
! LPWSTR *names;
! DWORD cnames;
! PDS_NAME_RESULT dsresult = NULL;
!
CHECK_PFN(DsCrackNames);
CHECK_PFN(DsFreeNameResult);
if (!PyArg_ParseTuple(args, "OlllO:DsCrackNames", &obhandle, &flags, &formatOffered,
! &formatDesired, &obNames))
return NULL;
if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
--- 338,351 ----
DS_NAME_FLAGS flags;
DS_NAME_FORMAT formatOffered, formatDesired;
! PyObject *obNames;
PyObject *ret=NULL, *obhandle;
! LPWSTR *names;
! DWORD cnames;
! PDS_NAME_RESULT dsresult = NULL;
!
CHECK_PFN(DsCrackNames);
CHECK_PFN(DsFreeNameResult);
if (!PyArg_ParseTuple(args, "OlllO:DsCrackNames", &obhandle, &flags, &formatOffered,
! &formatDesired, &obNames))
return NULL;
if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
***************
*** 335,358 ****
if (!PyWinObject_AsWCHARArray(obNames, &names, &cnames))
goto done;
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsCrackNames)(dshandle, flags, formatOffered, formatDesired, cnames, names, &dsresult);
! Py_END_ALLOW_THREADS
if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsWriteAccountSpn", err);
! else {
! ret = PyList_New(dsresult->cItems);
! if (!ret) goto done;
! for (DWORD i=0;i<dsresult->cItems;i++) {
! DS_NAME_RESULT_ITEM *pi = dsresult->rItems + i;
! PyList_SET_ITEM(ret, i,
! Py_BuildValue("iNN", pi->status,
! PyWinObject_FromWCHAR(pi->pDomain),
! PyWinObject_FromWCHAR(pi->pName)));
! }
! }
done:
PyWinObject_FreeWCHARArray(names, cnames);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
return ret;
}
--- 353,554 ----
if (!PyWinObject_AsWCHARArray(obNames, &names, &cnames))
goto done;
! Py_BEGIN_ALLOW_THREADS
err=(*pfnDsCrackNames)(dshandle, flags, formatOffered, formatDesired, cnames, names, &dsresult);
! Py_END_ALLOW_THREADS
if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsCrackNames", err);
! else
! ret = PyObject_FromDS_NAME_RESULT(dsresult);
done:
PyWinObject_FreeWCHARArray(names, cnames);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
! return ret;
! }
!
! PyObject *PyDsListInfoForServer(PyObject *self, PyObject *args)
! {
! DWORD err;
! HANDLE dshandle;
! PyObject *obName;
! PyObject *ret=NULL, *obhandle;
! PDS_NAME_RESULT dsresult = NULL;
! WCHAR *name = NULL;
!
! CHECK_PFN(DsListInfoForServer);
! CHECK_PFN(DsFreeNameResult);
! // @pyparm int|hds||
! // @pyparm <o PyUnicode>|server||
! if (!PyArg_ParseTuple(args, "OO:DsListInfoForServer", &obhandle, &obName))
! return NULL;
! if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
! return NULL;
! if (!PyWinObject_AsWCHAR(obName, &name))
! goto done;
! Py_BEGIN_ALLOW_THREADS
! err=(*pfnDsListInfoForServer)(dshandle, name, &dsresult);
! Py_END_ALLOW_THREADS
! if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsListInfoForServer", err);
! else
! ret = PyObject_FromDS_NAME_RESULT(dsresult);
! done:
! PyWinObject_FreeWCHAR(name);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
! return ret;
! }
!
! PyObject *PyDsListServersForDomainInSite(PyObject *self, PyObject *args)
! {
! DWORD err;
! HANDLE dshandle;
! PyObject *obName, *obSite;
! PyObject *ret=NULL, *obhandle;
! PDS_NAME_RESULT dsresult = NULL;
! WCHAR *name = NULL, *site = NULL;
!
! CHECK_PFN(DsListServersForDomainInSite);
! CHECK_PFN(DsFreeNameResult);
! // @pyparm int|hds||
! // @pyparm <o PyUnicode>|sute||
! if (!PyArg_ParseTuple(args, "OOO:DsListServersForDomainInSite", &obhandle, &obName, &obSite))
! return NULL;
! if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
! return NULL;
! if (!PyWinObject_AsWCHAR(obName, &name))
! goto done;
! if (!PyWinObject_AsWCHAR(obSite, &site))
! goto done;
! Py_BEGIN_ALLOW_THREADS
! err=(*pfnDsListServersForDomainInSite)(dshandle, name, site, &dsresult);
! Py_END_ALLOW_THREADS
! if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsListServersForDomainInSite", err);
! else
! ret = PyObject_FromDS_NAME_RESULT(dsresult);
! done:
! PyWinObject_FreeWCHAR(name);
! PyWinObject_FreeWCHAR(site);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
! return ret;
! }
!
! PyObject *PyDsListServersInSite(PyObject *self, PyObject *args)
! {
! DWORD err;
! HANDLE dshandle;
! PyObject *obName;
! PyObject *ret=NULL, *obhandle;
! PDS_NAME_RESULT dsresult = NULL;
! WCHAR *name = NULL;
!
! CHECK_PFN(DsListServersInSite);
! CHECK_PFN(DsFreeNameResult);
! // @pyparm int|hds||
! // @pyparm <o PyUnicode>|sute||
! if (!PyArg_ParseTuple(args, "OO:DsListServersInSite", &obhandle, &obName))
! return NULL;
! if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
! return NULL;
! if (!PyWinObject_AsWCHAR(obName, &name))
! goto done;
! Py_BEGIN_ALLOW_THREADS
! err=(*pfnDsListServersInSite)(dshandle, name, &dsresult);
! Py_END_ALLOW_THREADS
! if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsListServersInSite", err);
! else
! ret = PyObject_FromDS_NAME_RESULT(dsresult);
! done:
! PyWinObject_FreeWCHAR(name);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
! return ret;
! }
!
! PyObject *PyDsListSites(PyObject *self, PyObject *args)
! {
! DWORD err;
! HANDLE dshandle;
! PyObject *ret=NULL, *obhandle;
! PDS_NAME_RESULT dsresult = NULL;
!
! CHECK_PFN(DsListSites);
! CHECK_PFN(DsFreeNameResult);
! // @pyparm int|hds||
! if (!PyArg_ParseTuple(args, "O:DsListSites", &obhandle))
! return NULL;
! if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
! return NULL;
! Py_BEGIN_ALLOW_THREADS
! err=(*pfnDsListSites)(dshandle, &dsresult);
! Py_END_ALLOW_THREADS
! if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsListSites", err);
! else
! ret = PyObject_FromDS_NAME_RESULT(dsresult);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
! return ret;
! }
!
! PyObject *PyDsListRoles(PyObject *self, PyObject *args)
! {
! DWORD err;
! HANDLE dshandle;
! PyObject *ret=NULL, *obhandle;
! PDS_NAME_RESULT dsresult = NULL;
!
! CHECK_PFN(DsListRoles);
! CHECK_PFN(DsFreeNameResult);
! // @pyparm int|hds||
! if (!PyArg_ParseTuple(args, "O:DsListRoles", &obhandle))
! return NULL;
! if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
! return NULL;
! Py_BEGIN_ALLOW_THREADS
! err=(*pfnDsListRoles)(dshandle, &dsresult);
! Py_END_ALLOW_THREADS
! if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsListRoles", err);
! else
! ret = PyObject_FromDS_NAME_RESULT(dsresult);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
! return ret;
! }
!
! PyObject *PyDsListDomainsInSite(PyObject *self, PyObject *args)
! {
! DWORD err;
! HANDLE dshandle;
! PyObject *obName;
! PyObject *ret=NULL, *obhandle;
! PDS_NAME_RESULT dsresult = NULL;
! WCHAR *name = NULL;
!
! CHECK_PFN(DsListDomainsInSite);
! CHECK_PFN(DsFreeNameResult);
! // @pyparm int|hds||
! // @pyparm <o PyUnicode>|site||
! if (!PyArg_ParseTuple(args, "OO:DsListDomainsInSite", &obhandle, &obName))
! return NULL;
! if (!PyWinObject_AsHANDLE(obhandle, &dshandle, TRUE))
! return NULL;
! if (!PyWinObject_AsWCHAR(obName, &name))
! goto done;
! Py_BEGIN_ALLOW_THREADS
! err=(*pfnDsListDomainsInSite)(dshandle, name, &dsresult);
! Py_END_ALLOW_THREADS
! if (err!=STATUS_SUCCESS || !dsresult)
! PyWin_SetAPIError("DsListDomainsInSite", err);
! else
! ret = PyObject_FromDS_NAME_RESULT(dsresult);
! done:
! PyWinObject_FreeWCHAR(name);
! if (dsresult)
! (*pfnDsFreeNameResult)(dsresult);
return ret;
}
Index: win32security_sspi.h
===================================================================
RCS file: /cvsroot/pywin32/pywin32/win32/src/win32security_sspi.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** win32security_sspi.h 24 May 2005 13:55:30 -0000 1.3
--- win32security_sspi.h 31 May 2005 02:07:34 -0000 1.4
***************
*** 186,189 ****
--- 186,207 ----
extern DsCrackNamesfunc pfnDsCrackNames;
+ typedef DWORD (WINAPI *DsListInfoForServerfunc)(HANDLE, LPTSTR, PDS_NAME_RESULT *);
+ extern DsListInfoForServerfunc pfnDsListInfoForServer;
+
+ typedef DWORD (WINAPI *DsListServersInSitefunc)(HANDLE, LPTSTR, PDS_NAME_RESULT *);
+ extern DsListServersInSitefunc pfnDsListServersInSite;
+
+ typedef DWORD (WINAPI *DsListDomainsInSitefunc)(HANDLE, LPTSTR, PDS_NAME_RESULT *);
+ extern DsListDomainsInSitefunc pfnDsListDomainsInSite;
+
+ typedef DWORD (WINAPI *DsListServersForDomainInSitefunc)(HANDLE, LPTSTR, LPTSTR, PDS_NAME_RESULT *);
+ extern DsListServersForDomainInSitefunc pfnDsListServersForDomainInSite;
+
+ typedef DWORD (WINAPI *DsListSitesfunc)(HANDLE, PDS_NAME_RESULT *);
+ extern DsListSitesfunc pfnDsListSites;
+
+ typedef DWORD (WINAPI *DsListRolesfunc)(HANDLE, PDS_NAME_RESULT *);
+ extern DsListRolesfunc pfnDsListRoles;
+
typedef VOID (WINAPI *DsFreeNameResultfunc)(DS_NAME_RESULTW *);
extern DsFreeNameResultfunc pfnDsFreeNameResult;
Index: win32security.i
===================================================================
RCS file: /cvsroot/pywin32/pywin32/win32/src/win32security.i,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** win32security.i 27 May 2005 07:14:05 -0000 1.26
--- win32security.i 31 May 2005 02:07:34 -0000 1.27
***************
*** 80,84 ****
static TranslateNamefunc pfnTranslateName=NULL;
! // function pointers used in win32security_sspi.cpp
extern DsBindfunc pfnDsBind=NULL;
extern DsUnBindfunc pfnDsUnBind=NULL;
--- 80,84 ----
static TranslateNamefunc pfnTranslateName=NULL;
! // function pointers used in win32security_sspi.cpp and win32security_ds.cpp
extern DsBindfunc pfnDsBind=NULL;
extern DsUnBindfunc pfnDsUnBind=NULL;
***************
*** 88,91 ****
--- 88,97 ----
extern DsGetDcNamefunc pfnDsGetDcName=NULL;
extern DsCrackNamesfunc pfnDsCrackNames=NULL;
+ extern DsListInfoForServerfunc pfnDsListInfoForServer=NULL;
+ extern DsListServersForDomainInSitefunc pfnDsListServersForDomainInSite=NULL;
+ extern DsListServersInSitefunc pfnDsListServersInSite=NULL;
+ extern DsListSitesfunc pfnDsListSites=NULL;
+ extern DsListDomainsInSitefunc pfnDsListDomainsInSite=NULL;
+ extern DsListRolesfunc pfnDsListRoles=NULL;
extern DsFreeNameResultfunc pfnDsFreeNameResult=NULL;
***************
*** 651,654 ****
--- 657,667 ----
pfnDsFreeSpnArray=(DsFreeSpnArrayfunc)loadapifunc("DsFreeSpnArrayW", ntdsapi_dll);
pfnDsCrackNames=(DsCrackNamesfunc)loadapifunc("DsCrackNamesW", ntdsapi_dll);
+ pfnDsListInfoForServer=(DsListInfoForServerfunc)loadapifunc("DsListInfoForServerW", ntdsapi_dll);
+ pfnDsListDomainsInSite=(DsListDomainsInSitefunc)loadapifunc("DsListDomainsInSiteW", ntdsapi_dll);
+ pfnDsListServersForDomainInSite=(DsListServersForDomainInSitefunc)loadapifunc("DsListServersForDomainInSiteW", ntdsapi_dll);
+ pfnDsListServersInSite=(DsListServersInSitefunc)loadapifunc("DsListServersInSiteW", ntdsapi_dll);
+ pfnDsListSites=(DsListSitesfunc)loadapifunc("DsListSitesW", ntdsapi_dll);
+ pfnDsListRoles=(DsListRolesfunc)loadapifunc("DsListRolesW", ntdsapi_dll);
+
pfnDsFreeNameResult=(DsFreeNameResultfunc)loadapifunc("DsFreeNameResultW", ntdsapi_dll);
pfnDsGetDcName=(DsGetDcNamefunc)loadapifunc("DsGetDcNameW", netapi32_dll);
***************
*** 709,717 ****
%native (DsCrackNames) extern PyObject *PyDsCrackNames(PyObject *self, PyObject *args);
// @pyswig [ (status, domain, name) ]|DsCrackNames|Converts an array of directory service object names from one format to another.
! // @pyswig int|flags||
// @pyparm int|formatOffered||
// @pyparm int|formatDesired||
// @pyparm [name, ...]|names||
// @pyswig PyACL|ACL|Creates a new <o PyACL> object.
// @pyparm int|bufSize|64|The size of the buffer for the ACL.
--- 722,759 ----
%native (DsCrackNames) extern PyObject *PyDsCrackNames(PyObject *self, PyObject *args);
// @pyswig [ (status, domain, name) ]|DsCrackNames|Converts an array of directory service object names from one format to another.
! // @pyparm int|hds||
! // @pyparm int|flags||
// @pyparm int|formatOffered||
// @pyparm int|formatDesired||
// @pyparm [name, ...]|names||
+ %native (DsListInfoForServer) extern PyObject *PyDsListInfoForServer(PyObject *self, PyObject *args);
+ // @pyswig [ <o PyDS_NAME_RESULT>, ...]|DsListInfoForServer|Lists miscellaneous information for a server.
+ // @pyparm int|hds||
+ // @pyparm <o PyUnicode>|server||
+
+ %native (DsListServersInSite) extern PyObject *PyDsListServersInSite(PyObject *self, PyObject *args);
+ // @pyswig [ <o PyDS_NAME_RESULT_ITEM>, ...]|DsListServersInSite|
+ // @pyparm int|hds||
+ // @pyparm <o PyUnicode>|site||
+
+ %native (DsListServersForDomainInSite) extern PyObject *PyDsListServersForDomainInSite(PyObject *self, PyObject *args);
+ // @pyswig [ <o PyDS_NAME_RESULT_ITEM>, ...]|DsListServersInSite|
+ // @pyparm int|hds||
+ // @pyparm <o PyUnicode>|domain||
+ // @pyparm <o PyUnicode>|site||
+
+ %native (DsListSites) extern PyObject *PyDsListSites(PyObject *self, PyObject *args);
+ // @pyswig [ <o PyDS_NAME_RESULT_ITEM>, ...]|DsListServersInSite|
+ // @pyparm int|hds||
+
+ %native (DsListRoles) extern PyObject *PyDsListRoles(PyObject *self, PyObject *args);
+ // @pyswig [ <o PyDS_NAME_RESULT_ITEM>, ...]|DsListRoles|
+ // @pyparm int|hds||
+
+ %native (DsListDomainsInSite) extern PyObject *PyDsListDomainsInSite(PyObject *self, PyObject *args);
+ // @pyswig [ <o PyDS_NAME_RESULT_ITEM>, ...]|DsListDomainsInSite|
+ // @pyparm int|hds||
+
// @pyswig PyACL|ACL|Creates a new <o PyACL> object.
// @pyparm int|bufSize|64|The size of the buffer for the ACL.
|