mirror of https://github.com/lianthony/NT4.0
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.
406 lines
10 KiB
406 lines
10 KiB
/*++
|
|
|
|
Copyright (c) 1992-1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
authtest.c
|
|
|
|
Abstract:
|
|
|
|
Tests the functionality and integrity of the authentication routines for
|
|
the supported message types.
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Revision History:
|
|
|
|
10-May-1996 DonRyan
|
|
Removed banner from Technology Dynamics, Inc.
|
|
|
|
--*/
|
|
|
|
//--------------------------- WINDOWS DEPENDENCIES --------------------------
|
|
|
|
//--------------------------- STANDARD DEPENDENCIES -- #include<xxxxx.h> ----
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
//--------------------------- MODULE DEPENDENCIES -- #include"xxxxx.h" ------
|
|
|
|
#include <snmp.h>
|
|
#include <snmputil.h>
|
|
|
|
#include "authapi.h"
|
|
#include "pduapi.h"
|
|
#include "auth1157.h"
|
|
|
|
//--------------------------- SELF-DEPENDENCY -- ONE #include"module.h" -----
|
|
|
|
//--------------------------- PUBLIC VARIABLES --(same as in module.h file)--
|
|
|
|
//--------------------------- PRIVATE CONSTANTS -----------------------------
|
|
|
|
//--------------------------- PRIVATE STRUCTS -------------------------------
|
|
|
|
//--------------------------- PRIVATE VARIABLES -----------------------------
|
|
|
|
//--------------------------- PRIVATE PROTOTYPES ----------------------------
|
|
|
|
//--------------------------- PRIVATE PROCEDURES ----------------------------
|
|
|
|
// to allow testing to proceed independent of extension agent functions
|
|
BOOL commauth(RFC1157Message *message)
|
|
{
|
|
(message);
|
|
return TRUE;
|
|
}
|
|
|
|
//--------------------------- PUBLIC PROCEDURES -----------------------------
|
|
|
|
// The program runs out of stack space if declared in main
|
|
BYTE pBuffer[1000];
|
|
|
|
int authtest()
|
|
|
|
{
|
|
UINT nLength;
|
|
SnmpMgmtCom message;
|
|
BYTE *pEncodeBuf;
|
|
UINT nEncodeLen;
|
|
UINT Type;
|
|
int status;
|
|
|
|
printf( "\n\nAUTH api testing\n" );
|
|
printf( "----------------\n\n\n" );
|
|
|
|
//
|
|
// Setup RFC 1157 message
|
|
//
|
|
pBuffer[0] = ASN_SEQUENCE;
|
|
pBuffer[1] = 0x29;
|
|
|
|
// Setup version
|
|
pBuffer[2] = ASN_INTEGER;
|
|
pBuffer[3] = 0x01;
|
|
pBuffer[4] = 0xff;
|
|
|
|
// Setup community
|
|
pBuffer[5] = ASN_OCTETSTRING;
|
|
pBuffer[6] = 0x06;
|
|
strcpy( &pBuffer[7], "public" );
|
|
|
|
// Setup fake PDU type
|
|
pBuffer[13] = 0x01; // fake
|
|
pBuffer[14] = 0x1c;
|
|
|
|
// Setup request-id
|
|
pBuffer[15] = ASN_INTEGER;
|
|
pBuffer[16] = 0x04;
|
|
pBuffer[17] = 0x05;
|
|
pBuffer[18] = 0xae;
|
|
pBuffer[19] = 0x56;
|
|
pBuffer[20] = 0x02;
|
|
|
|
// Setup error-status
|
|
pBuffer[21] = ASN_INTEGER;
|
|
pBuffer[22] = 0x01;
|
|
pBuffer[23] = 0x00;
|
|
|
|
// Setup error-index
|
|
pBuffer[24] = ASN_INTEGER;
|
|
pBuffer[25] = 0x01;
|
|
pBuffer[26] = 0x00;
|
|
|
|
// Setup variable bindings
|
|
pBuffer[27] = ASN_SEQUENCEOF;
|
|
pBuffer[28] = 0x0e;
|
|
|
|
// Setup first sequence
|
|
pBuffer[29] = ASN_SEQUENCE;
|
|
pBuffer[30] = 0x0c;
|
|
|
|
// Setup variable name
|
|
pBuffer[31] = ASN_OBJECTIDENTIFIER;
|
|
pBuffer[32] = 0x08;
|
|
pBuffer[33] = 0x2b;
|
|
pBuffer[34] = 0x06;
|
|
pBuffer[35] = 0x01;
|
|
pBuffer[36] = 0x02;
|
|
pBuffer[37] = 0x01;
|
|
pBuffer[38] = 0x01;
|
|
pBuffer[39] = 0x01;
|
|
pBuffer[40] = 0x00;
|
|
|
|
// Setup variable value
|
|
pBuffer[41] = ASN_NULL;
|
|
pBuffer[42] = 0x00;
|
|
|
|
// Setup for message processing
|
|
nLength = 43;
|
|
|
|
//
|
|
// Test for invalid messages
|
|
//
|
|
|
|
printf( "\nRFC 1157 testing\n\n" );
|
|
|
|
// Decode message with invalid version
|
|
status = SnmpSvcDecodeMessage( &Type, &message, pBuffer, nLength, FALSE );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Invalid version, recognized: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Did not recognize invalid version\n" );
|
|
}
|
|
|
|
// Fix the error and test for invalid PDU type
|
|
pBuffer[4] = 0x00;
|
|
status = SnmpSvcDecodeMessage( &Type, &message, pBuffer, nLength, FALSE );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Invalid PDU type, recognized: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Did not recognize invalid PDU type\n" );
|
|
}
|
|
|
|
// Fix the error and try again
|
|
pBuffer[13] = ASN_RFC1157_GETREQUEST;
|
|
status = SnmpSvcDecodeMessage( &Type, &message, pBuffer, nLength, FALSE );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Error while decoding: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Decode successful\n" );
|
|
}
|
|
|
|
//
|
|
// Test for invalid PDU on encode
|
|
//
|
|
message.pdu.pduType = 0x01;
|
|
status = SnmpSvcEncodeMessage( ASN_SEQUENCE, &message, &pEncodeBuf, &nEncodeLen );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Invalid PDU type, recognized: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Did not recognize invalid PDU type\n" );
|
|
}
|
|
|
|
// Fix error and try again
|
|
message.pdu.pduType = ASN_RFC1157_GETREQUEST;
|
|
#if 0
|
|
SnmpUtilMemFree( message.pdu.pduValue.pdu.varBinds.list );
|
|
#endif
|
|
SnmpUtilMemFree( pEncodeBuf );
|
|
status = SnmpSvcEncodeMessage( ASN_SEQUENCE, &message, &pEncodeBuf, &nEncodeLen );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Error while encoding: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Encode successful\n" );
|
|
}
|
|
|
|
// Compare two buffers
|
|
if ( strncmp(pBuffer, pEncodeBuf, nEncodeLen) )
|
|
{
|
|
printf( "\n Buffers DON'T match!!\n\n" );
|
|
}
|
|
else
|
|
{
|
|
printf( "\n Buffers match!!\n\n" );
|
|
}
|
|
|
|
// Free memory for testing security messages
|
|
SnmpUtilVarBindListFree( &message.pdu.pduValue.pdu.varBinds );
|
|
SnmpUtilMemFree( pEncodeBuf );
|
|
|
|
//
|
|
// Setup security message
|
|
//
|
|
pBuffer[0] = 0x01;
|
|
pBuffer[1] = 53;
|
|
|
|
// Setup privDst - Destination
|
|
pBuffer[2] = ASN_OBJECTIDENTIFIER;
|
|
pBuffer[3] = 3;
|
|
pBuffer[4] = 41;
|
|
pBuffer[5] = 0x01;
|
|
pBuffer[6] = 0x01;
|
|
|
|
// Setup privData - Stream of mgmt com message
|
|
pBuffer[7] = ASN_RFCxxxx_PRIVDATA;
|
|
pBuffer[8] = 46;
|
|
|
|
// Setup implicit sequence - auth mesg type
|
|
pBuffer[9] = ASN_RFCxxxx_SNMPAUTHMSG;
|
|
pBuffer[10] = 44;
|
|
|
|
// Setup authentication info - NULL string indicates no auth.
|
|
pBuffer[11] = ASN_OCTETSTRING;
|
|
pBuffer[12] = 0;
|
|
|
|
// Setup implicit sequence - snmp mgmt com type
|
|
pBuffer[13] = ASN_RFCxxxx_SNMPMGMTCOM;
|
|
pBuffer[14] = 40;
|
|
|
|
// Setup destination party
|
|
pBuffer[15] = ASN_OBJECTIDENTIFIER;
|
|
pBuffer[16] = 3;
|
|
pBuffer[17] = 41;
|
|
pBuffer[18] = 0x01;
|
|
pBuffer[19] = 0x01;
|
|
|
|
// Setup source party
|
|
pBuffer[20] = ASN_OBJECTIDENTIFIER;
|
|
pBuffer[21] = 3;
|
|
pBuffer[22] = 82;
|
|
pBuffer[23] = 0x02;
|
|
pBuffer[24] = 0x02;
|
|
|
|
// Setup PDU type
|
|
pBuffer[25] = ASN_RFC1157_GETREQUEST;
|
|
pBuffer[26] = 0x1c;
|
|
|
|
// Setup request-id
|
|
pBuffer[27] = ASN_INTEGER;
|
|
pBuffer[28] = 0x04;
|
|
pBuffer[29] = 0x05;
|
|
pBuffer[30] = 0xae;
|
|
pBuffer[31] = 0x56;
|
|
pBuffer[32] = 0x02;
|
|
|
|
// Setup error-status
|
|
pBuffer[33] = ASN_INTEGER;
|
|
pBuffer[34] = 0x01;
|
|
pBuffer[35] = 0x00;
|
|
|
|
// Setup error-index
|
|
pBuffer[36] = ASN_INTEGER;
|
|
pBuffer[37] = 0x01;
|
|
pBuffer[38] = 0x00;
|
|
|
|
// Setup variable bindings
|
|
pBuffer[39] = ASN_SEQUENCEOF;
|
|
pBuffer[40] = 0x0e;
|
|
|
|
// Setup first sequence
|
|
pBuffer[41] = ASN_SEQUENCE;
|
|
pBuffer[42] = 0x0c;
|
|
|
|
// Setup variable name
|
|
pBuffer[43] = ASN_OBJECTIDENTIFIER;
|
|
pBuffer[44] = 0x08;
|
|
pBuffer[45] = 0x2b;
|
|
pBuffer[46] = 0x06;
|
|
pBuffer[47] = 0x01;
|
|
pBuffer[48] = 0x02;
|
|
pBuffer[49] = 0x01;
|
|
pBuffer[50] = 0x01;
|
|
pBuffer[51] = 0x01;
|
|
pBuffer[52] = 0x00;
|
|
|
|
// Setup variable value
|
|
pBuffer[53] = ASN_NULL;
|
|
pBuffer[54] = 0x00;
|
|
|
|
// Setup for message processing
|
|
nLength = 55;
|
|
|
|
//
|
|
// Test authentication routines
|
|
//
|
|
|
|
printf( "\nAuthentication testing\n\n" );
|
|
|
|
// Test invalid message type
|
|
printf( " Decoding tests\n\n" );
|
|
|
|
status = SnmpSvcDecodeMessage( &Type, &message, pBuffer, nLength, FALSE );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Invalid message, recognized: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Decode successful, shouldn't be\n" );
|
|
}
|
|
|
|
// Decoding testing - fix invalid message and try again
|
|
pBuffer[0] = ASN_RFCxxxx_SNMPPRIVMSG;
|
|
status = SnmpSvcDecodeMessage( &Type, &message, pBuffer, nLength, FALSE );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Error while decoding: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Decode successful\n" );
|
|
}
|
|
|
|
printf( "\n Encoding tests\n\n" );
|
|
|
|
// test for invalid message type
|
|
|
|
SnmpUtilMemFree( pEncodeBuf );
|
|
status = SnmpSvcEncodeMessage( 0x01,
|
|
&message, &pEncodeBuf, &nEncodeLen );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Invalid message type, recognized: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Encode successful, shouldn't be\n" );
|
|
}
|
|
|
|
// Fix and try again
|
|
SnmpUtilMemFree( pEncodeBuf );
|
|
status = SnmpSvcEncodeMessage( ASN_RFCxxxx_SNMPMGMTCOM,
|
|
&message, &pEncodeBuf, &nEncodeLen );
|
|
if ( status == SNMPAPI_ERROR )
|
|
{
|
|
printf( " Error while encoding: %d\n", GetLastError() );
|
|
}
|
|
else
|
|
{
|
|
printf( " Encode successful\n" );
|
|
}
|
|
|
|
// Compare two buffers
|
|
if ( strncmp(pBuffer, pEncodeBuf, nEncodeLen) )
|
|
{
|
|
printf( "\n Buffers DON'T match!!\n\n" );
|
|
}
|
|
else
|
|
{
|
|
printf( "\n Buffers match!!\n\n" );
|
|
}
|
|
|
|
if ( SNMPAPI_ERROR == SnmpSvcReleaseMessage(&message) )
|
|
{
|
|
printf( "\nCould not release message\n" );
|
|
}
|
|
else
|
|
{
|
|
printf( "\nReleased message successfully\n" );
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//-------------------------------- END --------------------------------------
|
|
|