⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readaddr.c

📁 read the network addresses from a named Directory Services object and display all parts of the addre
💻 C
字号:
/****************************************************************************
**	File:	READADDR.C
**
**	Desc:	Reads NetWork Address of given object
**
**
**		DISCLAIMER
**
**	Novell, Inc. makes no representations or warranties with respect to
**	any NetWare software, and specifically disclaims any express or
**	implied warranties of merchantability, title, or fitness for a
**	particular purpose.
**
**	Distribution of any NetWare software is forbidden without the
**	express written consent of Novell, Inc.  Further, Novell reserves
**	the right to discontinue distribution of any NetWare software.
**
**	Novell is not responsible for lost profits or revenue, loss of use
**	of the software, loss of data, costs of re-creating lost data, the
**	cost of any substitute equipment or program, or claims by any party
**	other than you.  Novell strongly recommends a backup be made before
**	any software is installed.   Technical support for this software
**	may be provided at the discretion of Novell.
**
**	Programmers:
**
**		Ini	Who								Firm
**		--- ----------------- ------------------------------------------------
**		CRG	Calvin Gaisford		Novell Developer Support.
**
**	History:
**
**		When		 Who What
**		-------- --- ---------------------------------------------------------
**		10-21-94 CRG First code.
*/



/***************************************************************************
**  Libraries Linked in for .exe
**
**  NWCALLS.LIB
**  NWLOCALE.LIB
**  NWNET.LIB
**
*/


/***************************************************************************
**  #defines
*/
#define FAILURE  0xFF
#define SUCCESS  0x00


/****************************************************************************
**	Include headers, macros, etc.
*/

	/*-----------------------------------------------------------------------
	**	ANSI
	*/
	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
  #include <conio.h>


	/*-----------------------------------------------------------------------
	**	NetWare
	*/
	#include <nwnet.h>
	#include <nwcalls.h>
	#include <nwlocale.h>

	/*-----------------------------------------------------------------------
	**	Program Global storage
	*/
	struct
	{
		NWDSContextHandle context;
	}gs;

	extern unsigned _stklen=8000;


/***************************************************************************
**	Function Prototypes
*/
void Proc(void);
NWDSCCODE ReadNetAddr(char *objectName);
void FatalError(int errorCode);
void InitDS(void);
int  UninitDS(void);


/***************************************************************************
**	Main Program
*/
void main(void)
{
	InitDS();
	Proc();
	UninitDS();
}


/***************************************************************************
**	This will prompt users for a login name.
**  It will then pass that name to ReadNetAddr.
*/
void Proc(void)
{
	NWDSCCODE			ccode;
	char					objectName[MAX_DN_CHARS];

	printf("Enter Object Name: ");
	gets(objectName);
	strcat(objectName,"\x0");

	ccode = ReadNetAddr(objectName);
	if(ccode)
	{
		printf("ReadNetAddr failed with error: %X\n",ccode);
		exit(0);
	}
}


