Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сформировать списки ACL, помогите сделать... 
V
    Опции темы
iPlay
Дата 20.11.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Вообщем есть такое вот задание:
Написать программу, которая для выбранного файла задает права доступа(Группа владельца - Выполнение файлов, Смена владельца ).

Подскажите пожалуйста где можно почитать примеры написание программ такого типа. Или кто нить выложете на подобие программу я разбиратся буду... plz


Это сообщение отредактировал(а) iPlay - 20.11.2007, 18:55
PM MAIL   Вверх
NiJazz
Дата 21.11.2007, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Цитата
Подскажите пожалуйста где можно почитать примеры написание программ такого типа.

В MSDN, конечно.
Смотри функции SetFileSecurity, SetSecurityDescriptorDacl, InitializeAcl, AddAccessAllowedAce, AddAccessDeniedAce.
Буду вопросы - задавай.
PM MAIL   Вверх
NiJazz
Дата 21.11.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



А вот ипример.
PM MAIL   Вверх
iPlay
Дата 27.11.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Да есть один вопросик небольшой не могу понять зачем нужны SIDы и что это такое smile 
Там надо мне будет использовать функцию AllocateAndInitializeSid(.....) - не очень могу разобратся что она делает и какие параметры ей передавать.

PM MAIL   Вверх
NiJazz
Дата 27.11.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



iPlay, SID (Security ID) используется в ОС для идентификации пользователей и групп при ограничении доступа.

Добавлено через 2 минуты и 14 секунд
Описание читай в MSDN, можешь посмотреть тут.
Если нужно получить SID из имени, то используй LookupAccountName.
PM MAIL   Вверх
iPlay
Дата 27.11.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Почитал я статьи и МСДН собрался с мыслями и начал писать. Вот что написал   
Код

int main(){
    PSID pSid;
    DWORD dwDacl_Length;
    PACL pDacl;
    PSECURITY_DESCRIPTOR pSd;                    
             
    /*pSid = (PSID)LocalAlloc(LPTR,4096);
    SID_IDENTIFIER_AUTHORITY sIa = SECURITY_WORLD_SID_AUTHORITY;                                                    
    
    AllocateAndInitializeSid(&sIa,1,SECURITY_WORLD_RID,0,0,0,0,0,0,0,&pSid);

    dwDacl_Length = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pSid);
    pDacl = (PACL)LocalAlloc(LPTR,dwDacl_Length);

    InitializeAcl(pDacl,dwDacl_Length,ACL_REVISION);
    AddAccessAllowedAce(pDacl,ACL_REVISION,WRITE_OWNER|GENERIC_EXECUTE,pSid);
    pSd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_LENGTH);
    try{
        InitializeSecurityDescriptor(pSd,SECURITY_DESCRIPTOR_REVISION);
    }
    catch(...){
    cout << "*Erorr* - invalid security descriptor";
    }*/

    SetSecurityDescriptorDacl(pSd,TRUE,pDacl,FALSE);
    SetSecurityDescriptorOwner(pSd,pSid,FALSE);
    SetSecurityDescriptorGroup(pSd,pSid,FALSE);
    
    cout << "This program sets the specified access rights for the file\n";
    cout << "Enter file name: ";
    
    char ObjName[100];
    cin.getline(ObjName,sizeof(ObjName));
    try{
    SetFileSecurity(__TEXT(ObjName),OWNER_SECURITY_INFORMATION,pSd); 
    }
    catch(...){
    cout << "Attributes cannot be setted";    
    }
    FreeSid(pSid);
    Sleep(4000);
return 0;
}


Нужно получить SID чето не шарю как? smile 

Это сообщение отредактировал(а) iPlay - 28.11.2007, 19:21
PM MAIL   Вверх
iPlay
Дата 28.11.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Сегодня разобрался в универе почему не получалось я SID создавал новый надо было извлечь для группы   smile .

А можно получить SID с помощью ф-ций GetSid() чтобы потом поюзать?

Это сообщение отредактировал(а) iPlay - 28.11.2007, 19:13
PM MAIL   Вверх
iPlay
Дата 28.11.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Ниче не получается вроде все изучил но не могу всё до кучи сложить. Помогите плиз..

Это сообщение отредактировал(а) iPlay - 28.11.2007, 20:11
PM MAIL   Вверх
iPlay
Дата 28.11.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Зашел в тупик своих мыслей  smile 
PM MAIL   Вверх
NiJazz
Дата 29.11.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Пример того, как получить SID группы пользователей:
Код

SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;

PSID sid = 0;

if ( !!::AllocateAndInitializeSid( &auth, 1, DOMAIN_GROUP_RID_USERS, 0, 0, 0, 0, 0, 0, 0, &sid ) )
{
   // Do smth with the SID
   ::FreeSid( sid );
}


Подробнее смотри Well-known SIDs
PM MAIL   Вверх
iPlay
Дата 29.11.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



В принципе вот что у меня получается 
Код

int main(){
    PSID pSid;
    DWORD dwDacl_Length;
    PACL pDacl;
    PSECURITY_DESCRIPTOR pSd;                    

    pSid = (PSID)LocalAlloc(LPTR,4096);
    
    SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;

    if ( !AllocateAndInitializeSid( &auth, 1, DOMAIN_GROUP_RID_USERS, 0, 0, 0, 0, 0, 0, 0, &pSid ) ){
        FreeSid( pSid );
    }

    dwDacl_Length = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pSid);
    pDacl = (PACL)LocalAlloc(LPTR,dwDacl_Length);

    InitializeAcl(pDacl,dwDacl_Length,ACL_REVISION);
    AddAccessAllowedAce(pDacl,ACL_REVISION,WRITE_OWNER|GENERIC_EXECUTE,pSid);
    pSd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_LENGTH);
    try{
        InitializeSecurityDescriptor(pSd,SECURITY_DESCRIPTOR_REVISION);
    }
    catch(...){
    cout << "*Erorr* - invalid security descriptor";
    }
    SetSecurityDescriptorDacl(pSd,TRUE,pDacl,FALSE);
    SetSecurityDescriptorOwner(pSd,pSid,FALSE);
    SetSecurityDescriptorGroup(pSd,pSid,FALSE);
    
    cout << "This program sets the specified access rights for the file\n";
    cout << "Enter file name: ";
    
    char ObjName[100];
    cin.getline(ObjName,sizeof(ObjName));
    try{
    SetFileSecurity(__TEXT(ObjName),OWNER_SECURITY_INFORMATION,pSd); 
    }
    catch(...){
    cout << "Attributes cannot be setted";    
    }
    FreeSid(pSid);
    Sleep(4000);
return 0;
}


Но суть в том что SID почемуто ноль (в дебагере смотрю) странно ЧТО Я НЕ ТАК ДЕЛАЮ???
В чем ошибка?



Это сообщение отредактировал(а) iPlay - 29.11.2007, 21:06
PM MAIL   Вверх
NiJazz
Дата 30.11.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Код

pSid = (PSID)LocalAlloc(LPTR,4096);

Это лишнее.
Цитата
Но суть в том что SID почемуто ноль (в дебагере смотрю) странно ЧТО Я НЕ ТАК ДЕЛАЮ???

