// ===================================================
// Листинг 26. Программа для просмотра уровня
//             доступа рабочей станции
//
// Файл baccess\baccess.cpp
//
// (C) A. Frolov, 1993
// ===================================================

#include <stdlib.h>
#include <stdio.h>

#define WORD unsigned int
#define BYTE unsigned char

extern "C" int GetNetWareShellVersion(char *,char *, char *);
extern "C" int GetBinderyAccessLevel(BYTE *, long *);
extern "C" int GetBinderyObjectName(long, char*, WORD*);

void main(void) {

	char MajorVersion=0;
	char MinorVersion=0;
	char Revision=0;
	int ccode;

	BYTE SecurityAccessLevel;
	long ObjectID;
	char ObjectName[48];
	WORD ObjectType;


	printf("\n*BACCESS* (C) Frolov A., 1993\n");

// Проверяем присутствие сетевой оболочки

	asm push si
	GetNetWareShellVersion(&MajorVersion,
			&MinorVersion, &Revision);
	asm pop si

	if(MajorVersion == 0) {
		printf("\nОболочка NetWare не загружена\n");
		return;
	}

// Получаем свой идентификатор и уровень доступа

	GetBinderyAccessLevel(&SecurityAccessLevel, &ObjectID);

// По идентификатору определяем свое имя

	ccode =  GetBinderyObjectName(ObjectID, ObjectName, &ObjectType);

// Если пользователь подключился к файл-серверу,
// выводим его имя, идентификатор и тип

	if(!ccode) {
		printf("Пользователь %s, ID = %lX, Type = %d\n",
			ObjectName, ObjectID, ObjectType);
	}

// Выводим права доступа на чтение

	printf("Права доступа на чтение:\t");

	switch(SecurityAccessLevel & 0x0f) {
		case 0:
			printf("Anyone\t(не подключен к файл-серверу)\n");
			break;
		case 1:
			printf("Logged\t(подключен к файл-серверу)\n");
			break;
		case 2:
			printf("Object\t(подключен к файл-серверу "
				  "с именем и паролем)\n");
			break;
		case 3:
			printf("Supervisor\t(права супервизора)\n");
			break;
		case 4:
			printf("NetWare\t(права Novell NetWare)\n");
			break;
	}

// Выводим права доступа на запись

	printf("Права доступа на запись:\t");

	switch((SecurityAccessLevel >> 4) & 0x0f) {
		case 0:
			printf("Anyone\t(не подключен к файл-серверу)\n");
			break;
		case 1:
			printf("Logged\t(подключен к файл-серверу)\n");
			break;
		case 2:
			printf("Object\t(подключен к файл-серверу "
				  "с именем и паролем)\n");
			break;
		case 3:
			printf("Supervisor\t(права супервизора)\n");
			break;
		case 4:
			printf("NetWare\t(права Novell NetWare)\n");
			break;
	}
}