home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Support Encyclopedia 96-1
/
novell-nsepro-1996-1-cd2.iso
/
download
/
netware
/
an401x.exe
/
DOITACCT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-02
|
5KB
|
182 lines
#include "..\doitacct.h"
#include <string.h>
#include <limits.h>
#include <stdio.h>
NWCCODE NWAPI DoItSubmitAccountNote(
NWCONN_HANDLE conn,
WORD objectType,
char NWPTR objectName,
long amount,
char *noteString)
{
FILE *logFile;
AUDIT_RECORD note;
NWOBJ_ID oID;
NWCCODE cCode;
int length;
int written;
NWCONN_NUM connNumber;
char oName[48];
NWOBJ_TYPE oType;
logFile = fopen("SYS:\\SYSTEM\\DOIT.LOG", "a+b");
if (logFile != NULL) {
note.recordType = 2;
cCode = NWGetFileServerDateAndTime(conn, note.dateAndTime);
/* get your connection number */
cCode = NWGetConnectionNumber(conn, &connNumber);
if (cCode != SUCCESSFUL) {
fclose(logFile);
return(cCode);
}
/* get initiator object ID */
cCode = NWGetConnectionInformation(conn, connNumber, oName, &oType, &oID, NULL);
if (cCode != SUCCESSFUL) {
fclose(logFile);
return(cCode);
}
note.chargerID = oID;
note.charge = amount;
/* get object ID of who the note is about */
cCode = NWGetObjectID(conn, objectName, objectType, &oID);
note.chargeeID = oID;
/* write the note */
written = fwrite(¬e, sizeof(AUDIT_RECORD), 1, logFile);
/* write the length of the comment that goes with the note */
length = strlen(noteString);
written = fwrite(&length, sizeof(length), 1, logFile);
/* then write the comment */
written = fputs(noteString, logFile);
fclose(logFile);
if (written != EOF)
return(SUCCESSFUL);
else
return(ERR_INSUFFICIENT_SPACE);
} else
return(INVALID_PATH);
}
NWCCODE NWAPI DoItQueryAccountingInstalled(
NWCONN_HANDLE conn,
BYTE NWPTR installed)
{
NWCCODE cCode;
char serverName[48];
DWORD sequence = -1L;
cCode = NWGetFileServerName(conn, serverName);
if (cCode != SUCCESSFUL) {
*installed = (BYTE)0;
return(cCode);
}
/* check for DOIT_ACCT_SERV property of server object */
cCode = NWScanProperty(conn, serverName, OT_FILE_SERVER, "DOIT_ACCT_SERV", &sequence, NULL, NULL, NULL, NULL, NULL);
if (cCode != SUCCESSFUL)
*installed = (BYTE)0;
else
*installed = (BYTE)1;
return(cCode);
}
NWCCODE NWAPI DoItGetAccountStatus(
NWCONN_HANDLE conn,
NWOBJ_TYPE objectType,
char NWPTR objectName,
long NWPTR balance,
long NWPTR limit)
{
NWCCODE cCode;
BYTE data[128];
NWFLAGS more;
cCode = NWReadPropertyValue(conn, objectName, objectType, "DOIT_ACCT_BAL", 1, data, &more, NULL);
if (cCode != SUCCESSFUL)
return(cCode);
*balance = data[0];
*limit = data[4];
return(SUCCESSFUL);
}
NWCCODE NWAPI DoItSubmitAccountCharge(
NWCONN_HANDLE conn,
WORD objectType,
char NWPTR objectName,
long chargeAmount)
{
NWCCODE cCode;
char serverName[48];
BYTE data[128];
NWFLAGS more;
long balance;
NWCONN_NUM connNumber;
char oName[48];
NWOBJ_TYPE oType;
NWOBJ_ID oID;
FILE *logFile;
AUDIT_RECORD chargeRecord;
/* get submitter's connection number */
cCode = NWGetConnectionNumber(conn, &connNumber);
if (cCode != SUCCESSFUL)
return(cCode);
/* get submitter's object ID */
cCode = NWGetConnectionInformation(conn, connNumber, oName, &oType, &oID, NULL);
if (cCode != SUCCESSFUL)
return(cCode);
/* get server name */
cCode = NWGetFileServerName(conn, serverName);
if (cCode != SUCCESSFUL)
return(cCode);
/* check to see if submitter is authorized to make charges */
cCode = NWIsObjectInSet(conn, serverName, OT_FILE_SERVER, "DOIT_ACCT_SERV", oName, oType);
if (cCode != SUCCESSFUL)
return(cCode);
cCode = NWReadPropertyValue(conn, objectName, objectType, "DOIT_ACCT_BAL", 1, data, &more, NULL);
if (cCode != SUCCESSFUL)
return(cCode);
/* get balance */
memcpy((void *)&balance, (void *)data, sizeof(long));
/* check for underflow */
if (LONG_MIN + chargeAmount > balance)
balance = LONG_MIN;
else
balance = balance - chargeAmount;
/* copy new balance to segment */
memcpy((void *)data, (void *)&balance, sizeof(long));
/* write note */
logFile = fopen("SYS:\\SYSTEM\\DOIT.LOG", "a+b");
if (logFile != NULL) {
chargeRecord.recordType = 1;
cCode = NWGetFileServerDateAndTime(conn, chargeRecord.dateAndTime);
chargeRecord.chargerID = oID;
chargeRecord.charge = chargeAmount;
cCode = NWGetObjectID(conn, objectName, objectType, &oID);
chargeRecord.chargeeID = oID;
fwrite(&chargeRecord, sizeof(AUDIT_RECORD), 1, logFile);
fclose(logFile);
}
cCode = NWWritePropertyValue(conn, objectName, objectType, "DOIT_ACCT_BAL", 1, data, 0);
return(cCode);
}