Проект 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;

All my life...

.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); } } } -----------------------------------------------------------------------------------------------------------------