windows-nt/Source/XPSP1/NT/net/wins/rpc/rpcbind.c

386 lines
6.6 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
dhcbind.c
Abstract:
Routines which use RPC to bind and unbind the client to the
WINS server service.
Author:
Pradeep Bahl (pradeepb) April-1993
Environment:
User Mode - Win32
Revision History:
--*/
#include "wins.h"
#include "winsif.h"
handle_t
WinsCommonBind(
PWINSINTF_BIND_DATA_T pBindData
)
/*++
Routine Description:
This routine is called from the WINS server service client stubs when
it is necessary create an RPC binding to the server end.
Arguments:
ServerIpAddress - The IP address of the server to bind to.
Return Value:
The binding handle is returned to the stub routine. If the bind is
unsuccessful, a NULL will be returned.
--*/
{
RPC_STATUS rpcStatus;
LPTSTR binding;
LPTSTR pProtSeq;
LPTSTR pOptions = (TCHAR *)NULL;
LPTSTR pServerAdd = (LPTSTR)pBindData->pServerAdd;
handle_t bhandle;
if (pBindData->fTcpIp)
{
if (lstrcmp((LPCTSTR)pBindData->pServerAdd, TEXT("127.0.0.1")) == 0)
{
pProtSeq = TEXT("ncalrpc");
pOptions = TEXT("Security=Impersonation Dynamic False");
pServerAdd = (TCHAR *)NULL;
}
else
{
pProtSeq = TEXT("ncacn_ip_tcp");
pServerAdd = (LPTSTR)pBindData->pServerAdd;
}
pBindData->pPipeName = NULL;
}
else
{
pProtSeq = TEXT("ncacn_np");
}
//
// Enter the critical section. This will be freed WINSIF_HANDLE_unbind().
//
//EnterCriticalSection(&WinsRpcCrtSec);
rpcStatus = RpcStringBindingCompose(
0,
pProtSeq,
pServerAdd,
pBindData->fTcpIp ? TEXT("") : (LPWSTR)pBindData->pPipeName,
pOptions,
&binding);
if ( rpcStatus != RPC_S_OK )
{
return( NULL );
}
rpcStatus = RpcBindingFromStringBinding( binding, &bhandle );
RpcStringFree(&binding);
if ( rpcStatus != RPC_S_OK )
{
return( NULL );
}
#if SECURITY > 0
rpcStatus = RpcBindingSetAuthInfo(
bhandle,
WINS_SERVER,
RPC_C_AUTHN_LEVEL_CONNECT,
RPC_C_AUTHN_WINNT,
NULL,
RPC_C_AUTHZ_NAME
);
if ( rpcStatus != RPC_S_OK )
{
return( NULL );
}
#endif
return bhandle;
}
handle_t
WinsABind(
PWINSINTF_BIND_DATA_T pBindData
)
{
WCHAR WcharString1[WINSINTF_MAX_NAME_SIZE];
WCHAR WcharString2[WINSINTF_MAX_NAME_SIZE];
DWORD NoOfChars;
WINSINTF_BIND_DATA_T BindData;
if (pBindData->pServerAdd != NULL)
{
NoOfChars = MultiByteToWideChar(CP_ACP, 0, pBindData->pServerAdd, -1,
WcharString1, WINSINTF_MAX_NAME_SIZE);
if (NoOfChars > 0)
{
BindData.pServerAdd = (LPSTR)WcharString1;
}
}
else
{
BindData.pServerAdd = (LPSTR)((TCHAR *)NULL);
}
if (!pBindData->fTcpIp)
{
BindData.fTcpIp = 0;
NoOfChars = MultiByteToWideChar(CP_ACP, 0,
pBindData->pPipeName, -1,
WcharString2, WINSINTF_MAX_NAME_SIZE);
if (NoOfChars > 0)
{
BindData.pPipeName = (LPSTR)WcharString2;
}
}
else
{
BindData.fTcpIp = 1;
}
return(WinsCommonBind(&BindData));
}
handle_t
WinsUBind(
PWINSINTF_BIND_DATA_T pBindData
)
{
return(WinsCommonBind(pBindData));
}
VOID
WinsUnbind(
PWINSINTF_BIND_DATA_T pBindData,
handle_t BindHandle
)
{
(VOID)RpcBindingFree(&BindHandle);
return;
}
handle_t
WINSIF_HANDLE_bind(
WINSIF_HANDLE ServerHdl
)
/*++
Routine Description:
This routine is called from the WINS server service client stubs when
it is necessary create an RPC binding to the server end.
Arguments:
ServerIpAddress - The IP address of the server to bind to.
Return Value:
The binding handle is returned to the stub routine. If the bind is
unsuccessful, a NULL will be returned.
--*/
{
return WinsCommonBind( ServerHdl );
}
void
WINSIF_HANDLE_unbind(
WINSIF_HANDLE ServerHdl,
handle_t BindHandle
)
/*++
Routine Description:
This routine is called from the DHCP server service client stubs
when it is necessary to unbind from the server end.
Arguments:
ServerIpAddress - This is the IP address of the server from which to unbind.
BindingHandle - This is the binding handle that is to be closed.
Return Value:
None.
--*/
{
WinsUnbind( ServerHdl, BindHandle );
}
handle_t
WINSIF2_HANDLE_bind(
WINSIF2_HANDLE ServerHdl
)
/*++
Routine Description:
This routine is called from the WINS server service client stubs when
it is necessary create an RPC binding to the server end.
Arguments:
ServerIpAddress - The IP address of the server to bind to.
Return Value:
The binding handle is returned to the stub routine. If the bind is
unsuccessful, a NULL will be returned.
--*/
{
return ((handle_t)ServerHdl);
}
void
WINSIF2_HANDLE_unbind(
WINSIF2_HANDLE ServerHdl,
handle_t BindHandle
)
/*++
Routine Description:
This routine is called from the DHCP server service client stubs
when it is necessary to unbind from the server end.
Arguments:
ServerIpAddress - This is the IP address of the server from which to unbind.
BindingHandle - This is the binding handle that is to be closed.
Return Value:
None.
--*/
{
UNREFERENCED_PARAMETER( ServerHdl );
UNREFERENCED_PARAMETER( BindHandle );
return;
}
//void __RPC_FAR * __RPC_API
LPVOID
midl_user_allocate(size_t cBytes)
{
LPVOID pMem;
pMem = (LPVOID)LocalAlloc(LMEM_FIXED, cBytes);
return(pMem);
}
//void __RPC_API
VOID
//midl_user_free(void __RPC_FAR *pMem)
midl_user_free(void *pMem)
{
if (pMem != NULL)
{
LocalFree((HLOCAL)pMem);
}
return;
}
LPVOID
WinsAllocMem(size_t cBytes)
{
return(midl_user_allocate(cBytes));
}
VOID
WinsFreeMem(LPVOID pMem)
{
midl_user_free(pMem);
}
DWORD
WinsGetBrowserNames_Old(
WINSIF2_HANDLE ServerHdl,
PWINSINTF_BROWSER_NAMES_T pNames
)
{
DWORD status;
RpcTryExcept {
status = R_WinsGetBrowserNames_Old(
ServerHdl,
pNames
);
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
status = RpcExceptionCode();
} RpcEndExcept
return status;
}
DWORD
WinsGetBrowserNames(
WINSIF_HANDLE ServerHdl,
PWINSINTF_BROWSER_NAMES_T pNames
)
{
DWORD status;
RpcTryExcept {
status = R_WinsGetBrowserNames(
ServerHdl,
pNames
);
} RpcExcept( I_RpcExceptionFilter(RpcExceptionCode()) ) {
status = RpcExceptionCode();
} RpcEndExcept
return status;
}