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 );
|
||
}
|