Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

173 lines
4.5 KiB

/********************************************************************/
/** Copyright(c) 1989 Microsoft Corporation. **/
/********************************************************************/
//***
//
// Filename: server.c
//
// Description: This module contains support routines for the server
// category API's for the AFP server service. These routines
// are called by the RPC runtime.
//
// History:
// December 15,1992. NarenG Created original version.
//
#include "afpsvcp.h"
//**
//
// Call: AfpAdminrServerGetInfo
//
// Returns: NO_ERROR
// ERROR_ACCESS_DENIED
// non-zero retunrs from AfpServerIOCtrlGetInfo
//
// Description: This routine communicates with the AFP FSD to implement
// the AfpAdminServerGetInfo function.
//
DWORD
AfpAdminrServerGetInfo(
IN AFP_SERVER_HANDLE hServer,
OUT PAFP_SERVER_INFO* ppAfpServerInfo
)
{
AFP_REQUEST_PACKET AfpSrp;
DWORD dwRetCode;
DWORD dwAccessStatus;
AFP_PRINT( ( "AFPSVC_server: Received GetInfo request\n"));
// Check if caller has access
//
if ( dwRetCode = AfpSecObjAccessCheck( AFPSVC_ALL_ACCESS, &dwAccessStatus)){
AfpLogEvent( AFPLOG_CANT_CHECK_ACCESS, 0, NULL,
dwRetCode, EVENTLOG_ERROR_TYPE );
return( ERROR_ACCESS_DENIED );
}
if ( dwAccessStatus )
return( ERROR_ACCESS_DENIED );
// Make IOCTL to get info
//
AfpSrp.dwRequestCode = OP_SERVER_GET_INFO;
AfpSrp.dwApiType = AFP_API_TYPE_GETINFO;
AfpSrp.Type.GetInfo.pInputBuf = NULL;
AfpSrp.Type.GetInfo.cbInputBufSize = 0;
dwRetCode = AfpServerIOCtrlGetInfo( &AfpSrp );
if ( dwRetCode != ERROR_MORE_DATA && dwRetCode != NO_ERROR )
return( dwRetCode );
*ppAfpServerInfo = (PAFP_SERVER_INFO)(AfpSrp.Type.GetInfo.pOutputBuf);
// Convert all offsets to pointers
//
AfpBufOffsetToPointer((LPBYTE)*ppAfpServerInfo,1,AFP_SERVER_STRUCT);
return( dwRetCode );
}
//**
//
// Call: AfpAdminrServerSetInfo
//
// Returns: NO_ERROR
// ERROR_ACCESS_DENIED
// non-zero retunrs from AfpServerIOCtrl
//
// Description: This routine communicates with the AFP FSD to implement
// the AfpAdminServerSetInfo function.
//
DWORD
AfpAdminrServerSetInfo(
IN AFP_SERVER_HANDLE hServer,
IN PAFP_SERVER_INFO pAfpServerInfo,
IN DWORD dwParmNum
)
{
AFP_REQUEST_PACKET AfpSrp;
PAFP_SERVER_INFO pAfpServerInfoSR;
DWORD cbAfpServerInfoSRSize;
DWORD dwRetCode;
DWORD dwAccessStatus;
LPWSTR lpwsServerName = NULL;
AFP_PRINT( ( "AFPSVC_server: Received SetInfo request\n"));
// Check if caller has access
//
if ( dwRetCode = AfpSecObjAccessCheck( AFPSVC_ALL_ACCESS, &dwAccessStatus)){
AfpLogEvent( AFPLOG_CANT_CHECK_ACCESS, 0, NULL,
dwRetCode, EVENTLOG_ERROR_TYPE );
return( ERROR_ACCESS_DENIED );
}
if ( dwAccessStatus )
return( ERROR_ACCESS_DENIED );
// Check to see if the client wants to set the server name as well
//
if ( dwParmNum & AFP_SERVER_PARMNUM_NAME ){
lpwsServerName = pAfpServerInfo->afpsrv_name;
pAfpServerInfo->afpsrv_name = NULL;
dwParmNum &= (~AFP_SERVER_PARMNUM_NAME);
}
// Make buffer self relative.
//
if ( dwRetCode = AfpBufMakeFSDRequest( (LPBYTE)pAfpServerInfo,
sizeof(SETINFOREQPKT),
AFP_SERVER_STRUCT,
(LPBYTE*)&pAfpServerInfoSR,
&cbAfpServerInfoSRSize ) )
return( dwRetCode );
// Make IOCTL to set info
//
AfpSrp.dwRequestCode = OP_SERVER_SET_INFO;
AfpSrp.dwApiType = AFP_API_TYPE_SETINFO;
AfpSrp.Type.SetInfo.pInputBuf = pAfpServerInfoSR;
AfpSrp.Type.SetInfo.cbInputBufSize = cbAfpServerInfoSRSize;
AfpSrp.Type.SetInfo.dwParmNum = dwParmNum;
dwRetCode = AfpServerIOCtrl( &AfpSrp );
if ( dwRetCode == NO_ERROR ) {
LPBYTE pServerInfo;
// If the client wants to set the servername as well
//
if ( lpwsServerName != NULL ) {
LocalFree( pAfpServerInfoSR );
// Make another self relative buffer with the server name.
//
pAfpServerInfo->afpsrv_name = lpwsServerName;
dwParmNum |= AFP_SERVER_PARMNUM_NAME;
if ( dwRetCode = AfpBufMakeFSDRequest(
(LPBYTE)pAfpServerInfo,
sizeof(SETINFOREQPKT),
AFP_SERVER_STRUCT,
(LPBYTE*)&pAfpServerInfoSR,
&cbAfpServerInfoSRSize ) )
return( dwRetCode );
}
pServerInfo = ((LPBYTE)pAfpServerInfoSR)+sizeof(SETINFOREQPKT);
dwRetCode = AfpRegServerSetInfo( (PAFP_SERVER_INFO)pServerInfo,
dwParmNum );
}
LocalFree( pAfpServerInfoSR );
return( dwRetCode );
}