/***************************************************************************
**	This reads the attribute "Network Address" for the object passed in.
*/
NWDSCCODE ReadNetAddr(char *objectName)
{
	NWDSCCODE					ccode;
	NWDS_ITERATION 		iterHandle=-1L;
	NWDS_BUFFER				*inBuf, *outBuf;
	NWCOUNT						totalAttrs, totalValues, x;
	NWSYNTAX_ID				syntaxID;
	uint32						attrValSize;
	char							attrname[MAX_DN_CHARS];
	void							*attrValue;

	ccode = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &inBuf);
	if(ccode <0)
	{
		printf("Error NWDSAllocBuf\n");
		goto ReadSurnameExit0;
	}

	ccode = NWDSAllocBuf(MAX_DN_CHARS, &outBuf);
	if(ccode <0)
	{
		printf("Error NWDSAllocBuf\n");
		goto ReadSurnameExit1;
	}

	ccode = NWDSInitBuf(gs.context,DSV_READ,inBuf);
	if(ccode <0)
	{
		printf("Error NWDSInitBuf\n");
		goto ReadSurnameExit2;
	}

	ccode = NWDSPutAttrName(gs.context,inBuf,"Network Address");  	/* We only want the  */
	if(ccode <0)                                   			/* attribute surname */
	{
		printf("Error NWDSPutAttrName\n");
		goto ReadSurnameExit2;
	}
	do
	{
		ccode = NWDSRead(gs.context,
					objectName,           /* name of Object to read (IN)    */
					DS_ATTRIBUTE_VALUES,	/* read name and value (IN)       */
					FALSE,								/* only attributes specified (IN) */
					inBuf,								/* buffer holding "surname" (IN)      */
					&iterHandle,					/* read until all values (OUT)    */
					outBuf);							/* where the values go to(OUT)    */
		if(ccode < 0)
		{
			printf("Error readAclValues:NWDSRead %X\n",ccode);
			goto ReadSurnameExit2;
		}
		ccode = NWDSGetAttrCount(gs.context, outBuf, &totalAttrs);
		if(ccode < 0)
		{
			printf("Error NWDSGetAttrCount\n");
			goto ReadSurnameExit2;
		}
		if((NWCOUNT)0 == totalAttrs)
		{
			goto ReadSurnameExit2;
		}
		else
		{
			ccode = NWDSGetAttrName(gs.context,
											outBuf,						/* values are in here (IN)     */
											attrname,					/* better be surname (OUT)         */
											&totalValues,     /* number of values (OUT)      */
											&syntaxID);				/* how to read the value (OUT) */

			if(syntaxID != SYN_NET_ADDRESS)    /* this is the syntax for surname */
			{
				printf("Error NWDSGetAttrName, bad syntax\n");
				goto ReadSurnameExit2;
			}
			if(ccode <0)
			{
				printf("Error NWDSGetAttrName\n");
				goto ReadSurnameExit2;
			}

			/*		This loop is here because objects can contain more than one
						NetWork address. */

			for(x=totalValues;x;x--)
			{
				ccode = NWDSComputeAttrValSize(gs.context,  /* context handle (IN)    */
											outBuf,                    /* buffer with info (IN)  */
											syntaxID,                  /* syntax ID (IN)         */
											&attrValSize);             /* size to allocate (OUT) */
				if (ccode)
				{
					printf("Error NWDSComputeAttrValSize %X",ccode);
					goto ReadSurnameExit2;
				}

				if (NULL == (attrValue = malloc((int)attrValSize)) )
				{
					printf("Error malloc acl\n");
					goto ReadSurnameExit2;
				}
				ccode = NWDSGetAttrVal(gs.context,					/* context handle (IN)   */
											outBuf,                   /* buffer with info (IN) */
											syntaxID,                 /* syntax ID (IN)        */
											attrValue);              /* value of attrib (OUT) */
				if(ccode <0)
				{
					printf("Error NWDSGetAttrVal\n");
					goto ReadSurnameExit2;
				}

				printf("Address Type: %lu\nAddress Length: %lu\nAddress :%02X%02X%02X%02X:%02X%02X%02X%02X%02X%02X\n", ((Net_Address_T *)attrValue)->addressType, ((Net_Address_T *)attrValue)->addressLength, ((Net_Address_T *)attrValue)->address[0],((Net_Address_T *)attrValue)->address[1],((Net_Address_T *)attrValue)->address[2],((Net_Address_T *)attrValue)->address[3],((Net_Address_T *)attrValue)->address[4],((Net_Address_T *)attrValue)->address[5],((Net_Address_T *)attrValue)->address[6],((Net_Address_T *)attrValue)->address[7],((Net_Address_T *)attrValue)->address[8],((Net_Address_T *)attrValue)->address[9]);

				free(attrValue);
			}
		}
	}
	while(iterHandle != NO_MORE_ITERATIONS);

ReadSurnameExit2:
	NWDSFreeBuf(inBuf);
ReadSurnameExit1:
	NWDSFreeBuf(outBuf);
ReadSurnameExit0:
	return (ccode);
}


/***************************************************************************
**	FatalError is the common exit point for errors.
*/
void FatalError(int errorCode)
{
		exit(errorCode);
}


/***************************************************************************
**	Establish context.  These are the standard initializations for DS calls
*/
void InitDS(void)
{
	NWDSCCODE dsCcode;
	LCONV			lconvInfo;

	dsCcode=NWCallsInit(NULL,NULL);
	if(dsCcode)	      /* initialize allowing to call nwcalls functions */
	{
		printf("FatalError during NWCallsInit %X\n",dsCcode);
		FatalError(FAILURE);
	}
	NWLlocaleconv(&lconvInfo);
	dsCcode = NWInitUnicodeTables(lconvInfo.country_id, lconvInfo.code_page);
	if(dsCcode)
	{
		printf("NWInitUnicodeTables() returned: %X\n", dsCcode);
		FatalError(FAILURE);
	}
	gs.context=NWDSCreateContext();
	if(gs.context)
	{
		printf("FatalError during NWDSCreateContext %X\n",gs.context);
		FatalError(FAILURE);
	}
}


/***************************************************************************
**	Release context and clean up.
*/
int UninitDS()
{
	NWDSCCODE dsCcode;

	dsCcode=NWDSFreeContext(gs.context);
	if(dsCcode)
	{
		printf("FatalError during NWDSFreeContext %X\n",dsCcode);
		FatalError (FAILURE);
	}
	dsCcode=NWFreeUnicodeTables();
	if(dsCcode)
	{
		printf("Error during NWFreeUnicodeTables()\n");
		FatalError (FAILURE);
	}
	return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -