Проект Liferay. Open Source-система для создания порталов
Сергей Яремчук
$ sudo apt-get install unzip default-jdk default-jre mysql-server mysql-client
$ sudo nano /etc/bash.bashrc
JAVA_HOME=/usr/lib/jvm/default-java
export JAVA_HOME
LIFERAY_HOME=/opt/liferay/tomcat-7.0.27
export LIFERAY_HOME
export PATH=$JAVA_HOME/bin:$LIFERAY_HOME/bin:$PATH
$ mysql -u root –p
mysql> CREATE DATABASE lportal DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON lportal.* TO 'liferay' IDENTIFIED BY 'password';
mysql> quit;
$ sudo unzip liferay-portal-tomcat-6.1.1-ce-ga2-20120731132656558.zip –d /opt
$ sudo mv /opt/liferay-portal-6.1.1-ce-ga2 /opt/liferay
$ cd /opt/liferay/tomcat-7.0.27/bin/
$ sudo ./startup.sh
$ find /opt/liferay -name "*properties"
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&characterEn
coding=UTF-8&useFastDateParsing=false
jdbc.default.username=liferay
jdbc.default.password=password
schema.run.enabled=true
schema.run.minimal=true
-----------------------------------------------------------------------------------------------------------------
Microsoft Windows 8. Программное управление начальным экраном
Иван Коробко
Листинг 1. Оптимизация списка установленных приложений начального экрана
# Массив приложений, которые не надо удалять: Camera и Reader
$apps = "Camera", "Reader"
$firm = "Microsoft"
[string]$FullApps=$null
# Формирование массива удаляемых приложений с учетом фирмы-производителя
Get-ProvisionedAppxPackage -Online| %{
foreach ($appin $apps)
{
if ($_.DisplayName -like ("{0}.*{1}" -f $firm, $app))
{$FullApps+=$_.PackageName+"#"}
}
}
# Удаление приложений, кроме указанных
Get-ProvisionedAppxPackage -Online| %{
if ($FullApps -cnotlike ("*{0}*" -f $_.PackageName))
{
Write-Host ("Приложение {0} - удалено" -f [string]($_.DisplayName).PadRight(40," "))
Remove-ProvisionedAppxPackage -Online -PackageName$_.PackageName}
else
{ Write-Host ("Приложение {0} - сохранено" -f [string]($_.DisplayName).PadRight(40," ")) }
}
Листинг 2. Удаление ярлыков приложений с начального экрана
# Список приложений, которые не нужно удалять с начального экрана
[array]$AppList="Bing","Camera"
# Формирование пути, где содержатся ярлыки
$DefaultAppsPath = Join-Path -Path (Get-Itemenv:localappdata).value -ChildPath ("Microsoft\Windows\ApplicationShortcuts")
$DefaultAppsPath
# Фомирование массива
[array]$name=$null
Get-ChildItem -Path $DefaultAppsPath -Directory | % {
$prename = $_.name
#$name+=$prename -replace "^(.+)\.(.+)_(.+)$", '$2'
# Определение имени с помощью регулярного выражения
$name+=$prename -replace "^Microsoft\.(.+)_(.+)$", '$2'
}
# Сравнение массивов и удаление лишних папок
Compare-Object -ReferenceObject $name -DifferenceObject $AppList | %{
Remove-Item -Path (Join-Path -Path $DefaultAppsPath -ChildPath ("*.{0}_*" -f [string]$_.inputObject)) -force -Recurse
}
Листинг 3. Удаление содержимого папки Programs
$AllUsersAppsPath = Join-Path -Path (Get-Itemenv:SystemDrive).value -ChildPath ("Users\AllUsers\Microsoft\Windows\StartMenu\Programs")
Remove-Item -PathAllUsersAppsPath-force -Recurse
Листинг 4. Размещение локальных дисков на начальном экране
# Сценарий создания ярлыков для сетевых дисков
$cmd=Join-Path -Path ((Get-Itemenv:systemRoot).value) -ChildPath explorer.exe
$appData = Join-Path -Path ((Get-Itemenv:appData).value) -ChildPath ("Microsoft\Windows\StartMenu\Programs\")
Remove-Item -Path $appData -Force -Recurse | Out-Null
New-Item -Path $appData -type "Directory"| Out-Null
$WshShell = New-Object -comObjectWScript.Shell
# Создание ярлыков для локальных дисков
Get-Volume | %{
$DiskLetter = $_.DriveLetter
$shkPath=Join-Path -Path $appData -ChildPath ("Диск '{0}'.lnk" -f $DiskLetter)
# Создание СОМ-объекта для ярлыка
$Shortcut = $WshShell.CreateShortcut($shkPath)
$Shortcut.TargetPath = $cmd
$Shortcut.Description=("Диск {0}" -f $DiskLetter)
$Shortcut.Arguments=("{0}:\" -f $DiskLetter)
$Shortcut.WorkingDirectory=("{0}:\" -f $DiskLetter)
# Проверка типа устройства
switch ($_.driveType)
{
"Fixed" {
$Shortcut.IconLocation="C:\Windows\System32\imageres.dll,31"
$Shortcut.Save()
}
"CD-ROM" {
$Shortcut.IconLocation="C:\Windows\System32\imageres.dll,25"
$Shortcut.Save()
}
"Removable" {$Shortcut=$null; }
Default {$Shortcut=$null; }
}
}
Листинг 5. Функция распознавания переменных
FunctionFreplace{
foreach ($tempValuein $input) {
$input
$tempString= New-ObjectSystem.Text.StringBuilder
$ArFrom = '$fio', '$domain', '$department', '$login'
$ArTo = $fio,$domain, $department,$UserLogin
for ($i=0; $i -lt ($ArFrom.length); $i++)
{
try{
if ($tempValue-like ("*"+$ArFrom[$i]+"*"))
{
$tempString=$tempString.toupper()
$tempValue=$tempString.Replace($ArFrom[$i].toupper(),$ArTo[$i])
}
}
catch{}
}}
$a # возвращаемое значение
}
…
Листинг 6. Формирование списка подключаемых сетевых дисков
# Определение имени (login) текущего пользователя, переменные окружения set
$Login=(direnv:username).value
# Определение имени домена, в который вошел пользователь
$domain= (get-itemenv:userDomain).value
# Поиск учетной записи пользователя в Active Directory
$objUser=[ADSISearcher]""
$objUser.SearchRoot=[ADSI]""
$objUser.filter="(&(samaccountname=$Login)(objectclass=person))"
$result= $objUser.FindOne()
# Определение переменных для работы функции автозамены
$FIO = $result.properties.description
$Deaprtment = $result.properties.department
$login = $result.properties.samaccountname
# Определение списка групп, членами которых является пользователь. Фильтрация по префиксу (LABEL)
$prefix = "dsk-msk$"
$prefixGroups = $result.properties.memberof | ? {$_ -like ("CN={0}*" -f $prefix)} | %{
$objGrp=[ADSI]("LDAP://"+$_)
$val= $objGrp.properties.item("info").value -split "`n"
$DiskDescription = $val[0] | Freplace
$DiskMountPath = $val[1] | Freplace
$DiskLetter = $objGrp.properties.item("description").value
}
Листинг 7. Шаблон вызова C#-функции из PowerShell
$code = @"
using …;
publicclass НазваниеКласса
{
publicstaticintНазваниеФункции(string Параметр1, …)
{
return ВозвращаемоеЗначение;
}
}
"@
#Get-TypeData | ? {$_.TypeName -like "*type*"}
Add-Type -TypeDefinition $code -LanguageCSharp
$result = [НазваниеКласса]::НазваниеФункции("Параметр1", …)
Листинг 8. Управление сетевыми дисками и их ярлыками
$code = @"
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Management.Automation;
usingSystem.Runtime.InteropServices;
publicclassNetDrive
{
///
/// Структура NETRESOURCE для подключения сетевых ресурсов
///
[StructLayout(LayoutKind.Sequential)]
internalstruct NETRESOURCE
{
publicintdwScope;
publicintdwType;
publicintdwDisplayType;
publicintdwUsage;
publicstringLocalName;
publicstringRemoteName;
publicstringComment;
publicstringProvider;
}
///
/// API-функция подключения сетевого ресурса (ASCII)
///
/// структура NETRESOURCE
/// имя пользователя (null)
/// пароль пользователя (null)
/// флаг (=0)
/// строка кода ошибки
[DllImport("mpr.dll", EntryPoint = "WNetAddConnection2A", CharSet = System.Runtime.InteropServices.CharSet.Ansi)]
privatestaticexternint WNetAddConnection2A
(ref NETRESOURCE lpNetResource, stringlpPassword, stringlpUsername, Int32 dwFlags);
publicstaticintConnectDisk(stringletter, stringnetPath)
{
NETRESOURCE myNetResource = new NETRESOURCE();
//RESOURCE_GLOBALNET
myNetResource.dwScope = 2;
//RESOURCETYPE_DISK
myNetResource.dwType = 1;
//RESOURCEDISPLAYTYPE_SHARE
myNetResource.dwDisplayType = 3;
//RESOURCEUSAGE_CONNECTABLE
myNetResource.dwUsage = 1;
myNetResource.LocalName = string.Format("{0}:", letter);
myNetResource.RemoteName = netPath;
myNetResource.Provider = null;
intret = WNetAddConnection2A(refmyNetResource, null, null, 0);
returnret;
}
}
"@
# Компиляция программного кода
Add-Type -TypeDefinition $code -LanguageCSharp
# Подключение сетевого диска
[NetDrive]::ConnectDisk($DiskLetter, $DiskMountPath)
# Создание ярлыка на начальном экране
$shkPath=Join-Path -Path $appData -ChildPath("{0}({1:})" -f $DiskDescription, $DiskLetter)
$Shortcut = $WshShell.CreateShortcut($shkPath)
$Shortcut.TargetPath = $cmd
$Shortcut.Description=("{0}({1:})" -f $DiskDescription, $DiskLetter)
$Shortcut.Arguments=("{0}:\" -f $DiskLetter)
$Shortcut.WorkingDirectory=("{0}:\" -f $DiskLetter)
$Shortcut.IconLocation="C:\Windows\System32\imageres.dll,22"
$Shortcut.Save()
Название.{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.
%windir%\System32\explorer.exeshell:::{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Листинг 9. Создание ярлыков на системные объекты
$names="Корзина.{645FF040-5081-101B-9F08-00AA002F954E}.50", "Мой Компьютер.{20D04FE0-3AEA-1069-A2D8-08002B30309D}.104"
foreach ($namein $names)
{
# Формирование пути к папке
$rootData = Join-Path -Path ((Get-Item env:appData).value) -ChildPath ("Microsoft\Windows\Start Menu\Programs\")
# Создание ярлыка на начальном экране
$WshShell = New-Object -comObjectWScript.Shell
# Вычленение GUID
$LinkGUID=[string]$name -replace "^(.+).({.+}).(.+)$", '$2'
# Вычленение Имени
$LinkName=[string]$name -replace "^(.+).({.+}).(.+)$", '$1'
# Вычленение Номера Иконки
$IconNumber = [string]$name -replace "^(.+).({.+}).(.+)$", '$3'
# Путь к иконке
$shkPath=("{0}{1}.lnk" -f $appData,$LinkName)
$Shortcut = $WshShell.CreateShortcut($shkPath)
$Shortcut
$Shortcut.TargetPath = "%windir%\explorer.exe"
$Shortcut.Description=""
$Shortcut.Arguments=("shell:::{0}" -f $LinkGUID)
$Shortcut.WorkingDirectory="%WinDir%"
$Shortcut.IconLocation=("%windir%\System32\imageres.dll,{0}" -f $IconNumber)
$Shortcut.Save()
}
-----------------------------------------------------------------------------------------------------------------
Создаем гостевую Wi-Fi-сеть в компании. Настройка Cisco AIR для работы с несколькими SSID
Виталий Резников
ap(config)# dot11 ssid PRIVATE-CORP
ap(config-ssid)# guest-mode
ap(config)# dot11 mbssid
ap(config)# dot11 ssid GUEST-CORP << гостевой широковещательный SSID
ap(config-ssid)# vlan 2
ap(config-ssid)# authentication open
ap(config-ssid)# authentication key-management wpa version 2
ap(config-ssid)# mbssid guest-mode << виден в эфире любым клиентам Wi-Fi
ap(config-ssid)# wpa-psk ascii 0 GuestSecretKey
ap(config)# dot11 ssid PRIVATE-CORP << приватный SSID, поиск ведется вручную
ap(config-ssid)# vlan 1 << включаем в «нативную» vlan 1
ap(config-ssid)# authentication open
ap(config-ssid)# authentication key-management wpa version 2
ap(config-ssid)# wpa-psk ascii 0 PrivatSecretKey
ap(config)# interface Dot11Radio0
ap(config-if)# GUEST-CORP
ap(config-if)# PRIVATE-CORP
ap(config-if)# encryption vlan 2 mode ciphers aes-ccm
ap(config-if)# encryption vlan 1 mode ciphers aes-ccm
ap# sh dot11 bssid
ap(config)# interface Dot11Radio0.1
ap(config-if)# encapsulation dot1Q 2 << указываем номер vlan
ap(config-if)# bridge-group 2
bridge-group 2 subscriber-loop-control
bridge-group 2 block-unknown-source
no bridge-group 2 source-learning
no bridge-group 2 unicast-flooding
bridge-group 2 spanning-disabled
ap(config)# interface Dot11Radio0.2
ap(config-if)# encapsulation dot1Q 1 native << оставляем vlan 1 не тегированной
ap(config-if)# bridge-group 1
ap(config)# interface GigabitEthernet0.1
ap(config-if)# encapsulation dot1Q 2
ap(config-if)# bridge-group 2
ap(config)# interface GigabitEthernet0.2
ap(config-if)# encapsulation dot1Q 1 native
ap(config-if)# bridge-group 1
ap# sh vlans
ap(config)# bridge irb
conf t
int fa 0/1
switchport mode trunk
switchport trunk encapsulation dot1q
switchport trunk native vlan 1
switchport trunk allowed vlan 1,2
Office-R(config)# interface FastEthernet0/0.1
Office-R(config-if)# encapsulation dot1Q 2
Office-R(config-if)# ip address 10.10.10.254 255.255.255.0
Office-R(config-if)# ip access-group FROM_GUEST-LAN-WIFI in << создадим позже
Office-R(config-if)# ip nat inside
Office-R(config)# ip dhcp pool GUEST-LAN-WIFI
Office-R(dhcp-config)# import all
Office-R(dhcp-config)# network 10.10.10.0 255.255.255.0
Office-R(dhcp-config)# default-router 10.10.10.254
Office-R(dhcp-config)# dns-server 8.8.8.8 8.8.4.4
Office-R(config)# ip access-list extended FROM_GUEST-LAN-WIFI
Office-R(config-ext-nacl)# deny ip 10.10.10.0 0.0.0.255 192.168.0.0 0.0.0.255
Office-R(config-ext-nacl)# deny ip 10.10.10.0 0.0.0.255 25.1.1.0 0.0.0.255
Office-R(config-ext-nacl)# permit udp any any eq bootps
Office-R(config-ext-nacl)# permit icmp 10.10.10.0 0.0.0.255 any echo
Office-R(config-ext-nacl)# permit udp 10.10.10.0 0.0.0.255 any eq domain
Office-R(config-ext-nacl)# permit tcp 10.10.10.0 0.0.0.255 any eq ftp domain www 443
Office-R(config-ext-nacl)# deny ip any any
Office-R(config)# ip access-list extended NAT
Office-R(config-ext-nacl)# 90 deny ip 10.10.10.0 0.0.0.255 192.168.0.0 0.0.0.255
Office-R(config-ext-nacl)# 95 permit ip 10.10.10.0 0.0.0.255 any
-----------------------------------------------------------------------------------------------------------------
Разделяемые файловые ресурсы Windows. Доступ через HTTPS. Часть 1. Установка приложения
Григорий Антропов
# yum install php php-cli php-common php-pear php-gd php-mcrypt php-mcrypt php-xml php-ldap php-imap php-pear-HTTP-OAuth php-pear-Mail-mimeDecode mod_ssl
# chkconfig httpd on
# chown -R apache:apache /opt/www/ajaxplorer-4.2.0
# service httpd start
define("AJXP_LOCALE", "ru_RU.UTF-8")
Листинг 1. Закомментированный блок, отвечающий за отображение переключателя локализации
Листинг 2. Репозиторий Shared Elements закомментирован
/* Remove Shared Elements from interface
$REPOSITORIES["ajxp_shared"] = array(
"DISPLAY" => "Shared Elements",
"DISPLAY_ID" => "363",
"DRIVER" => "ajxp_shared",
"DRIVER_OPTIONS" => array(
"DEFAULT_RIGHTS" => "rw"
)
);
*/
Листинг 3. Удаление из меню действия Open with...
Листинг 4. Корректировка работы IE 8 с именами файлов, содержащих пробелы
if(preg_match('/ MSIE /',$_SERVER['HTTP_USER_AGENT']) || preg_match('/ WebKit /',$_SERVER['HTTP_USER_AGENT'])){
$localName = str_replace("+", "%20 ", urlencode(SystemTextEncoding::toUTF8($localName)));
}
-----------------------------------------------------------------------------------------------------------------
DNS Tunneling. Проходим сквозь любые брандмауэры
Игорь Савчук
# apt-get install nstx
iface tun0 inet static
address 10.0.0.1
netmask 255.0.0.0
heyoka.exe -s -d mydomain.com -p 3389
-----------------------------------------------------------------------------------------------------------------
Защищаемся от DDoS-атак
Андрей Бирюков
LimitRequestBody=102400
LimitRequestFields=50
LimitRequestFieldSize=1024
LimitRequestLine=2048
LimitXMLRequestBody=102400
# sysctl net.ipv4.icmp_echo_ignore_all=1
# iptables -A INPUT -p icmp -j DROP --icmp-type 8
# sysctl -w net.ipv4.tcp_max_syn_backlog=1024e
# sysctl -w net.ipv4.tcp_synack_retries=1
# sysctl -w net.ipv4.tcp_syncookies=1
# iptables -I INPUT -p tcp --syn --dport 80 -m iplimit --iplimit-above 10 -j DROP
# iptables -I INPUT -p udp --dport 53 -j DROP -m iplimit --iplimit-above 1
-----------------------------------------------------------------------------------------------------------------
Шлюз электронной почты Scrollout F1
Сергей Яремчук
$ cd /tmp
$ wget http://sourceforge.net/projects/scrollout/files/update/scrolloutf1.tar/download -O scrolloutf1.tar
$ tar -xvf scrolloutf1.tar
$ chmod 755 /tmp/scrolloutf1/www/bin/*
$ sudo /tmp/scrolloutf1/www/bin/install.sh
order deny,allow
deny from all
allow from 192.168.0.10
-----------------------------------------------------------------------------------------------------------------
Windows Server 2012. Практическое использование Dynamic Access Control
Сергей Горбановский
gpupdate /force
Update-FSRMClassificationPropertyDefinition
gpupdate /force
Klist purge
-----------------------------------------------------------------------------------------------------------------
Познакомьте начальника с Asterisk. Возможности IP-телефонии для мобильных пользователей
Вячеслав Лохтуров
$ sudo apt-get install asterisk
$ sudo echo > /etc/asterisk/sip.conf
$ sudo nano /etc/asterisk/sip.conf
[general]
transport=udp
disallow=all
allow=alaw
[101]
type=friend
secret=tpassword1
host=dynamic
[102]
type=friend
secret=tpassword2
host=dynamic
$ sudo echo > /etc/asterisk/extensions.conf
$ nano /etc/asterisk/extensions.conf
[default]
exten => 199,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
exten => _1XX,1,Dial(SIP/${EXTEN},10)
$ sudo asterisk -x 'sip reload'
$ sudo asterisk -x 'dialplan reload'
$ sudo nano /etc/asterisk/sip.conf
;...
[sipnet]
type=peer
host=sipnet.ru
defaultuser=0012345678
fromuser=0012345678
fromdomain=sipnet.ru
secret=sipnetpassword
canreinvite=no
$ nano /etc/asterisk/extensions.conf
;...
exten => _8XXXXXXXXXX,1,Dial(SIP/sipnet/${EXTEN})
$ sudo asterisk -x 'reload'
$ sudo echo > /etc/asterisk/followme.conf
$ sudo nano /etc/asterisk/followme.conf
[101]
number=>89161234567,30
number=>891687654321,30
context=>default
[102]
number=>89162323232,30
number=>89163434345,30
context=>default
$ nano /etc/asterisk/extensions.conf
;...
exten => _1XX,1,Dial(SIP/${EXTEN},10)
same => n,FollowMe(${EXTEN})
;...
$ sudo asterisk -x 'reload'
$ cd /usr/share/asterisk/sounds/en
$ wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-alaw-current.tar.gz
$ tar -xvf asterisk-core-sounds-ru-alaw-current.tar.gz
-----------------------------------------------------------------------------------------------------------------
Создание key/value-хранилищ данных. Часть 3. Сетевое взаимодействие с клиентом
Александр Календарев
$telnet 127.0.0.1 11211
>get abc\r\n
$telnet 127.0.0.1 11211
>set abc 0 0 6\r\n
$telnet 127.0.0.1 11211
>delete abc\r\n
#include
struct ev_loop *loop = ev_default_loop(0);
struct ev_loop *loop = EV_DEFAULT;
// Инициализация события
ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
// Присоединение слушателя события в основной цикл
ev_io_start (loop, &stdin_watcher);
// Запуск цикла на «прослушивание» событий
ev_loop(loop);
ev_io_init (ev_io *, callback, int fd, int events)
ev_io_set (ev_io *, int fd, int events)
/* создаем структуру адреса и заполняем ее int port – номер слушаемого порта*/
struct sockaddr_in *sa = (struct sockaddr_in *)malloc(sizeof(sockaddr_in));
sa->sin_addr.s_addr = htonl(INADDR_ANY);
sa->sin_family = AF_INET;
sa->sin_port = htons(port);
/* создаем сокет и устанавливаем параметры */
int sock,flag = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag));
long fl = fcntl(sock, F_GETFL);
if (fl == -1) {
perror("can't get fcntl sock option"); exit(1);
}
/*устанавливаем сокет в неблокируемый режим*/
set_nonblock(sock,1);
/* присоединяем адрес к сокету */
if ( bind(sock, sa, sizeof(sockaddr_in)) < 0) {
perror("bind"); exit(1);
}
/* начинаем слушать сокет */
if (listen(mc_sock, 10) < 0) {
perror ("publisher listen"); exit(1);
}
int set_nonblock(int sock,int value)
{
long fl = fcntl(sock, F_GETFL);
if (fl == -1) return fl;
if (value) fl |= O_NONBLOCK;
else fl &= ~O_NONBLOCK;
return fcntl (sock, F_SETFL, fl);
}
struct ev_loop *loop = ev_default_loop(0);
assert(loop);
/* устанавливаем ссылку на контекст структуры пользовательских данных, чтоб иметь доступ к этим данным из любой функции обратного вызова */
ev_set_userdata(loop,(void*)server_ctx);
/* инициализация события и назначение обработчика: функции обратного вызова */
ev_io_init( &mc_io, memcached_on_connect, mc_sock, EV_READ); ev_io_start(loop, &mc_io);
/* инициализируем таймер, если он необходим*/
struct ev_timer timeout_watcher;
ev_timer_init(&timeout_watcher, periodic_watcher, TIME_CHECK_INTERVAL);
ev_timer_again(loop, &timeout_watcher);
/* инициализируем обработку сигнала, если необходимо*/
struct ev_signal signal_watcher;
ev_signal_init (&signal_watcher, sigint_cb, SIGTERM);
ev_signal_start (loop, &signal_watcher);
/* запуск основного цикла слушателя событий */
ev_loop(loop, 0);
void
memcached_on_connect(EV_P_ ev_io *io, int revents) {
while (1) {
int client = accept(io->fd, NULL, NULL);
if (client >= 0) {
ev_io *mctx = memcached_client_new(client);
if (mctx) {
ev_io_start(EV_A_ mctx);
} else {
perror("failed to create connection"); close(client);
}
} else {
if (errno == EAGAIN)
return;
if (errno == EMFILE || errno == ENFILE) {
perror("out of file descriptors");
close_all(EV_A);
} else if (errno != EINTR) {
perror("accept connections error");
}
}
}
static ev_io*
memcached_client_new(int sock) {
if (setup_socket(sock) != -1) {
/* выделение места для контекста соединения*/
memcache_ctx *mctx = calloc(1, sizeof(memcache_ctx));
if (!mctx) {
printf( "allocate error size=%d\n", sizeof(memcache_ctx));
return NULL;
}
/* выделение места для буфера ввода/вывода*/
mctx->value = malloc(BUFSIZE);
if (!mctx->value) {
printf("allocate error size=%d\n",BUFSIZE);
return NULL;
}
/* инициализация события на прослушивание */
ev_io_init(&mctx->io, memcached_client, sock, EV_READ);
/* сохрание информации в глобальной области clients[MAX_OPEN_FILES].*/
clients[sock].io = &mctx->io;
clients[sock].flags = FD_ACTIVE;
clients[sock].cleanup = (cleanup_proc)memcached_client_free;
clients[sock].mc_ctx = mctx;
return &mctx->io;
}
}
static int
setup_socket(int sock)
{
int keep_alive = 1;
struct linger l = {0, 0};
if (set_nonblock(sock, 1) == -1) return -1;
if (setsockopt(sock, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) == -1) return -1;
if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE,
&keep_alive, sizeof(keep_alive)) == -1) return -1;
return 0;
}
static void
memcached_client_free(memcache_ctx *ctx)
{
if (!ctx) return;
if (ctx->value) free(ctx->value);
free(ctx);
clients[ctx->io.fd].mc_ctx = NULL;
}
-----------------------------------------------------------------------------------------------------------------
HTML5: а что со стилями?
Кирилл Сухов
CSS3
Hello CSS3!
.myDiv {
background-color: #55cc55;
border-radius: 10px;
border: 2px solid #ddddd;
padding: 10px;
width: 200px;
}
.myDiv {
/* background-color: #55cc55; */
/* webkit */
background: -webkit-gradient(linear, left top, left bottom, from(#55ff55), to(#559955));
/* firefox */
background: -moz-linear-gradient(top, #55ff55, #559955);
/* ie 10 */
background: -ms-linear-gradient(top, #55ff55, #559955);
color: #dddddd;
text-align: center;
border-radius: 10px;
box-shadow: 10px 10px 5px #888;
color: #dddddd;
text-align: center;
border-radius: 10px;
.myDiv {
/* border-radius: 10px; */
border-top-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-left-radius: 10px;
border-bottom-right-radius: 0px;
resize: both;
… … …
.myTextDiv {
border-radius: 10px;
background: -webkit-gradient(linear, left top, left bottom, from(#cccccc), to( #000000));
background: -moz-linear-gradient(top, #cccccc, #000000);
background: -ms-linear-gradient(top, #cccccc, #000000);
overflow: auto;
box-shadow: 10px 10px 5px #888;
color: #dddddd;
text-align: left;
padding: 10px;
width: 600px;
}
column-width: 130px;
-moz-column-width: 130px;
-webkit-column-width: 130px;
column-gap: 20px;
-moz-column-gap: 20px;
-webkit-column-gap: 20px;
column-rule: 1px solid #ffbd85;
-moz-column-rule: 1px solid #ffbd85;
-webkit-column-rule: 1px solid #ffbd85;
.header2 {
-webkit-column-span:all;
-moz-column-span:all;
-ms-column-span:all;
column-span: all;
text-align: center;
}
text-shadow:3px 2px #996600;
text-overflow:ellipsis;
word-wrap:break-word;
@font-face {
font-family: 'mySuperFont';
src: url('calligra.ttf');
}
.myTextDiv {
font-family: "superFont";
border-radius: 10px;
.myDiv {
transform: rotate(45deg);
.myTextDiv {
transform:skew(20deg,10deg);
opacity:0.6;
transform:rotateX(45deg) rotateY(10deg) rotateZ(10deg);
transform: rotate3d(1,1,1, deg);
@keyframes myAnimation {
from {transform: rotateY(0deg);}
to {transform: rotateY(180deg);}
}
.myTextDiv {
animation: myAnimation 10s 3;
@keyframes myAnimation {
0% {transform: rotateY(0deg);}
25% {transform: rotateY(90deg);}
50% {transform: rotateY(180deg);}
75% {transform: rotateY(270deg);}
100% {transform: rotateY(0deg);}
}
-----------------------------------------------------------------------------------------------------------------
Программное решение стандарта ABAC на основе HERASAF
Виктор Ермолаев
adviser
6
Листинг 1. Запрос о допустимости заключения контракта между тем или иным консультантом и компанией
adviser
BigProfits
7
BigProfits
Листинг 2. Ответ PDP на запрос о допустимости заключения контракт
Permit
financial department
report
accept
finDirector
boss
true
4.0.0
heras-af
heras-af
1.0
herasaf-release
false
true
http://maven.herasaf.org/herasaf-release
org.herasaf.xacml.core
herasaf-xacml-core
1.0.0.M3
public class simpleApp {
private PDP pdp;
private UnorderedPolicyRepository repo;
private List policiesIDs;
private enum datatypes {
STRING,
INTEGER,
BOOLEAN
}
public void createPDP() throws Exception { }
public void simplePEP() throws Exception { }
public void destroyPDP() throws Exception { }
public AttributeType buildAttribute(String attributeId, String datatype, String value) throws Exception { }
public static void main(String[] args) throws Exception
{
simpleApp myApp = new simpleApp();
myApp.createPDP();
myApp.simplePEP();
myApp.destroyPDP();
}
}
Листинг 3. Наполнение класса функционалом
public void createPDP() throws Exception
{
SimplePDPConfiguration cfg = new SimplePDPConfiguration();
//cfg.setPip(new customPIP());
pdp = SimplePDPFactory.getSimplePDP(cfg);
repo = (UnorderedPolicyRepository)pdp.getPolicyRepository();
Evaluatable chinese_wall = PolicyMarshaller.unmarshal(
new File("путь\\к\\политикам\\chinese_wall.xml"));
Evaluatable delegation = PolicyMarshaller.unmarshal(
new File("путь\\к\\политикам\\delegation.xml"));
EvaluatableID chinese_wallID = chinese_wall.getId();
EvaluatableID delegationID = delegation.getId();
List policies = new ArrayList();
policies.add(chinese_wall);
policies.add(delegation);
policiesIDs = new ArrayList();
policiesIDs.add(chinese_wallID);
policiesIDs.add(delegationID);
repo.deploy(policies);
}
public void destroyPDP() throws Exception
{
repo.undeploy(policiesIDs);
pdp = null;
}
public void simplePEP() throws Exception
{
RequestType request = RequestMarshaller.unmarshal(
new File("путь\\к\\запросу\\request.xml"));
RequestMarshaller.marshal(request, System.out);
ResponseType response = pdp.evaluate(request);
ResponseMarshaller.marshal(response, System.out);
}
public AttributeType buildAttribute(String attributeId, String datatype, String value) throws Exception
{
AttributeValueType attributeValue = new AttributeValueType();
attributeValue.getContent().add(value);
AttributeType attribute = new AttributeType();
attribute.setAttributeId(attributeId);
attribute.getAttributeValues().add(attributeValue);
datatypes type = datatypes.valueOf(datatype.toUpperCase());
switch (type)
{
case STRING :
StringDataTypeAttribute
stringAttributeType = new StringDataTypeAttribute();
attribute.setDataType(stringAttributeType);
break;
case INTEGER :
IntegerDataTypeAttribute
integerAttributeType = new IntegerDataTypeAttribute();
attribute.setDataType(integerAttributeType);
break;
case BOOLEAN :
BooleanDataTypeAttribute
booleanAttributeType = new BooleanDataTypeAttribute();
attribute.setDataType(booleanAttributeType);
break;
}
return attribute;
}
public void simplePEP() throws Exception
{
RequestType request = new RequestType();
SubjectType subject = new SubjectType();
subject.getAttributes().add(buildAttribute("subject-role", "string", "adviser") );
subject.getAttributes().add(buildAttribute("last-employer", "string", "BigProfits") );
subject.getAttributes().add(buildAttribute("terminated-ago", "integer", "7") );
request.getSubjects().add(subject);
ResourceType resource = new ResourceType();
resource.getAttributes().add(buildAttribute("competitors", "string", "BigProfits") );
request.getResources().add(resource);
RequestMarshaller.marshal(request, System.out);
ResponseType response = pdp.evaluate(request);
ResponseMarshaller.marshal(response, System.out);
}
class customPIP implements PIP
{
public List addSubjectAttributesToRequest(RequestType rt, String s, String s1, String s2, String s3)
{
try
{
AttributeValueType subjectAttribute = new AttributeValueType();
List subjectAttributes = new ArrayList();
if (s.equals("terminated-ago")) {
subjectAttribute.getContent().add("7");
subjectAttributes.add(subjectAttribute);
}
return subjectAttributes;
} catch (Exception x) {
throw new RuntimeException(x);
}
}
public List addResourceAttributesToRequest(RequestType rt, String s, String s1, String s2)
{
try
{
RequestMarshaller.marshal(rt, System.out);
return new ArrayList();
} catch (Exception x) {
throw new RuntimeException(x);
}
}
public List addActionAttributesToRequest(RequestType rt, String s, String s1, String s2)
{
try
{
RequestMarshaller.marshal(rt, System.out);
return new ArrayList();
} catch (Exception x) {
throw new RuntimeException(x);
}
}
public List addEnvironmentAttributesToRequest(RequestType rt, String s, String s1, String s2)
{
try
{
RequestMarshaller.marshal(rt, System.out);
return new ArrayList();
} catch (Exception x) {
throw new RuntimeException(x);
}
}
}
-----------------------------------------------------------------------------------------------------------------