// ===================================================
// Листинг 15. Просмотр маски прав доступа к каталогу
//
// Файл getmask\getmask.cpp
//
// (C) A. Frolov, 1993
// ===================================================

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

#define BYTE unsigned char
#define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *);
extern "C" int GetEffectiveDirectoryRights(BYTE, char*, BYTE*);

void main(int argc, char *argv[]) {

	char MajorVersion=0;
	char MinorVersion=0;
	char Revision=0;

	BYTE RightsMask;

	int ccode;

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

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

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

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

// Необходимо задать букву, обозначающую имя
// локального диска и путь к сетевому каталогу

	if(argc < 2) {
		printf("Укажите путь к каталогу, "
			"\nнапример: getmask sys:users");
		return;
	}

// Параметр должен быть задан заглавными буквами

	strupr(argv[1]);

// Удаляем каталог

	ccode = GetEffectiveDirectoryRights(0, argv[1], &RightsMask);

	if(!ccode) {
		printf("Права доступа: %02.2X\n", RightsMask);

		if(RightsMask & 0x01) printf("Read\t(Чтение)\n");
		if(RightsMask & 0x02) printf("Write\t(Запись)\n");
		if(RightsMask & 0x04) printf("Open\t(Открытие файлов)\n");
		if(RightsMask & 0x08) printf("Create\t(Создание)\n");
		if(RightsMask & 0x10) printf("Delete\t(Уничтожение)\n");
		if(RightsMask & 0x20) printf("Parential\t(Определение прав)\n");
		if(RightsMask & 0x40) printf("Search\t(Поиск)\n");
		if(RightsMask & 0x80) printf("Modify\t(Изменение атрибутов)\n");
	}
	else
		printf("Ошибка %02.2X\n", ccode);
}