Ноль после вызова AllocateAndInitializeSid?
PM MAIL   Вверх
iPlay
Дата 30.11.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Да ноль  после вызова AllocateAndInitializeSid даже когда убрал лишнюю строчку.
PM MAIL   Вверх
NiJazz
Дата 30.11.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Что возвращает GetLastError?
PM MAIL   Вверх
iPlay
Дата 30.11.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Сейчас опять посидел в дебаггере и вот что увидел:
AllocateAndInitializeSid() - выполнился нормально но после него pSID стал равен ноль хотя до этого было что-то.
Сбой идет в SetFileSecurity(ObjName,OWNER_SECURITY_INFORMATION,pSd)) - GetLast Error вернул что путь к файлу не найден  smile  странно както я уже вручную в программе прописал.
PM MAIL   Вверх
NiJazz
Дата 1.12.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Я запустил у себя твой код, AllocateAndInitializeSid отработала нормально.
PM MAIL   Вверх
iPlay
Дата 1.12.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Кстати да AllocateAndInitializeSid срабатывает нормально но вот почему то SetFileSecurity(ObjName,OWNER_SECURITY_INFORMATION,pSd) выдает что файл не найден??? Странно
PM MAIL   Вверх
iPlay
Дата 1.12.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



NiJazz,  попробуй у себя откомпилить всю прогу интересно будет работать или нет?

Особенно в месте SetFileSecurity() она у меня тут вылетает! 

Это сообщение отредактировал(а) iPlay - 1.12.2007, 18:03
PM MAIL   Вверх
NiJazz
Дата 1.12.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



iPlay, выложи код.
PM MAIL   Вверх
iPlay
Дата 2.12.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Вот код: 
Код


#include "stdafx.h"
#include <windows.h>
#include <TCHAR.h>
#include <iostream>
#include <Dskquota.h>
#define SET_OWNER 0x00000019L            //WRITE_OWNER
#define EXECUTE_FILES 0x00000029L        //GENERIC_EXECUTE

using std::cout;
using std::cin;

int main(){
    PSID pSid;
    DWORD dwDacl_Length;
    PACL pDacl;
    PSECURITY_DESCRIPTOR pSd;                    
    
    SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;

    if ( !AllocateAndInitializeSid( &auth, 1, DOMAIN_GROUP_RID_USERS, 0, 0, 0, 0, 0, 0, 0, &pSid ) ){
        FreeSid( &pSid );
    }
    
    dwDacl_Length = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pSid);
    pDacl = (PACL)LocalAlloc(LPTR,dwDacl_Length);

    InitializeAcl(pDacl,dwDacl_Length,ACL_REVISION);
    AddAccessAllowedAce(pDacl,ACL_REVISION,WRITE_OWNER|GENERIC_EXECUTE,pSid);
    
    pSd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_LENGTH);
    
    if    ( !InitializeSecurityDescriptor(pSd,SECURITY_DESCRIPTOR_REVISION) ){
        cout << "*Erorr* - invalid security descriptor";
    }
    SetSecurityDescriptorDacl(pSd,TRUE,pDacl,FALSE);
    SetSecurityDescriptorOwner(pSd,pSid,FALSE);
    SetSecurityDescriptorGroup(pSd,pSid,FALSE);
    
    cout << "This program sets the specified access rights for the file\n";
    cout << "Enter file name: ";
    
    const char *ObjName="C:\\1.txt";
    
    if(    !SetFileSecurity(ObjName,OWNER_SECURITY_INFORMATION,pSd)){ 
        DWORD error = GetLastError();
        cout << "\n" << error << "\n";
        cout << "Attributes cannot be setted";    
    }
    FreeSid(pSid);
    Sleep(4000);
return 0;
}


Вот попробуй может если найдеш ошибки исправь пож. а то уже мозги кипят не могу понять почему не работает.
PM MAIL   Вверх
NiJazz
Дата 3.12.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



iPlay, ошибка 1307: This security ID may not be assigned as the owner of this object. 
PM MAIL   Вверх
iPlay
Дата 3.12.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



У меня тоже сейчас эта ошибка. В чем проблема интересно...

Это сообщение отредактировал(а) iPlay - 3.12.2007, 22:37
PM MAIL   Вверх
NiJazz
Дата 3.12.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Цитата
В чем проблема интересно...

