home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Support Encyclopedia 96-1
/
novell-nsepro-1996-1-cd2.iso
/
download
/
netware
/
dbsamp.exe
/
DBUSNAP
/
DBUSNAP.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-13
|
17KB
|
591 lines
/****************************************************************************
** File: DBUSNAP.C
**
** Desc: This snapin adds a page to the user dialog in NWAdmin to allow for
** editing the host Database Server Attribute.
**
**
** 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
** -------- --- ---------------------------------------------------------
** 1-04-95 CRG Modification of this code for distibution. Much of this
** code was taken from the snapin example that comes from
** the Novell SDK. In fact, I just copied and pasted a lot
** of the code that is the same for all snapin modules.
*/
/***************************************************************************
** Libraries Linked in for .exe
**
** NWCALLS.LIB
** NWLOCALE.LIB
** NWNET.LIB
** SNAPIN.LIB
**
*/
/****************************************************************************
** Include headers
*/
/*-----------------------------------------------------------------------
** WINDOWS
*/
#include <windows.h>
#include <toolhelp.h>
#include <string.h>
#include <stdio.h>
/*-----------------------------------------------------------------------
** NetWare
*/
#include <nwnet.h>
#include <nwsnapin.h>
/*-----------------------------------------------------------------------
** Program
*/
#include "dbusnap.h"
/***************************************************************************
** Function Prototypes
*/
#ifdef __cplusplus
extern "C"
{
#endif
N_EXTERN_LIBRARY( NWRCODE )
SnapinUserProc(pnstr8 name, nuint16 msg, nparam p1, nparam p2);
BOOL _export FAR PASCAL UserDatabaseDlg(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);
N_EXTERN_LIBRARY( nuint32 )
FNWFlatBrowserLaunchProc( nuint32 userParam, nuint16 uMsg,
nparam param1, nparam param2 );
int ModifyUserObjectData(char *name);
int ReadUserObjectData(char *name);
#ifdef __cplusplus
}
#endif
#define NUM_USER_PAGES 1
/***************************************************************************
** Globals Used in code
*/
NWAPageStruct userPages[NUM_USER_PAGES];
HINSTANCE hDLL;
HINSTANCE hCtrlDLL;
static dbNameDefined = 0;
static bChangeDBName = 0;
static char dbName[MAX_DN_CHARS];
static char dbNameChange[MAX_DN_CHARS];
static char uName[MAX_DN_CHARS];
/*-------------------------------------------------------------------------*/
/* DLL Entry Point */
/*-------------------------------------------------------------------------*/
int FAR PASCAL LibMain (HINSTANCE hInstance, WORD wDataSeg,
WORD cbHeapSize, LPSTR lpCmdLine)
{
hDLL = hInstance;
if(cbHeapSize != 0)
UnlockData (0);
return 1;
};
/*-------------------------------------------------------------------------*/
/* Function : InitSnapin(void) */
/* Description : */
/* Every Snapin DLL must provide this function. In this function, */
/* snapin menu items (under Tools) are registered. Also, object procs */
/* are registered. */
/* */
/*-------------------------------------------------------------------------*/
int _export FAR PASCAL InitSnapin()
{
NWARegisterObjectProc(NWA_DS_OBJECT_TYPE,
"User",
"Novell, Inc. (C) All rights reserved.",
hDLL,
(NWASnapinObjectProc) SnapinUserProc,
NWA_SNAPIN_VERSION);
return NWA_RET_SUCCESS;
}
/*-------------------------------------------------------------------------*/
/* Function : SnapinUserProc() */
/* Description : */
/* Add on User Snapin Page */
/*-------------------------------------------------------------------------*/
N_GLOBAL_LIBRARY( NWRCODE ) _export
SnapinUserProc(pnstr8 name, nuint16 msg, nparam p1, nparam p2)
{
switch(msg)
{
case NWA_MSG_INITSNAPIN:
{
/*-------------------------------------------------*/
/* initialize pages */
/*-------------------------------------------------*/
userPages[0].dlgProc = UserDatabaseDlg;
userPages[0].resName = "USER_DATABASE";
userPages[0].pageTitle = "User Database";
return NWA_RET_SUCCESS;
}
case NWA_MSG_GETPAGECOUNT:
{
/*-----------------------------*/
/* Initialize User Database Data */
/*-----------------------------*/
lstrcpy(uName, name);
dbName[0]='\0';
dbNameChange[0]='\0';
ReadUserObjectData(uName);
return NUM_USER_PAGES;
}
case NWA_MSG_REGISTERPAGE:
{
NWAPageStruct *pageInfo = (NWAPageStruct *)p2;
pageInfo->dlgProc = userPages[p1].dlgProc;
pageInfo->resName = userPages[p1].resName;
pageInfo->pageTitle = userPages[p1].pageTitle;
pageInfo->hDLL = hDLL;
pageInfo->initParam = 0;
return NWA_RET_SUCCESS;
}
case NWA_MSG_MODIFY:
{
ModifyUserObjectData(uName);
return NWA_RET_SUCCESS;
}
case NWA_MSG_RENAME:
{
return NWA_RET_DODEFAULT;
}
case NWA_MSG_QUERYDELETE:
{
return TRUE;
}
case NWA_MSG_CLOSESNAPIN:
{
return NWA_RET_SUCCESS;
}
default:
break;
}
return NWA_RET_SUCCESS;
}
/*-------------------------------------------------------------------------*/
/* Function : UserDatabaseDlg */
/* Description : */
/* Add on User Database Page Dialog */
/*-------------------------------------------------------------------------*/
BOOL _export FAR PASCAL UserDatabaseDlg(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
NWDSContextHandle context;
int err=0;
char contextStr[256];
switch(message)
{
case WM_INITDIALOG:
{
SetDlgItemText(hwnd, DEFAULT_DATABASE_NAME, dbName);
bChangeDBName=0;
return TRUE;
}
case NWA_WM_F1HELP:
{
MessageBox(NULL, "Description:\n\tA text field to hold a\n\tdescription of the Server.\nHost NetWare Server:\n\tHolds the distinguished\n\tname (DN)of the NetWare\n\tServer the Database is\n\tloaded on.", "Database Server Help", MB_OK);
return TRUE;
}
case WM_COMMAND:
switch (wParam)
{
case DEFAULT_DATABASE_NAME:
if(HIWORD(lParam) == EN_CHANGE)
{
bChangeDBName = 1;
//GetDlgItemText(hwnd, HOST_NETWARE_NAME, dbServerObjData.hnwsname, MAX_DN_CHARS);
SendMessage(hwnd, NWA_WM_SETPAGEMODIFY, (WORD)hwnd, MAKELONG(0,TRUE));
}
break;
case IDC_FIND_DATABASE:
context = NWDSCreateContext();
if ( (int) context == ERR_CONTEXT_CREATION )
break;
err = NWDSGetContext(context, DCK_NAME_CONTEXT, contextStr);
if ( err < 0 )
{
NWDSFreeContext(context);
break;
}
NWALaunchDSFlatBrowser(hwnd,
&hwnd,
contextStr,
NULL,
NULL,
"Selected Object",
NWA_FB_SINGLE_SELECT,
FNWFlatBrowserLaunchProc);
break;
default:
break;
}
break;
case NWA_WM_CANCLOSE:
{
// xfer data to program memory
GetDlgItemText(hwnd, DEFAULT_DATABASE_NAME, dbNameChange, 1024);
return TRUE;
}
}
return FALSE ;
}
/*-------------------------------------------------------------------------*/
/* Function : ModifyUserObjectData(void) */
/* Description : */
/* Modifys a Users Database Atribute Value */
/*-------------------------------------------------------------------------*/
int ModifyUserObjectData(char *name)
{
NWDSContextHandle context;
int err=0;
Buf_T *inpBuf;
uint32 flags;
context = NWDSCreateContext();
if ( (int) context == ERR_CONTEXT_CREATION )
return ((int) context);
err=NWDSSetContext(context, DCK_NAME_CONTEXT, DS_ROOT_NAME);
if ( err < 0 )
{
NWDSFreeContext(context);
return err;
}
err = NWDSGetContext(context, DCK_FLAGS, (void *)&flags);
flags |= DCV_TYPELESS_NAMES;
flags |= DCV_XLATE_STRINGS;
flags |= DCV_DEREF_ALIASES;
flags |= DCV_DEREF_BASE_CLASS;
err = NWDSSetContext (context, DCK_FLAGS, (void *)&flags );
err=NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &inpBuf);
if ( err < 0 )
{
NWDSFreeContext(context);
return err;
}
err=NWDSInitBuf(context, DSV_MODIFY_ENTRY, inpBuf);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(inpBuf);
return err;
}
/*---------------------------------------------------------------*/
/* Modify DBName Attribute */
/*---------------------------------------------------------------*/
if ( bChangeDBName )
{
if ( dbNameDefined )
{
err = NWDSPutChange(context, inpBuf, DS_REMOVE_VALUE, "DBName");
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(inpBuf);
return err;
}
err = NWDSPutAttrVal(context, inpBuf, SYN_DIST_NAME, dbName);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(inpBuf);
return err;
}
}
if(strlen(dbNameChange) > 0)
{
err = NWDSPutChange(context, inpBuf, DS_ADD_VALUE, "DBName");
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(inpBuf);
return err;
}
err = NWDSPutAttrVal(context, inpBuf, SYN_DIST_NAME, dbNameChange);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(inpBuf);
return err;
}
}
}
err= NWDSModifyObject(context, name, NULL, 0, inpBuf);
if( err < 0 )
MessageBox(NULL, "Error Making Modification", "DBUSnap Error", MB_OK);
NWDSFreeContext(context);
NWDSFreeBuf(inpBuf);
return err;
}
/*-------------------------------------------------------------------------*/
/* Function : ReadUserObjectData */
/* Description : */
/* Function for reading object data in DS */
/*-------------------------------------------------------------------------*/
int ReadUserObjectData(char *name)
{
NWDSContextHandle context;
int err=0;
int32 iterHandle=-1L;
Buf_T *resBuf, *nameBuf;
uint32 totAttr, valCount, synID;
char attrName[MAX_DN_CHARS+1];
uint32 flags;
context = NWDSCreateContext();
if ( (int) context == ERR_CONTEXT_CREATION )
return ( (int) context );
err=NWDSSetContext(context, DCK_NAME_CONTEXT, DS_ROOT_NAME);
if ( err < 0 )
{
NWDSFreeContext(context);
return err;
}
err = NWDSGetContext(context, DCK_FLAGS, (void *)&flags);
if ( err < 0 )
{
NWDSFreeContext(context);
return err;
}
flags |= DCV_TYPELESS_NAMES;
flags |= DCV_XLATE_STRINGS;
flags |= DCV_DEREF_ALIASES;
flags |= DCV_DEREF_BASE_CLASS;
err = NWDSSetContext (context, DCK_FLAGS, (void *)&flags );
if ( err < 0 )
{
NWDSFreeContext(context);
return err;
}
err=NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &resBuf);
if ( err < 0 )
{
NWDSFreeContext(context);
return err;
}
err=NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &nameBuf);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
return err;
}
/*----------------------------------------------------------------------*/
/* Initialize input buffer and check for errors. The output buffer does */
/* not need to be initialized. This buffer will be initialized to */
/* DSV_READ operations */
/*----------------------------------------------------------------------*/
err=NWDSInitBuf(context, DSV_READ, nameBuf);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
NWDSFreeBuf(nameBuf);
return err;
}
/*----------------------------------------------------------------------*/
/* Put object attributes that are to be read into input buffer. */
/* Check for errors. */
/*----------------------------------------------------------------------*/
err= NWDSPutAttrName(context, nameBuf, "DBName");
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
NWDSFreeBuf(nameBuf);
return err;
}
/*----------------------------------------------------------------------*/
/* Read the data. */
/*----------------------------------------------------------------------*/
dbNameDefined=0;
iterHandle=NO_MORE_ITERATIONS;
do
{
err=NWDSRead(context, name, DS_ATTRIBUTE_VALUES,
FALSE, nameBuf, &iterHandle, resBuf);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
NWDSFreeBuf(nameBuf);
return err;
}
/*--------------------------------------------------------------------*/
/* pull stuff out of the output buffer, checking for errors. */
/* First, get total no of attributes in the buffer. */
/*--------------------------------------------------------------------*/
err=NWDSGetAttrCount(context, resBuf, &totAttr);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
NWDSFreeBuf(nameBuf);
return err;
}
err=NWDSGetAttrName(context, resBuf, attrName, &valCount, &synID);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
NWDSFreeBuf(nameBuf);
return err;
}
if(!lstrcmp(attrName,"DBName"))
{
dbNameDefined=1;
err=NWDSGetAttrVal(context, resBuf, synID, dbName);
if ( err < 0 )
{
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
NWDSFreeBuf(nameBuf);
return err;
}
}
} while ( iterHandle != NO_MORE_ITERATIONS );
NWDSFreeContext(context);
NWDSFreeBuf(resBuf);
NWDSFreeBuf(nameBuf);
return 0;
}
/*-------------------------------------------------------------------------*/
/* Function : FNWFlatBrowserLaunchProc */
/* Description : */
/* DSFlat Browser Callback Proc */
/*-------------------------------------------------------------------------*/
N_EXTERN_LIBRARY( nuint32 ) _export
FNWFlatBrowserLaunchProc
(
nuint32 userParam,
nuint16 msg,
nparam param1,
nparam param2
)
{
int fltCount;
NWASelObject *pObj;
HWND *puData;
fltCount=1;
switch( msg )
{
case NWA_MSG_FBFILTER_COUNT :
{
*((int *)param1) = fltCount;
break;
}
case NWA_MSG_FBFILTER_VALUE :
{
switch( param1 )
{
case 0L:
strcpy( (char *) param2, "Database");
break;
}
break;
}
case NWA_MSG_FBOBJECT_VALUE :
{
pObj= ( NWASelObject * ) param2;
puData = (HWND *) userParam;
SetDlgItemText(*puData, DEFAULT_DATABASE_NAME, pObj->objName);
break;
}
}
return (0);
}