Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
MrWoolf
3 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 60
#1

Списки контроля доступа Access Control List (ACL) - C++

17.09.2013, 18:43. Просмотров 2507. Ответов 24
Метки нет (Все метки)

Есть код помогите идею развить дальше, никак не получаеться, не могу разобраться. Помогите пожалуйста буду очень благодарен.
Нужно создать Списки контроля доступа Access Control List (ACL).
Обьект: мьютекс!
Запретить доступ: read!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    PSID pEveryoneSID = NULL, pAdminSID = NULL, pNetworkSID  = NULL;
    PACL pACL = NULL;
    PSECURITY_DESCRIPTOR pSD = NULL;
    SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;           //deny Access
    SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; //read
    AllocateAndInitializeSid(&SIDAuthNT, 2,SECURITY_BUILTIN_DOMA IN_RID,  
    DOMAIN_ALIAS_RID_ADMI NS,0, 0, 0, 0, 0, 0,&pAdminSID)  //admin
 
    if (ERROR_SUCCESS != SetEntriesInAcl(NUM_ACES,ea,NULL,&pACL))throw GetLastError();
    pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_ LENGTH); 
 
        if (!SetSecurityDescriptorDacl(pSD,TRUE,pACL,FALSE)) 
{
    throw GetLastError();
} 
        else {SECURITY_ATTRIBUTES sa;sa.nLength = sizeof(SECURITY_ATTRIBUTES);
                sa.bInheritHandle = FALSE;sa.lpSecurityDescriptor = pSD;
 
if (!CreateDirectory("C:\\Program Files\\MyStuf f", &sa)) throw GetLastError();
Я знаю что этот пример создает всего лишь 3 SID на файл и не создает каких-то прав доступа.
Как это все дальше развить??

Добавлено через 4 минуты
есть еще такой пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "EvryThng.h"
 
#define ACL_SIZE 1024 
 
#define INIT_EXCEPTION 0x3 
 
#define CHANGE_EXCEPTION 0x4 
 
#define SID_SIZE LUSIZE 
 
#define DOM_SIZE LUSIZE
 
LPSECURITY_ATTRIBUTES InitializeUnixSA(DWORD UnixPerms, LPCTSTR UsrNam, LPCTSTR GrpNam, LPDWORD AceMasks, LPHANDLE pHeap) {
 
 HANDLE SAHeap = HeapCreate(HEAP_GENERATE_EXCEPTIONS, 0, 0);
 
 LPSECURITY_ATTRIBUTES pSA = NULL;
 
 PSECURITY_DESCRIPTOR pSD = NULL;
 
 PACL pAcl = NULL;
 
 BOOL Success;
 
 DWORD iBit, iSid, UsrCnt = ACCT_NAME_SIZE;
 
 /* Таблицы имен пользователя (User), группы (Group) и прочих пользователей (Everyone), идентификаторов SID и так далее для LookupAccountName и создания SID. */
 
 LPCTSTR pGrpNms[3] = {EMPTY, EMPTY, _T("Everyone")};
 
 PSID pSidTable[3] = {NULL, NULL, NULL};
 
 SID_NAME_USE sNamUse[3] = {SidTypeUser, SidTypeGroup, SidTypeWellKnownGroup};
 
 TCHAR RefDomain[3][DOM_SIZE];
 
 DWORD RefDomCnt[3] = {DOM_SIZE, DOM_SIZE, DOM_SIZE};
 
 DWORD SidCnt[3] = {SID_SIZE, SID_SIZE, SID_SIZE};
 
 __try { /* Блок try-except для исключений при распределении памяти. */
 
  *рНеар = SAHeap;
 
  pSA = HeapAlloc(SAHeap, 0, sizeof (SECURITY_ATTRIBUTES));
 
  pSA->nLength = sizeof(SECURITY_ATTRIBUTES);
 
  pSA->bInheritHandle = FALSE;
 
  /* Программист может выполнить эти установки позже. */
 
  pSD = HeapAlloc(SAHeap, 0, sizeof(SECURITY_DESCRIPTOR));
 
  pSA->lpSecurityDescriptor = pSD;
 
  InitializeSecurityDescriptor(pSD, SECURITY DESCRIPTOR REVISION); 
 
  /* Получить SID пользователя, группы и прочих пользователей. 
 
   * Другие важные подробности можно найти на Web-сайте. */
 
  pGrpNms[0] = UsrNam;
 
  pGrpNms[1] = GrpNam;
 
  for (iSid = 0; iSid < 3; iSid++) {
 
   pSidTable[iSid] = HeapAlloc(SAHeap, 0, SID_SIZE);
 
   LookupAccountName(NULL, pGrpNms[iSid], pSidTable[iSid], &SidCnt[iSid], RefDomain[iSid], &RefDomCnt[iSid], &sNamUse[iSid]);
 
  }
 
  SetSecurityDescriptorOwner(pSD, pSidTable[0], FALSE);
 
  SetSecurityDescriptorGroup(pSD, pSidTable[1], FALSE);
 
  pAcl = HeapAlloc(ProcHeap, HEAP_GENERATE_EXCEPTIONS, ACL_SIZE);
 
  InitializeAcl(pAcl, ACL_SIZE, ACL_REVISION);
 
  /* Добавить все элементы АСЕ, разрешающие и запрещающие доступ. */
 
  for (iBit = 0; iBit < 9; iBit++) {
 
   if ((UnixPerms >> (8 – iBit) & 0x1) != 0 && AceMasks[iBit%3] != 0) AddAccessAllowedAce(pAcl, ACL_REVISION, AceMasks [iBit%3], pSidTable [iBit/3]);
 
   else if (AceMasks[iBit%3] != 0) AddAccessDeniedAce(pAcl, ACL_REVISION, AceMasks [iBit%3], pSidTable [iBit/3]);
 
  }
 
  /* Добавить запрет доступа для всех АСЕ категории "Прочие". */
 
  Success = Success && AddAccessDeniedAce(pAcl, ACL_REVISION, STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL, pSidTable[2]);
 
  /* Связать ACL с атрибутом защиты. */
 
  SetSecurityDescriptorDacl(pSD, TRUE, pAcl, FALSE);
 
  return pSA;
 
 } /* Конец блока try-except. */
 
 __except(EXCEPTION_EXECUTE_HANDLER) { /* Освободить все ресурсы. */
 
  if (SAHeap != NULL) HeapDestroy(SAHeap);
 
  pSA = NULL;
 
 }
 
 return pSA; 
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2013, 18:43     Списки контроля доступа Access Control List (ACL)
Посмотрите здесь:

C++ у меня созданы 2 фаила - один с классом (называется list.h), а другой с реализациями функций (list.cpp).
почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён? C++
Ошибка при компиляции undefined reference to `List<int>::List()'| C++
C++ Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив
Вывод окна контроля переменных C++
C++ Программа контроля успеваемости студентов
Работа с STL list + пропись List.h C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrWoolf
3 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 60
22.09.2013, 16:24  [ТС]     Списки контроля доступа Access Control List (ACL) #21
Я этому человеку очень благодарен, но он выразился не коректно я не сижу зложа руки и ничего не делаю...
и не жду чтоб кто-то зжалился, я прошу мне весь код писать я попросил исправить то что у меня не правельно, раз у меня на 99% готово так что сложно помоч.
alsav22
22.09.2013, 17:09
  #22

Не по теме:

Но если на 99%, то может самому дожать? Почитать, подумать?

MrWoolf
3 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 60
22.09.2013, 17:56  [ТС]     Списки контроля доступа Access Control List (ACL) #23
Я зашел на этот с той целью что мне помогут, если у меня получилось бы самому дожать смысл бы мне сюда заходить??
Я не бог программирования и не проффесионал, еслиб я им был, я б сюда не заходил...
alsav22
22.09.2013, 18:07
  #24

Не по теме:

Цитата Сообщение от MrWoolf Посмотреть сообщение
Я зашел на этот с той целью что мне помогут
Сначала же не было на 99%. Помогли уже... Помочь и сделать - это, всё-таки, не одно и тоже...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 21:14     Списки контроля доступа Access Control List (ACL)
Еще ссылки по теме:

C++ Как посмотреть список прав доступа (ACL) к конкретному файлу?
Реализация std::list, сложность list::size() C++
C++ Преобразование списка list в *list
C++ Списки контроля доступа Access Control List (ACL) - C++
Записать в файл list (очередь) объектов, в которых содержатся строки string, и считать с файла обратно в list C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrWoolf
3 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 60
22.09.2013, 21:14  [ТС]     Списки контроля доступа Access Control List (ACL) #25
Я не буду с вами спорить, не хочу дескутировать спасибо что помогли....
Yandex
Объявления
22.09.2013, 21:14     Списки контроля доступа Access Control List (ACL)
Ответ Создать тему
Опции темы

Текущее время: 05:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru