353 lines
8 KiB
C
353 lines
8 KiB
C
|
/********************************************************************/
|
|||
|
/** Microsoft LAN Manager **/
|
|||
|
/** Copyright(c) Microsoft Corp., 1990-1991 **/
|
|||
|
/********************************************************************/
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Filename:
|
|||
|
|
|||
|
USRPARMS.C
|
|||
|
|
|||
|
Description:
|
|||
|
|
|||
|
Contains code to get set and initialize the user_parms field.
|
|||
|
|
|||
|
The 49-byte user params structure is laid out as follows:
|
|||
|
|
|||
|
NOTE that the buffer is 48 byte + NULL byte.
|
|||
|
|
|||
|
+-+-------------------+-+------------------------+-+
|
|||
|
|m|Macintosh Pri Group|d|Dial-in CallBack Number |0|
|
|||
|
+-+-------------------+-+------------------------+-+
|
|||
|
| | |
|
|||
|
+---------------------+------ Signature +- NULL terminator
|
|||
|
|
|||
|
The routines were originally written for RAS 1.0 and deal only with
|
|||
|
multi-byte strings. For NT unicodification, wcstombs() and mbstowcs()
|
|||
|
have been used to convert string formats. Eventually these routines
|
|||
|
can be converted to be native Unicode.
|
|||
|
|
|||
|
History:
|
|||
|
20/3/91 Narendra Gidwani Created original version
|
|||
|
July 14 92 Janakiram Cherala Modified for NT
|
|||
|
May 13 93 Andy Herron Coexist with other apps using user parms
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include <windows.h>
|
|||
|
#include <string.h>
|
|||
|
#include <lm.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <rasman.h>
|
|||
|
#include <rasppp.h>
|
|||
|
#include "usrparms.h"
|
|||
|
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Initializes the user params buffer.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
UserParms - Pointer to a USER_PARMS structure which is initialized.
|
|||
|
After initializing, the UserParms structure would look
|
|||
|
like:
|
|||
|
|
|||
|
0 49
|
|||
|
+-+-------------------+-+------------------------+-+
|
|||
|
|m|: |d|1 |0|
|
|||
|
+-+-------------------+-+------------------------+-+
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
void InitUsrParams(
|
|||
|
USER_PARMS *pUserParms
|
|||
|
)
|
|||
|
{
|
|||
|
//
|
|||
|
// Null the whole structure and check for GP fault.
|
|||
|
//
|
|||
|
|
|||
|
memset(pUserParms, '\0', sizeof(USER_PARMS));
|
|||
|
|
|||
|
//
|
|||
|
// Initialize Macintosh fields
|
|||
|
//
|
|||
|
pUserParms->up_MACid = UP_CLIENT_MAC;
|
|||
|
|
|||
|
memset(pUserParms->up_PriGrp, ' ', UP_LEN_MAC);
|
|||
|
|
|||
|
pUserParms->up_PriGrp[0] = ':';
|
|||
|
pUserParms->up_MAC_Terminater = ' ';
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Initialize RAS fields
|
|||
|
//
|
|||
|
pUserParms->up_DIALid = UP_CLIENT_DIAL;
|
|||
|
pUserParms->up_CBNum[0] = 1;
|
|||
|
}
|
|||
|
|
|||
|
USHORT SetUsrParams(
|
|||
|
USHORT InfoType,
|
|||
|
LPWSTR InBuf,
|
|||
|
LPWSTR OutBuf
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Sets either dialin information or mac information into
|
|||
|
the user_parms field in the proper format.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
InfoType - An unsigned short representing the type of information
|
|||
|
to be set: UP_CLIENT_DIAL or UP_CLIENT_MAC.
|
|||
|
|
|||
|
InBuf - Pointer to string ie either call back number and permissions
|
|||
|
for dialin or primary group name for Macintosh.
|
|||
|
|
|||
|
OutBuf - Pointer to a USER_PARMS that has been initialized or is in
|
|||
|
the correct format. This is loaded with the information
|
|||
|
passed in InBuf.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
0 indicating success
|
|||
|
ERROR_BAD_FORMAT - failure.
|
|||
|
ERROR_INVALID_PARAMETER - failure
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
USHORT len;
|
|||
|
char Buffer[sizeof(USER_PARMS)];
|
|||
|
char uBuffer[sizeof(USER_PARMS)];
|
|||
|
USER_PARMS FAR * OutBufPtr;
|
|||
|
char FAR * InBufPtr = Buffer;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// convert the unicode string to multi byte for processing
|
|||
|
//
|
|||
|
wcstombs(Buffer, InBuf, sizeof(USER_PARMS));
|
|||
|
wcstombs(uBuffer, OutBuf, sizeof(USER_PARMS));
|
|||
|
|
|||
|
OutBufPtr = (USER_PARMS FAR *)uBuffer;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Validate InfoType
|
|||
|
//
|
|||
|
if (InfoType != UP_CLIENT_MAC && InfoType != UP_CLIENT_DIAL )
|
|||
|
{
|
|||
|
return( ERROR_INVALID_PARAMETER );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Make sure the field to be set is in the correct format
|
|||
|
//
|
|||
|
if (( OutBufPtr->up_MACid != UP_CLIENT_MAC ) ||
|
|||
|
( OutBufPtr->up_DIALid != UP_CLIENT_DIAL ) )
|
|||
|
{
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
len = (USHORT)strlen( InBufPtr );
|
|||
|
|
|||
|
switch ( InfoType )
|
|||
|
{
|
|||
|
case UP_CLIENT_MAC:
|
|||
|
|
|||
|
if ( len > UP_LEN_MAC )
|
|||
|
{
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Set the MAC information
|
|||
|
//
|
|||
|
if ( len > 0 )
|
|||
|
{
|
|||
|
strcpy( OutBufPtr->up_PriGrp, InBufPtr );
|
|||
|
}
|
|||
|
|
|||
|
OutBufPtr->up_PriGrp[len] = ':';
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
case UP_CLIENT_DIAL:
|
|||
|
|
|||
|
if ( len > UP_LEN_DIAL )
|
|||
|
{
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Set the dialin information
|
|||
|
//
|
|||
|
if ( len > 0 )
|
|||
|
{
|
|||
|
strcpy( OutBufPtr->up_CBNum, InBufPtr );
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
default:
|
|||
|
return( ERROR_INVALID_PARAMETER );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// convert multicode string to unicode
|
|||
|
//
|
|||
|
mbstowcs(OutBuf, uBuffer, sizeof(USER_PARMS));
|
|||
|
|
|||
|
|
|||
|
return( 0 );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
USHORT FAR APIENTRY
|
|||
|
MprGetUsrParams(
|
|||
|
USHORT InfoType,
|
|||
|
LPWSTR InBuf,
|
|||
|
LPWSTR OutBuf
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Extracts dialin or mac information from the user_parms
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
InfoType - An unsigned short representing the
|
|||
|
type of information to be extracted.
|
|||
|
UP_CLIENT_DIAL or UP_CLIENT_MAC.
|
|||
|
|
|||
|
InBuf - Pointer to a USER_PARMS that has been
|
|||
|
initialized or is in the correct format.
|
|||
|
and contains the information to be
|
|||
|
extracted. This should be NULL
|
|||
|
terminated.
|
|||
|
|
|||
|
OutBuf - Contains the extracted information.
|
|||
|
This buffer should be large enough to
|
|||
|
hold the information requested as well
|
|||
|
as a NULL terminater.
|
|||
|
|
|||
|
|
|||
|
Returns:
|
|||
|
0 on success
|
|||
|
ERROR_BAD_FORMAT - failure
|
|||
|
ERROR_INVALID_PARAMETER - failure
|
|||
|
--*/
|
|||
|
{
|
|||
|
USER_PARMS FAR * InBufPtr;
|
|||
|
USHORT len;
|
|||
|
char FAR * TerminaterPtr;
|
|||
|
char FAR * OutBufPtr;
|
|||
|
char Buffer[sizeof(USER_PARMS)];
|
|||
|
char uBuffer[sizeof(USER_PARMS)];
|
|||
|
|
|||
|
// convert string to mulitbyte before processing
|
|||
|
|
|||
|
wcstombs(Buffer, InBuf, sizeof(USER_PARMS));
|
|||
|
|
|||
|
InBufPtr = (USER_PARMS FAR *)Buffer;
|
|||
|
|
|||
|
// Validate InfoType
|
|||
|
//
|
|||
|
if ( InfoType != UP_CLIENT_MAC && InfoType != UP_CLIENT_DIAL )
|
|||
|
return( ERROR_INVALID_PARAMETER );
|
|||
|
|
|||
|
// First make sure the user parms field is at least the minimum length.
|
|||
|
//
|
|||
|
len = (USHORT)strlen( Buffer );
|
|||
|
|
|||
|
// 3 = 1 for MAC_Terminater + 1 for up_MACid + 1 for up_DIALid
|
|||
|
//
|
|||
|
|
|||
|
if ( len < ( UP_LEN_MAC + 3 ) )
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
|
|||
|
|
|||
|
// Check for correct signatures.
|
|||
|
//
|
|||
|
|
|||
|
if ( ( InBufPtr->up_MACid != UP_CLIENT_MAC) ||
|
|||
|
( InBufPtr->up_DIALid != UP_CLIENT_DIAL ))
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
|
|||
|
switch( InfoType ) {
|
|||
|
|
|||
|
case UP_CLIENT_MAC:
|
|||
|
|
|||
|
OutBufPtr = InBufPtr->up_PriGrp;
|
|||
|
|
|||
|
// Validate the information
|
|||
|
//
|
|||
|
if ( ( TerminaterPtr = strchr( OutBufPtr, ':')) == NULL)
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
|
|||
|
if ( ( len = (USHORT)( TerminaterPtr - OutBufPtr ) ) > UP_LEN_MAC)
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
|
|||
|
// Copy the data
|
|||
|
//
|
|||
|
strcpy( uBuffer, OutBufPtr);
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
case UP_CLIENT_DIAL:
|
|||
|
|
|||
|
|
|||
|
OutBufPtr = InBufPtr->up_CBNum;
|
|||
|
|
|||
|
len = (USHORT)strlen( OutBufPtr );
|
|||
|
|
|||
|
//
|
|||
|
// AndyHe... Peal off all trailing blanks
|
|||
|
//
|
|||
|
|
|||
|
while (len > 1 && *(OutBufPtr+len-1) == ' ')
|
|||
|
{
|
|||
|
*(OutBufPtr+len-1) = '\0';
|
|||
|
len--;
|
|||
|
}
|
|||
|
if ( len > UP_LEN_DIAL)
|
|||
|
return( ERROR_BAD_FORMAT );
|
|||
|
|
|||
|
if ( len > 0 )
|
|||
|
strcpy( uBuffer, OutBufPtr);
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
return( ERROR_INVALID_PARAMETER );
|
|||
|
}
|
|||
|
|
|||
|
// convert string to unicode before returning
|
|||
|
|
|||
|
mbstowcs(OutBuf, uBuffer, sizeof(USER_PARMS));
|
|||
|
|
|||
|
return( 0 );
|
|||
|
}
|