Локальные сети персональных компьютеров. Работа с сервером Novell NetWare

       

Программа SETMASK


Программа SETMASK (листинг 16) демонстрирует использование функции ModifyMaximumRightsMask() для изменения маски прав доступа существую-щего каталога.

В качестве первого параметра программе необходимо указать путь к каталогу. Второй и третий параметр задают соответственно удаляемые или добавляемые права доступа.

// =================================================== // Листинг 16. Изменение маски прав доступа // Файл setmask\setmask.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 ModifyMaximumRightsMask(BYTE, char*, BYTE,BYTE);

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

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

BYTE RevokeRightsMask; BYTE GrantRightsMask;

int ccode;

printf("\n*SETMASK* (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 < 4) { printf("Укажите путь к каталогу, " "удаляемые и добавляемые права доступа, " "\nнапример: setmask sys:users W RO"); return; }

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

strupr(argv[1]); strupr(argv[2]); strupr(argv[3]);

// Определяем маску удаляемых прав, разбирая второй // параметр, заданный при запуске программы

RevokeRightsMask = 0x00;

for(int i = 0; argv[2][i] != '\0' ; i++) { switch(argv[2][i]) { case 'R': RevokeRightsMask |= 1; break; case 'W': RevokeRightsMask |= 2; break; case 'O': RevokeRightsMask |= 4; break; case 'C': RevokeRightsMask |= 8; break; case 'D': RevokeRightsMask |= 0x10; break; case 'P': RevokeRightsMask |= 0x20; break; case 'S': RevokeRightsMask |= 0x40; break; case 'M': RevokeRightsMask |= 0x80; break; case '-': break; default: printf("Ошибка в параметрах\n"); return; } }


// Определяем маску добавляемых прав, разбирая // третий параметр, заданный при запуске программы

GrantRightsMask = 0x00;

for(i = 0; argv[3][i] != '\0' ; i++) { switch(argv[3][i]) { case 'R': GrantRightsMask |= 1; break; case 'W': GrantRightsMask |= 2; break; case 'O': GrantRightsMask |= 4; break; case 'C': GrantRightsMask |= 8; break; case 'D': GrantRightsMask |= 0x10; break; case 'P': GrantRightsMask |= 0x20; break; case 'S': GrantRightsMask |= 0x40; break; case 'M': GrantRightsMask |= 0x80; break; case '-': break; default: printf("Ошибка в параметрах\n"); return; } } // Изменяем маску доступа каталога

ccode = ModifyMaximumRightsMask(0, argv[1], RevokeRightsMask, GrantRightsMask);

if(!ccode) printf("Маска прав изменена\n"); else printf("Ошибка %02.2X\n", ccode); }


Содержание раздела