iPlay, в нежелании разбираться с задачей.  smile 
PM MAIL   Вверх
iPlay
Дата 4.12.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



В желании, просто непонятно из-за чего возникла эта ошибка.

Добавлено через 1 минуту и 16 секунд
Еще бы в нежелании... Мне в среду уже показывать её надо  smile 
PM MAIL   Вверх
iPlay
Дата 4.12.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Короче вот что получилось:
Код

#include "stdafx.h"
#include <windows.h>
#include <TCHAR.h>
#include <conio.h>
#include <iostream>
using std::cout;
using std::cin;

void PrintLastErrorMessage(){
        LPVOID lpMsgBuf;

        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            GetLastError(),
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
            (LPTSTR) &lpMsgBuf,
            0,
            NULL
        );
        MessageBox( NULL, (const char*)lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
        LocalFree( lpMsgBuf );
}

int main()
{
   
  printf("Input a new directory name:");
  
  char DirName[100];

  cin.getline(DirName,sizeof(DirName));
    
  DWORD LengthNeed = 0;
  PSECURITY_DESCRIPTOR pSd = NULL; 
  
  if (!GetFileSecurity(__TEXT(DirName),DACL_SECURITY_INFORMATION,pSd,0,&LengthNeed))
  {
      pSd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,LengthNeed);
  }
  else
  {
    PrintLastErrorMessage();
  }

  if (!GetFileSecurity(__TEXT(DirName),DACL_SECURITY_INFORMATION,pSd,LengthNeed,&LengthNeed))
  {
    PrintLastErrorMessage();
  }
  

  BOOL DaclPresent = TRUE;
  BOOL DaclDefaulted = FALSE;

  PACL pDacl = NULL; 

  if (!GetSecurityDescriptorDacl(pSd,&DaclPresent,&pDacl,&DaclDefaulted) )
  {
    PrintLastErrorMessage();
  };

 
    PSID pSid = (PSID)LocalAlloc(LPTR,4096); 
    SID_IDENTIFIER_AUTHORITY sia = SECURITY_WORLD_SID_AUTHORITY;    
    //SID_IDENTIFIER_AUTHORITY sia = SECURITY_NT_AUTHORITY;

    AllocateAndInitializeSid(&sia,1,SECURITY_WORLD_RID,0,0,0,0,0,0,0,&pSid);
    //AllocateAndInitializeSid(&sia,1,DOMAIN_GROUP_RID_USERS,0,0,0,0,0,0,0,&pSid);

    DWORD dwDaclLength = pDacl->AclSize + sizeof(ACCESS_ALLOWED_ACE) 
                              - sizeof(DWORD) + GetLengthSid(pSid);


    PACL pDaclNew = (PACL)LocalAlloc(LPTR,dwDaclLength);
  

    InitializeAcl(pDaclNew,dwDaclLength,ACL_REVISION);   
          
    AddAccessAllowedAce(pDaclNew,ACL_REVISION,WRITE_OWNER|GENERIC_EXECUTE,pSid);
  
    LPVOID Ace;
    
    GetAce(pDacl,0,&Ace);
    
    AddAce(pDaclNew,ACL_REVISION,MAXDWORD,Ace,pDacl->AclSize - sizeof(ACL));


   
  if (!InitializeSecurityDescriptor(pSd,SECURITY_DESCRIPTOR_REVISION))
  {
    PrintLastErrorMessage();
  }

 
  SetSecurityDescriptorDacl(pSd,TRUE,pDaclNew,FALSE);  

  SetSecurityDescriptorOwner(pSd,pSid,FALSE); 
  
  SetSecurityDescriptorGroup(pSd,pSid,FALSE);      
 
 
  if (!SetFileSecurity(__TEXT(DirName),DACL_SECURITY_INFORMATION,pSd)){
    PrintLastErrorMessage();
  } 
   
  FreeSid(pSid);
  
  return 0;
}


Всё работает. 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.