Убить «Билла», вторая попытка, или Novell OES 2 Алексей Барабанов > rpm -qpl novell-oes-dhcp-conf-1.0.0-41.x86_64.rpm > rpm -qpl novell-bind-9.3.2-50.x86_64.rpm > strings $(which novell-named) | grep "named version" ----------------------------------------------------------------------------------------------------------------- Каковы первые впечатления от работы с openSUSE 10.3 Сергей Яремчук zypper update -t package ----------------------------------------------------------------------------------------------------------------- Используем Bugzilla в качестве ServiceDesk Рашид Ачилов ServerAdmin webmaster@bugzilla.shelton.net DocumentRoot /usr/local/www/vhosts/bugzilla ServerName bugzilla.shelton.net ServerAlias bugs.shelton.ru ErrorLog /var/log/httpd/bugzilla/httpd-error TransferLog /var/log/httpd/bugzilla/access # ACL's for site Order deny,allow Deny from all Allow from 192.168.0.0/255.255.0.0 # Displaying options Options +ExecCGI AllowOverride Limit DirectoryIndex index.cgi AddHandler cgi-script .cgi AddDefaultCharset utf-8 --- /tmp/bugzilla-ru-3.0/template/ru/default/global/variables.none.tmpl Sat Jun 2 08:26:12 2007 +++ global/variables.none.tmpl Fri Jul 13 11:01:00 2007 @@ -44,33 +44,33 @@ #%] [% terms = { - "bug" => "ошибка", - "bug_gen" => "ошибки", - "bug_dat" => "ошибке", - "bug_acc" => "ошибку", - "bug_abl" => "ошибкой", - "bug_obj" => "ошибке", - "Bug" => "Ошибка", - "Bug_gen" => "Ошибки", - "Bug_dat" => "Ошибке", - "Bug_acc" => "Ошибку", - "Bug_abl" => "Ошибкой", - "Bug_obj" => "Ошибке", # Стараемся не использовать в Bugzilla-ru - "abug" => "ошибка", # Стараемся не использовать в Bugzilla-ru - "ABug" => "Ошибка", - "bugs" => "ошибки", - "bugs_gen" => "ошибок", - "bugs_dat" => "ошибкам", - "bugs_acc" => "ошибки", - "bugs_abl" => "ошибками", - "bugs_obj" => "ошибках", - "Bugs" => "Ошибки", - "Bugs_gen" => "Ошибок", - "Bugs_dat" => "Ошибкам", - "Bugs_acc" => "Ошибки", - "Bugs_abl" => "Ошибками", - "Bugs_obj" => "Ошибках", - "zeroSearchResults" => "Ошибок не найдено", + "bug" => "задача", + "bug_gen" => "задачи", + "bug_dat" => "задаче", + "bug_acc" => "задачу", + "bug_abl" => "задачей", + "bug_obj" => "задаче", + "Bug" => "Задача", + "Bug_gen" => "Задачи", + "Bug_dat" => "Задаче", + "Bug_acc" => "Задачу", + "Bug_abl" => "Задачей", + "Bug_obj" => "Задаче", # Стараемся не использовать в Bugzilla-ru + "abug" => "задача", # Стараемся не использовать в Bugzilla-ru + "ABug" => "Bug", + "bugs" => "задачи", + "bugs_gen" => "задач", + "bugs_dat" => "задачам", + "bugs_acc" => "задачи", + "bugs_abl" => "задачами", + "bugs_obj" => "задач", + "Bugs" => "Задачи", + "Bugs_gen" => "Задач", + "Bugs_dat" => "Задачам", + "Bugs_acc" => "Задачи", + "Bugs_abl" => "Задачами", + "Bugs_obj" => "Задач", + "zeroSearchResults" => "Задач не найдено", "Bugzilla" => "Bugzilla" } %] --- /tmp/bugzilla-ru-3.0/template/ru/default/email/newchangedmail.txt.tmpl Thu May 24 20:59:52 2007 +++ newchangedmail.txt.tmpl Fri Jul 13 11:10:40 2007 @@ -24,7 +24,7 @@ [% PROCESS "global/variables.none.tmpl" %] From: [% Param('mailfrom') %] To: [% to %] -Subject: [[% terms.Bug %] [%+ bugid %]] [% neworchanged %][%+ summary %] +Subject: [[% terms.ABug %] [%+ bugid %]] [% neworchanged %] new or changed task! Content-Type: text/plain; charset=utf-8 X-Bugzilla-Reason: [% reasonsheader %] X-Bugzilla-Type: newchanged @@ -41,6 +41,7 @@ X-Bugzilla-Changed-Fields: [% changedfields %] [%+ threadingmarker %] +[%+ summary %] [%+ Param('urlbase') %]show_bug.cgi?id=[% bugid %] [%+ diffs %] --- /tmp/bugzilla-ru-3.0/template/ru/default/global/field-descs.none.tmpl Tue May 29 07:09:51 2007 +++ global/field-descs.none.tmpl Wed Jun 27 16:21:00 2007 @@ -111,7 +111,7 @@ "VERIFIED" => "Принята", "CLOSED" => "Закрыта" } %] -[% resolution_descs = { "FIXED" => "Исправлена", +[% resolution_descs = { "FIXED" => "Завершена", "INVALID" => "Аннулирована", "WONTFIX" => "Отказано", "DUPLICATE" => "Дублирующая", --- /tmp/1/template/ru/default/bug/create/create.html.tmpl Thu May 24 01:11:07 2007 +++ default/bug/create/create.html.tmpl Mon Aug 13 11:22:04 2007 @@ -231,7 +232,7 @@ [% sel = { description => 'Серьезность', name => 'bug_severity' } %] [% INCLUDE select %] - [% sel = { description => 'Платформа', name => 'rep_platform' } %] + [% sel = { description => 'Город', name => 'rep_platform' } %] [% INCLUDE select %] @@ -245,10 +246,20 @@ [% END %] - [% sel = { description => 'ОС', name => 'op_sys' } %] + [% sel = { description => 'Подразделение', name => 'op_sys' } %] [% INCLUDE select %] + + test + + [% USE Bugzilla %] + [% SET field = Bugzilla.get_fields({ name => "cf_addr" }) %] + [% SET value = ${field.name} ? IF ${field.name}.defined %] + [% PROCESS bug/field.html.tmpl editable=1 value_span=2 disabled=0 %] + + + [% IF Param('usetargetmilestone') && Param('letsubmitterchoosemilestone') %] [% sel = { description => 'Запланировано', name => 'target_milestone' } %] @@ -394,10 +406,12 @@ [% FOREACH field = Bugzilla.get_fields({ obsolete => 0, custom => 1, enter_bug => 1 }) %] [% SET value = ${field.name} IF ${field.name}.defined %] + [% IF field.name != 'cf_addr' %] [% PROCESS bug/field.html.tmpl editable=1 value_span=2 %] [% END %] + [% END %] Аннотация: --- /tmp/1/template/ru/default/global/field-descs.none.tmpl Tue May 29 07:09:51 2007 +++ default/global/field-descs.none.tmpl Wed Aug 8 12:39:04 2007 @@ -36,6 +36,7 @@ "bug_status" => "Состояние", "changeddate" => "Дата последнего изменения", "cc" => "Подписчики", + "cf_addr" => "Адрес", "classification" => "Раздел", "cclist_accessible" => "Список подписчиков?", "component_id" => "Код компонента", @@ -50,7 +51,7 @@ "groupset" => "Группы", "keywords" => "Ключевые слова", "newcc" => "Подписчики", - "op_sys" => "ОС", + "op_sys" => "Подразделение", "opendate" => "Дата открытия", "percentage_complete" => "% выполнения", "priority" => "Приоритет", @@ -58,7 +59,7 @@ "product" => "Продукт", "qa_contact" => "Приемка", "remaining_time" => "Осталось времени", - "rep_platform" => "Платформа", + "rep_platform" => "Город", "reporter" => "Инициатор", "reporter_accessible" => "Инициатор доступен?", "resolution" => "Решение", --- /tmp/1/template/ru/default/search/form.html.tmpl Tue May 29 06:45:55 2007 +++ default/search/form.html.tmpl Wed Aug 8 12:40:17 2007 @@ -406,7 +406,7 @@ @@ -419,7 +419,7 @@
- : + :
--- /tmp/1/template/ru/default/list/edit-multiple.html.tmpl Tue May 22 00:44:10 2007 +++ default/list/edit-multiple.html.tmpl Tue Aug 7 18:59:53 2007 @@ -93,7 +93,7 @@ + [% IF field.name != 'cf_addr' %] [% PROCESS bug/field.html.tmpl value=bug.${field.name} editable = bug.check_can_change_field(field.name, 0, 1) value_span = 2 %] + [% END %] [% END %] [% END %] @@ -615,23 +617,23 @@
- : + :
@@ -116,7 +116,7 @@
--- /tmp/1/template/ru/default/list/table.html.tmpl Tue May 22 01:03:48 2007 +++ default/list/table.html.tmpl Wed Aug 8 14:57:45 2007 @@ -42,24 +42,24 @@ [% abbrev = { - "bug_severity" => { maxlength => 8 } , - "priority" => { maxlength => 3 , title => "Прт" } , - "rep_platform" => { maxlength => 3 , title => "Плф" } , - "bug_status" => { maxlength => 10 } , - "assigned_to" => { maxlength => 30 , ellipsis => "..." } , + "bug_severity" => { maxlength => 22 , title => "Серьезн" } , + "priority" => { maxlength => 16 , ellipsis => "...", title => "Приор" } , + "rep_platform" => { maxlength => 25 } , + "bug_status" => { maxlength => 24 } , + "assigned_to" => { maxlength => 30 , ellipsis => "..." , title => "Исполнитель" } , "assigned_to_realname" => { maxlength => 20 , ellipsis => "..." } , "reporter" => { maxlength => 30 , ellipsis => "..." } , "reporter_realname" => { maxlength => 20 , ellipsis => "..." } , "qa_contact" => { maxlength => 30 , ellipsis => "..." , title => "Приемка" } , "qa_contact_realname" => { maxlength => 20 , ellipsis => "..." , title => "Приемка" } , - "resolution" => { maxlength => 8 } , + "resolution" => { maxlength => 40 } , "short_desc" => { wrap => 1 } , "short_short_desc" => { maxlength => 60 , ellipsis => "..." , wrap => 1 } , "status_whiteboard" => { title => "Заметки" , wrap => 1 } , - "component" => { maxlength => 8 , title => "Компонент" } , - "product" => { maxlength => 8 } , + "component" => { maxlength => 50 , title => "Компонент", wrap => 1 } , + "product" => { maxlength => 40, wrap => 1 } , "version" => { maxlength => 5 , title => "Версия" } , - "op_sys" => { maxlength => 10 } , + "op_sys" => { maxlength => 16 , title => "Подразд" } , "target_milestone" => { title => "Запланировано" } , "percentage_complete" => { format_value => "%d %%" } , } --- edit.html.tmpl 2007-06-02 09:15:14.000000000 +0700 +++ /usr/home/shelton/edit.html.tmpl 2007-09-09 22:28:29.000000000 +0700 @@ -218,9 +218,11 @@ [% IF fields %] [% FOREACH field = fields %]
[% PROCESS select selname => "rep_platform" %] [% PROCESS select selname => "op_sys" %] - - [% PROCESS select selname => "version" %] + [% USE Bugzilla %] + [% SET field = Bugzilla.get_fields({ name => "cf_addr" }) %] + [% SET value = ${field.name} ? IF ${field.name}.defined %] + [% PROCESS bug/field.html.tmpl editable=1 value_span=2 disabled=0 %] --- /tmp/1/BugMail.pm Wed Feb 28 20:42:22 2007 +++ BugMail.pm Tue Aug 14 19:45:05 2007 @@ -229,11 +229,11 @@ $lastwho = $who; $fullwho = $whoname ? "$whoname <$who" . Bugzilla->params->{'emailsuffix'} . ">" : "$who" . Bugzilla->params->{'emailsuffix'}; - $diffheader = "\n$fullwho changed:\n\n"; - $diffheader .= FormatTriple("What ", "Removed", "Added"); + $diffheader = "\n$fullwho внес ? изменения:\n\n"; + $diffheader .= FormatTriple("Что ", "Удалено", "Добавлено"); $diffheader .= ('-' x 76) . "\n"; } - $what =~ s/^(Attachment )?/Attachment #$attachid / if $attachid; + $what =~ s/^(Attachment )?/Вложение #$attachid / if $attachid; if( $fieldname eq 'estimated_time' || $fieldname eq 'remaining_time' ) { $old = format_time_decimal($old); @@ -298,10 +298,10 @@ $lastbug = $depbug; my $urlbase = Bugzilla->params->{"urlbase"}; $thisdiff = - "\nBug $id depends on bug $depbug, which changed state.\n\n" . - "Bug $depbug Summary: $summary\n" . + "\nЗадача $id, зависит от задачи $depbug, которая изменила статус.\n\n" . + "Описание задачи $depbug: $summary\n" . "${urlbase}show_bug.cgi?id=$depbug\n\n"; - $thisdiff .= FormatTriple("What ", "Old Value", "New Value"); + $thisdiff .= FormatTriple("Что ", "Старое значение", "Новое значение"); $thisdiff .= ('-' x 76) . "\n"; $interestingchange = 0; } @@ -703,7 +728,7 @@ my $result = ""; foreach my $comment (@$raw_comments) { if ($count) { - $result .= "\n\n--- Comment #$count from "; + $result .= "\n\n--- Комментарий #$count от "; if ($comment->{'name'} eq $comment->{'email'}) { $result .= $comment->{'email'}; } else { --- /tmp/1/template/ru/default/account/auth/login-small.html.tmpl Thu May 17 03:48:42 2007 +++ default/account/auth/login-small.html.tmpl Wed Jun 27 15:41:18 2007 @@ -40,7 +40,7 @@ +  [% Param('emailsuffix') FILTER html %] --- /tmp/1/template/ru/default/account/auth/login.html.tmpl Thu May 17 03:48:42 2007 +++ default/account/auth/login.html.tmpl Wed Jun 27 15:41:26 2007 @@ -46,7 +46,7 @@ div#page-index .intro { width: 250px; height: 200px; margin-top: 2.3em; margin-right: 2.3em; float: right; background: transparent no-repeat url(index/ask_big.png); } ----------------------------------------------------------------------------------------------------------------- Строим бюджетный сервер для малых или средних компаний Часть 2 Павел Семенец srv# cd /usr/posts/mail/dspam srv# make config DSPAM_OWNER?= root DSPAM_GROUP?= mail DSPAM_HOME?= ${_VAR_DIR}/db/dspam DSPAM_OWNER?= exim DSPAM_GROUP?= exim DSPAM_HOME?= /usr/local/dspam srv# make all install clean srv# cat > /usr/local/etc/dspam.conf << EOF Home /usr/local/dspam StorageDriver /usr/local/lib/libsqlite3_drv.so TrustedDeliveryAgent "/usr/local/sbin/exim -oMr spam-scanned" # Exim OnFail error Trust root Trust exim Trust mail Trust mailnull Trust smmsp Trust daemon Debug * TrainingMode notrain TestConditionalTraining on Feature chained Feature tb=5 Feature whitelist Algorithm graham burton PValue graham Preference "spamAction=quarantine" Preference "signatureLocation=message" Preference "showFactors=on" Preference "spamAction=tag" Preference "spamSubject=SPAM" AllowOverride trainingMode AllowOverride spamAction spamSubject AllowOverride statisticalSedation AllowOverride enableBNR AllowOverride enableWhitelist AllowOverride signatureLocation AllowOverride showFactors AllowOverride optIn optOut AllowOverride whitelistThreshold SQLitePragma "synchronous = ON" HashRecMax 98317 HashAutoExtend on HashMaxExtents 0 HashExtentSize 49157 HashMaxSeek 100 IgnoreHeader X-Spam-Status IgnoreHeader X-Spam-Scanned IgnoreHeader X-Virus-Scanner-Result Notifications off PurgeSignatures 14 PurgeNeutral 90 PurgeUnused 90 PurgeHapaxes 30 PurgeHits1S 15 PurgeHits1I 15 LocalMX 127.0.0.1 SystemLog on UserLog on Opt out MaxMessageSize 307200 ProcessorBias on EOF srv# pw groupadd exim srv# pw useradd exim -g exim -d /dev/null -s /usr/sbin/nologin srv# id exim PORTSDIR? = /usr/ports .if ${.CURDIR} == {$PORTSDIR}/mail/exim # Включаем поддержку OpenLDAP WITH_OPENLDAP = yes # Включаем автоматическое определение # установленной версии OpenLDAP WITH_OPENLDAP_VER = auto # Включаем логирование через Syslog LOG_FILE_PATH?= syslog # Включаем поддежку сканирования сообщений # через content_scan WITH_CONTENT_SCAN = yes # Включаем поддержку перекодировки WITH_ICONV = yes # Включаем поддержку по методу AUTH PLAIN и AUTH LOGIN WITH_AUTH_PLAINTEXT = yes # Устанавливаем кодировку по умолчанию # для заголовков письма WITH_DEFAULT_CHARSET?= koi8-r # Отключаем поддержку IPV6 WITHOUT_IPV6 = yes # Указываем, какую версию Berkley DB используем WITH_DBD_VER? = 4 # Включаем поддержку Perl для внешних скриптов WITH_PERL = yes .endif srv# cd /usr/ports/mail/exim srv# make all install clean srv# cd /usr/local/etc/exim srv# mkdir ssl srv# cd ssl srv# openssl req -x509 -newkey rsa:1024 -keyout mail.pem -out mail.pem -days 3650 -nodes srv# chmod 0400 mail.pem srv# chown exim:exim mail.pem srv# cat > /usr/local/etc/openldap/schema/exim.schema << EOF #$Id: exim.schema, v 0,2 2007/09/25 #(C) Created by Darkman # Attributes # Тут мы описываем атрибуты, куда будем записывать информацию # о пользователях, перенаправлениях и всему прочему # Имя домена. attributetype ( 1.3.6.1.4.1.100058.1.1.1 NAME 'DName' DESC 'Mail Domain Name' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Тип домена (virtual,relay) attributetype ( 1.3.6.1.4.1.100058.1.1.2 NAME 'DType' DESC 'Mail Domain Type' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # MX-запись для доменов с типом relay attributetype ( 1.3.6.1.4.1.100058.1.1.3 NAME 'MXHost' DESC 'Forward Host Name' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # ID-аккаунт attributetype ( 1.3.6.1.4.1.100058.1.1.4 NAME 'EUid' DESC 'Exim user id default 1001' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # GID-акаунт attributetype ( 1.3.6.1.4.1.100058.1.1.5 NAME 'EGid' DESC 'Exim group id default 1001' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Пароль акаунта attributetype ( 1.3.6.1.4.1.100058.1.1.6 NAME 'Pass' DESC 'User Clear Password' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} ) # Имя акаунта attributetype ( 1.3.6.1.4.1.100058.1.1.7 NAME 'UName' DESC 'Mail username' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{50} ) # Домашняя директория аккаунта attributetype ( 1.3.6.1.4.1.100058.1.1.8 NAME 'HomeDir' DESC 'MailStore Home Dir' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) # Статус акаунта (active,disable) attributetype ( 1.3.6.1.4.1.100058.1.1.9 NAME 'AcStatus' DESC 'User Account Status (active,disable)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) # Размер почтового ящика значения, заносится в Мб attributetype ( 1.3.6.1.4.1.100058.1.1.10 NAME 'QuotaSize' DESC 'User Quota Size Megabytes' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) # Запись о перенаправлениях почты (используется в таблице aliases) attributetype ( 1.3.6.1.4.1.100058.1.1.11 NAME 'Rcpt' DESC 'Aliases To' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Описание записи attributetype ( 1.3.6.1.4.1.100058.1.1.12 NAME 'Descr' DESC 'Description Message' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Запись об антиспам-фильтре (active,disable) attributetype ( 1.3.6.1.4.1.100058.1.1.12 NAME 'AntiSpam' DESC 'Active AntiSpam Service' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # Object class # В этой секции файла мы описываем 4 объекта # (EximVirtualForward, EximVirtualDomain, EximVirtualUser, EximVirtualAliases) # и группируем атрибуты, описанные выше к каждому создаваемому объекту. # Атрибуты, указанные в секции MUST (), обязательны к заполнению, # атрибуты указанные в секции MAY (), не обязательны. # Объект хранения виртуальных перенаправлений, обслуживаемых сервером objectclass (1.3.6.1.4.1.100058.1.2.1 NAME 'EximVirtualForward' SUP top STRUCTURAL DESC '' MUST ( Uname $ DName $ MXHost ) MAY ( Descr )) # Объект хранения виртуальных доменов # обслуживаемых сервером objectclass (1.3.6.1.4.1.100058.1.2.2 NAME 'EximVirtualDomain' SUP top STRUCTURAL DESC '' MUST ( DName $ DType ) MAY ( Descr )) # Объект хранения виртуальных пользователей почтовой системы objectclass (1.3.6.1.4.1.100058.1.2.3 NAME 'EximVirtualUser' SUP top STRUCTURAL DESC '' MUST ( EUid $ EGid $ Pass $ UName $ HomeDir $ DName $ AcStatus $ QuotaSize $ AntiSpam) MAY ( Descr )) # Объект хранения алиасов пользователей почтовой системы objectclass (1.3.6.1.4.1.100058.1.2.4 NAME 'EximVirtualAliases' SUP top STRUCTURAL DESC '' MUST ( UName $ Rcpt $ DName ) MAY ( Descr )) EOF srv# cd /usr/local/etc/openldap include /usr/local/etc/openldap/schema/dnsdomain2.schema include /usr/local/etc/openldap/schema/exim.schema srv# cd /usr/local/etc/rc.d/ srv# ./010.slapd.sh restart srv# ./020.pdns.sh restart srv# ./015.pdnsr.sh restart srv# ./025.samba.sh restart srv# cat > /usr/local/etc/ldapfiles/mail_base.ldiff << EOF # Ветка для хранения записей почтового сервера dn: ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: mail # Ветка для хранения записей о доменах, обслуживаемых MTA dn: ou=domains,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: domains # Ветка для хранения записей о виртуальных аккаунтах почтового сервера dn: ou=users,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: users # Ветка для хранения записей о алиасах почтового сервера dn: ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: aliases # Ветка для хранения записей о перенаправлениях почтового сервера dn: ou=forward,ou=mail,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: forward # Виртуальный домен example.com dn: DName=example.com,ou=domains,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualDomain DName: example.com DType: virtual Descr: Example Mail Domain # alias перенаправления почты (postmaster@exampl.com to root@exampl.com) dn: UName=postmaster,ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualAliases UName: postmaster Rcpt: root Dname: example.com # alias перенаправления почты (abuse@exampl.com to postmaster@exampl.com) dn: UName=abuse,ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualAliases UName: abuse Rcpt: postmaster DName: example.com # alias перенаправления почты (info@example.com to postmaster@exampl.com) dn: UName=info,ou=aliases,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualAliases UName: info Rcpt: postmaster Dname: example.com # Виртуальный пользователь root@example.com dn: UName=root,ou=users,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualUser UName: root DName: example.com EUid: 1001 EGid: 1001 Pass: passwd HomeDir: /usr/local/vmail/example.com/root AcStatus: active AntiSpam: active QuotaSize: 300 # Виртуальный пользователь test@example.com dn: UName=test,ou=users,ou=mail,dc=example,dc=com objectClass: top objectClass: EximVirtualUser UName: test DName: example.com EUid: 1001 EGid: 1001 Pass: passwd1 HomeDir: /usr/local/vmail/example.com/test AcStatus: active AntiSpam: active QuotaSize: 300 EOF srv# ldapadd -x -D "cn=root,dc=example,dc=com" -w password -f mail_base.ldiff srv# cat > /usr/local/etc/exim/configure << EOF # Начало поиска ${ # Указываем, какой драйвер использовать для поиска lookup mysql{ # Запрос в MySQL проверяет, существует ли запись # в таблице domains о домене подключившегося # пользователя с типом virtual SELECT domain FROM domains WHERE domain='${domain}' AND type='virtual' } } # Конец поиска # Начало поиска ${\ # Указываем серверу о дополнительной обработке # полученных результатов sg{\ ${\ # Указываем, какой драйвер использовать для поиска lookup ldapm{\ # Макрос подключения LDAP_AUTH \ # Указываем, в какой ветке OpenLDAP ищем ldap:///ou=domains,ou=mail,dc=example,dc=com?\ # Указываем серверу, какой атрибут искать DName?\ # Указываем серверу дополнительные критерии поиска sub?\ # Описываем фильтр поиска в атрибутах записи (&(objectClass=EximVirtualDomain)(DType=virtual))\ }\ }\ }\ # Выполняем обработку полученных результатов в данном случае # заменяем символы конца строки «\n» на двоеточие « : » {\n}{ : }\ } # Конец запроса DName=example.com,ou=domains,ou=mail,dc=example,dc=com DName=test.com,ou=domains,ou=mail,dc=example,dc=com srv# cd /usr/ports/secutiry/clamav srv# make all install clean srv# cat > /usr/local/etc/clamd.conf << EOF LogFile /var/log/clamav/clamd.log PidFile /var/run/clamav/clamd.pid DatabaseDirectory /var/db/clamav FixStaleSocket yes TCPSocket 3310 TCPAddr 127.0.0.1 User clamav AllowSupplementaryGroups yes ScanOLE2 yes ScanMail yes ScanHTML yes ScanArchive yes ArchiveMaxFileSize 15M ArchiveMaxRecursion 10 ArchiveMaxFiles 1500 EOF srv#cat > /usr/local/etc/freshclam.conf << EOF DatabaseDirectory /var/db/clamav UpdateLogFile /var/log/clamav/freshclam.log LogVerbose yes PidFile /var/run/clamav/freshclam.pid DatabaseOwner clamav AllowSupplementaryGroups yes DatabaseMirror database.clamav.net NotifyClamd /usr/local/etc/clamd.conf Debug yes EOF srv# cd /usr/local/etc/rc.d srv# mv clamav_freshclam.sh 030.freshclam.sh srv# mv clamav-clamd.sh 035.clamd.sh srv# mv exim 040.exim.sh clamav_freshclam_enable="YES" clamav_clamd_enable="YES" exim_enable="YES" srv# /usr/local/etc/rc.d/030.freshclam.sh start srv# /usr/local/etc/rc.d/035.clamd.sh start srv# /usr/local/etc/rc.d/040.exim.sh start srv# mkdir /usr/local/vmail srv# chown exim:exim /usr/local/vmail /var/spool/clientmqueue /var/spool/mqueue srv# telnet localhost 25 srv# perl -MMIME::Base64 -e 'print encode_base64 ("root\@example.com\0root\@example.com\0passwd");' srv# telnet localhost 25 # perl -MMIME::Base64 -e 'print encode_base64("root\@example.com");' # perl -MMIME::Base64 -e 'print encode_base64("passwd");' srv# telnet localhost 25 srv# openssl srv# OpenSSL > s_client -host localhost -port 465 srv# cd /usr/ports/mail/courier-imap srv# make all install clean srv# cat > /usr/local/etc/auth-lib/authdaemonrc << EOF authmodulelist="authldap" authmodulelistorig="authldap" daemons=5 authdaemonvar=/var/run/authdaemond subsystem=mail DEBUG_LOGIN=2 DEFAULTOPTIONS="wbnodsn=1" LOGGEROPTS="" EOF srv# cat > /usr/local/etc/auth-lib/authldaprc << EOF # Указываем, где находится OpenLDAP LDAP_URI ldap://localhost # Указываем, какую версию протокола используем LDAP_PROTOCOL_VERSION 3 # Указываем, где искать информацию об акаунтах # пользователей почтового сервера LDAP_BASEDN ou=users,ou=mail,dc=example,dc=com # Указываем, под каким пользователем подключаемся к OpenLDAP LDAP_BINDDN cn=root,dc=example,dc=com # Указываем, какой пароль у вышеуказанного пользователя LDAP_BINDPW password LDAP_TIMEOUT 5 # Так как пользователи виртуальные, отключаем # авторизацию всех остальных пользователей на сервере LDAP_AUTHBIND 0 # Указываем, в каком атрибуте находится логин пользователя LDAP_MAIL UName # Указываем фильтр для поиска LDAP_FILTER (objectClass=EximVirtualUser)(AcStatus=active) # Указываем uid и gid пользователей глобально # для всего сервера LDAP_GLOB_UID exim LDAP_GLOB_GID exim # Указываем атрибут домашней директории пользователя LDAP_HOMEDIR HomeDir # Указываем атрибут почтовой директории пользователя LDAP_MAILDIR HomeDir # Указываем атрибут, где хранится Квота на использование почтового ящика LDAP_MAILDIRQUOTA QuotaSize # Указываем атрибут хранения пароля LDAP_CLEARPW Pass LDAP_DEREF never # Отключаем SSL-соединение с сервером LDAP_TLS 0 # Разбиваем логин пользователя на составляющие, # к примеру root@example.com будет разбит # на #Uname=root,DNAme=example.com LDAP_EMAILMAP (&(UName=@user@)(DName=@realm@)) # Указываем где и как искать информацию о почтовом # ящике пользователя LDAP_EMAILMAP_BASEDN ou=users,ou=mail,dc=example,dc=com LDAP_EMAILMAP_ATTRIBUTE UName LDAP_EMAILMAP_MAIL Uname EOF courier_authdaemond_enable="YES" courier_imap_pop3d_enable="YES" courier_imap_imapd_ssl_enable="YES" courier_imap_imapd_enable="YES" courier_imap_pop3d_ssl_enable="YES" srv# cd /usr/local/etc/courier-imap srv# cat > imapd << EOF # Вписываем в файл следующее содержимое ADDRESS=0 PORT=143 MAXDAEMONS=40 MAXPERIP=4 PIDFILE=/var/run/imapd.pid TCPDOPTS="-nodnslookup -noidentlookup" LOGGEROPTS="-name=imapd" IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE" IMAP_KEYWORDS=1 IMAP_ACL=1 IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE" IMAP_PROXY=0 IMAP_PROXY_FOREIGN=0 IMAP_IDLE_TIMEOUT=60 IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN" IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN" IMAP_DISABLETHREADSORT=0 IMAP_CHECK_ALL_FOLDERS=0 IMAP_OBSOLETE_CLIENT=0 IMAP_UMASK=022 IMAP_ULIMITD=65536 IMAP_USELOCKS=1 IMAP_SHAREDINDEXFILE=/usr/local/etc/courier-imap/shared/index IMAP_ENHANCEDIDLE=0 IMAP_TRASHFOLDERNAME=Trash IMAP_EMPTYTRASH=Trash:7 IMAP_MOVE_EXPUNGE_TO_TRASH=0 SENDMAIL=/usr/sbin/sendmail HEADERFROM=X-IMAP-Sender IMAPDSTART=YES MAILDIRPATH=Maildir EOF srv#cat > imapd-ssl << EOF SSLPORT=993 SSLADDRESS=0 SSLPIDFILE=/var/run/imapd-ssl.pid SSLLOGGEROPTS="-name=imapd-ssl" IMAPDSSLSTART=YES IMAPDSTARTTLS=YES IMAP_TLS_REQUIRED=0 COURIERTLS=/usr/local/bin/couriertls TLS_PROTOCOL=SSL3 TLS_STARTTLS_PROTOCOL=TLS1 TLS_CERTFILE=/usr/local/etc/courier-imap/shared/imapd.pem TLS_VERIFYPEER=NONE TLS_CACHEFILE=/usr/local/var/couriersslcache TLS_CACHESIZE=524288 MAILDIRPATH=Maildir EOF srv#cat > pop3d << EOF PIDFILE=/var/run/pop3d.pid MAXDAEMONS=40 MAXPERIP=4 POP3AUTH="" POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256" POP3AUTH_TLS="" POP3AUTH_TLS_ORIG="LOGIN PLAIN" POP3_PROXY=0 PORT=110 ADDRESS=0 TCPDOPTS="-nodnslookup -noidentlookup" LOGGEROPTS="-name=pop3d" POP3DSTART=YES MAILDIRPATH=Maildir EOF srv#cat > pop3d-ssl << EOF SSLPORT=995 SSLADDRESS=0 SSLPIDFILE=/var/run/pop3d-ssl.pid SSLLOGGEROPTS="-name=pop3d-ssl" POP3DSSLSTART=YES POP3_STARTTLS=YES POP3_TLS_REQUIRED=0 COURIERTLS=/usr/local/bin/couriertls TLS_PROTOCOL=SSL3 TLS_STARTTLS_PROTOCOL=TLS1 TLS_CERTFILE=/usr/local/etc/courier-imap/shared/pop3d.pem TLS_VERIFYPEER=NONE TLS_CACHEFILE=/usr/local/var/couriersslcache TLS_CACHESIZE=524288 MAILDIRPATH=Maildir EOF srv# cat > imapd.cnf << EOF RANDFILE = /usr/local/share/courier-imap/imapd.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] C=RU ST=RU L=Moscow O=Exim Super Secure Server OU= IMAP SSL Key CN=mail.baby-country.ru emailAddress=postmaster@example.com [ cert_type ] nsCertType = server EOF srv#cat > pop3d.cnf << EOF RANDFILE = /usr/local/share/courier-imap/pop3d.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] C=RU ST=RU L=Moscow O=Exim Super Secure Server OU= POP3 SSL Key CN=mail.baby-country.ru emailAddress=postmaster@example.ru [ cert_type ] nsCertType = server EOF srv# cd /usr/local/share/courier-imap srv# ./mkimapdcert srv# ./mkpop3dcert srv# cp imapd.pem /usr/local/etc/courier-imap/shared srv# cp pop3d.pem /usr/local/etc/courier-imap/shared srv# cd /usr/local/etc/courier-imap/shared srv# chmod 0600 * srv# cd /usr/local/etc/rc.d srv# mv courier_authdaemond.sh 045.courier-auth.sh srv# mv courier_imap_imapd.sh 050.courier-imap.sh srv# mv courier_imap_pop3d.sh 055.courier-pop3d.sh srv# mv courier_imap_imapd_ssl 060.courier-imaps.sh srv# mv courier_imap_pop3d_ssl 065.courier_pop3ds.sh srv# ./045.courier-auth.sh start srv# ./050.courier-imap.sh start srv# ./055.courier-pop3d.sh start srv# ./060.courier-imaps.sh start srv# ./065.courier_pop3ds.sh start srv# telnet 127.0.0.1 110 srv# telnet 127.0.0.1 143 srv# openssl OpenSSL> s_client -host localhost -port 993 ----------------------------------------------------------------------------------------------------------------- Управляем Active Directory из командной строки Александр Емельянов cn=Ivanov, cn=Managers, ou=Office, dc=domain, dc=com; domain.com/Office/Managers/Ivanov >dsquery computer -name buh* >dsadd user "cn=Ivanov,cn=Users,dc=domain,dc=com" -pwd * >dsmod user "cn=Ivanov,cn=Users,dc=domain,dc=com" -upn ivanov@domain.com >dsquery user -name Ivanov | dsmod user -disabled yes >adfind -?? > c:\adfind_help.txt >adfind –b "ou=buhgalteria,dc=domain,dc=com" -f "(&(objectcategory=computer)(name=buh*))" ----------------------------------------------------------------------------------------------------------------- Знакомимся с PowerShell – новой командной оболочкой Андрей Бирюков PowerShellSetup_x86_enu.exe /quiet Листинг 1. Получение времени на локальной машине $strComputer = "." $colItems = get-wmiobject -class "Win32_UTCTime" -namespace "root\CIMV2" -computername $strComputer foreach ($objItem in $colItems) { write-host "Day: " $objItem.Day write-host "Day Of Week: " $objItem.DayOfWeek write-host "Hour: " $objItem.Hour write-host "Milliseconds: " $objItem.Milliseconds write-host "Minute: " $objItem.Minute write-host "Month: " $objItem.Month write-host "Quarter: " $objItem.Quarter write-host "Second: " $objItem.Second write-host "Week In Month: " $objItem.WeekInMonth write-host "Year: " $objItem.Year write-host } get-executionpolicy set-executionpolicy статус_политики set-executionpolicy RemoteSigned Листинг 2. Получение информации о событиях $strComputer = "." //Выполняем на локальной машине $colItems = get-wmiobject -class "Win32_NTLogEvent" -namespace "root\CIMV2" -computername $strComputer # Обходим все записи в журнале foreach ($objItem in $colItems) { # Категория write-host "Category: " $objItem.Category # Значение категории write-host "Category String: " $objItem.CategoryString # Имя компьютера write-host "Compute rName: " $objItem.ComputerName write-host "Data: " $objItem.Data # данные # Код события write-host "Event Code: " $objItem.EventCode # Идентификатор события write-host "Event Identifier: " $objItem.EventIdentifier # Тип события write-host "Event Type: " $objItem.EventType # Добавленные комментарии (если есть) write-host "Insertion Strings: " $objItem.InsertionStrings # Файл журнала write-host "Logfile: " $objItem.Logfile # Текст сообщения write-host "Message: " $objItem.Message # Номер записи write-host "Record Number: " $objItem.RecordNumber # Имя источника write-host "Source Name: " $objItem.SourceName # Время создания сообщения write-host "Time Generated: " $objItem.TimeGenerated # Время записи write-host "Time Written: " $objItem.TimeWritten write-host "Type: " $objItem.Type # Тип write-host "User: " $objItem.User # Имя пользователя write-host } Листинг 3. Создание нового объекта групповой политики Dim GPM # Объявляем массив GPM # Объект класса GPMgmt.GPM Set GPM = CreateObject("GPMgmt.GPM") # Переменная данного класса $gpm = New-Object -ComObject GPMgmt.GPM # Получаем константы данного класса $gpmConstants = $gpm.GetConstants() $gpmDomain =$gpm.GetDomain("Mydomain.local", "", $gpmConstants.UseAnyDC) # Подключаемся к домену, замените Mydomain.local на нужный # Создаем новую политику $gpmNewGpo = $gpmDomain.CreateGPO() # С именем PowerShell GPO $gpmNewGpo.DisplayName = "PowerShell GPO" $gpm = New-Object -ComObject GPMgmt.GPM $gpmDomain =$gpm.GetDomain("Mydomain.local", "", $gpmConstants.UseAnyDC) $gpmNewGpo = $gpmDomain.CreateGPO() $gpmNewGpo.DisplayName = "PowerShell GPO" Листинг 4. Получение информации о групповой политике $gpmExistingGpo = $gpmDomain.GetGPO("{31B2F340-016D-11D2-945F-00C04FB984F9}") # Открываем уже существующую групповую политику, используя ее GUID $gpmExistingGpo.DisplayName # Получаем имя данной политики. Сохраняем отчет в файл $gpmExistingGpo.GenerateReportToFile($gpmConstants.ReportHTML,".\DefaultDomainPolicyReport.html") Листинг 5. Получение информации об изменениях GPO за последние сутки $gpmSearchCriteria = $gpm.CreateSearchCriteria() # Мы хотим получить информацию обо всех групповых политиках # в домене, поэтому критерий поиска нам вводить не нужно $gpmAllGpos = $gpmDomain.SearchGPOs($gpmSearchCriteria) # Ищем все групповые политики в домене foreach ($gpmGpo in $gpmAllGpos) { if ($gpmGpo.ModificationTime -ge (get-date).AddDays(-1)) {$gpmGpo.DisplayName} # Проверяем, какие групповые политики изменялись за последние 24 часа } > get-childitem "c:\Program Files" -include *.ini -recurse | remove-item –whatif > get-childitem "c:\Program Files" -include *.ini -recurse | remove-item –confirm > get-process notep* > $prc= get-process notep* > $prc* > $prc.Id > $prc| format-list -property * > $prc| get-member > $prc| stop-process > get-process notep* | stop-process > get-process notep* | kill > get-process | sort-object -property WS –descending | select-object -first 5 > gwmi win32_logicaldisk > gwmi win32_logicaldisk -filter "drivetype = 3" > gwmi win32_logicaldisk -filter "drivetype = 3" | select deviceid,freespace > gwmi win32_logicaldisk -filter "drivetype = 3" | % { $_.deviceid; $_.freespace/1GB } > Get-ChildItem C:\Windows | Where-Object {$_.Length -gt 200KB} | Sort-Object Length –Descending if ($_ -like "**") {$_ -replace "", ""} else {$_ -replace "", ""}} > .\get-service.html // Получаем справочную информацию по команде get-process > get-help get-process // Получаем более детальную информацию по той же команде > get-help get-process -detailed // Получаем справочную информацию по командам, работающим с XML > get-help *xml* // Аналогичный пример, только для команд, работающих с WMI > get-help *wmi* > man get-process > man get-process -detailed > man *xml* [void][reflection.assembly]::LoadWithPartialName( "System.Windows.Forms") $form = new-object Windows.Forms.Form $form.Text = "My First Form" $button = new-object Windows.Forms.Button $button.text="Push Me!" $button.Dock="fill" $button.add_click({$form.close()}) $form.controls.add($button) $form.Add_Shown({$form.Activate()}) $form.ShowDialog() ----------------------------------------------------------------------------------------------------------------- Каталоги бизнес-данных – интеграция легким движением руки Нелли Садретдинова Oracle PassThrough tns name false username password false % "Driver={Firebird/InterBase(r) driver};DSN=dsn_name;Uid=username;Pwd=password;Trusted_Connection=True;""Driver={MySQL ODBC 3.51 Driver};Dsn=dsn_name;Trusted_Connection=True;"myAppMicrosoft.SharePoint.Portal.SingleSignon.SpsSsoProvider, Microsoft.SharePoint.Portal.SingleSignon, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c Равняется Наименование товара true ----------------------------------------------------------------------------------------------------------------- Строим систему видеонаблюдения и охраны на основе ZoneMinder Виталий Банковский DocumentRoot /home/webcam/www ServerName webcam.example.com ScriptAlias /cgi-bin/ /home/webcam/www/cgi-bin/ Options ALL +ExecCGI AllowOverride ALL DirectoryIndex index.php mysql -p mysql; mysql> create database zm; mysql> grant all on zm.* to zmuser@localhost identified by 'put_password_here'; mysql> flush privileges; adduser -d /home/webcam webcam tar -xzvf ZoneMinder-1.xx.xx.tar.gz cd ZoneMinder-1.xx.xx ./configure –with-webdir=/home/webcam \ --with-cgidir=/home/webcam/www/cgi-bin/ \ --with-webuser=webcam –with-webgroup=webcam \ --with-mysql= make make install ln -s /home/webcam/www/zm.php /home/webcam/www/index.php ZM_DB_HOST=localhost ZM_DB_NAME=zm ZM_DB_USER=zmuser ZM_DB_PASS=put_password_here mysql -p zm < db/zm_create.sql echo 134217728 > /proc/sys/kernel/shmmax zmpkg.pl start #! /bin/sh export PATH="$PATH:/usr/sbin:/sbin: /usr/local/bin: /usr/local/sbin" case "$1" in start) echo -n "Starting ZM" /usr/local/bin/zmpkg.pl start echo "." ;; stop) echo -n "Stopping ZM" /usr/local/bin/zmpkg.pl stop echo "." ;; *) echo "Usage: /etc/init.d/zm {start|stop}" exit 1 esac exit 0 chkconfig webcam on ----------------------------------------------------------------------------------------------------------------- Выгружаем данные из «1С» в Excel Андрей Луконькин Процедура ВыборПути() Каталог2=Каталог; Если Фс.ВыбратьКаталог(Каталог2,"Выберите каталог")>0 Тогда Если СтрДлина(Каталог2)>200 Тогда Сообщить("Длина каталога превышает 200 символов"); Каталог = ""; Иначе Каталог=Каталог2; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура Сформировать() //Если не выбран документ Ведомость, работа прекращается Если ПустоеЗначение(ВыбДокумент)=1 Тогда Предупреждение("Выберите ведомость!"); Возврат; КонецЕсли; //Если не выбран каталог для выгрузки, работа прекращается Если ПустоеЗначение(Каталог)=1 Тогда Предупреждение("Укажите каталог!"); Возврат; КонецЕсли; //Создание объекта MS Excel Excel = СоздатьОбъект("Excel.Application"); //Создаём новую книгу в Excel Excel.WorkBooks.Add(); //Задаём ширину колонок Excel.WorkBooks(1).WorkSheets("Лист1").Columns(1).ColumnWidth = 20; Excel.WorkBooks(1).WorkSheets("Лист1").Columns(2).ColumnWidth = 10; Excel.WorkBooks(1).WorkSheets("Лист1").Columns(3).ColumnWidth = 20; Excel.WorkBooks(1).WorkSheets("Лист1").Columns(4).ColumnWidth = 15; Excel.WorkBooks(1).WorkSheets("Лист1").Columns(5).ColumnWidth = 20; Excel.WorkBooks(1).WorkSheets("Лист1").Columns(6).ColumnWidth = 30; //Выводим текст заголовка документа Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1).value = "Ведомость pаспpеделения денежных сpедств на счета физических лиц"; //Устанавливаем размер шрифта Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1).font.size = 12; //Устанавливаем признак шрифта «жирный» Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,1).value = "платежное поpучение №"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,1).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,1).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,4).value = "от"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,4).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,4).font.bold = 1; //Указываем наименование нашей организации, также могут указываться и другие реквизиты предприятия Орг = "ООО НАША ОРГАНИЗАЦИЯ"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(4,1).value = Орг; Excel.WorkBooks(1).WorkSheets("Лист1").cells(4,1).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(4,1).font.bold = 1; //«Шапка» табличной части, заголовки столбцов Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,1).value = " Счет"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,1).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,1).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,2).value = "Сумма"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,2).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,2).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,3).value = "Фамилия"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,3).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,3).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,4).value = "Имя"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,4).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,4).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,5).value = "Отчество"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,5).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,5).font.bold = 1; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,6).value = "Окончательный расчет(+)"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,6).font.size = 12; Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,6).font.bold = 1; //Выбираем строки ведомости, цикл по всем строкам ВыбДокумент.ВыбратьСтроки(); Счетчик = 7; Пока ВыбДокумент.ПолучитьСтроку()=1 Цикл Счет = ВыбДокумент.Сотрудник.НомерЗарплатногоСчета; Сумма = ВыбДокумент.Сумма; //Устанавливаем формат ячейки Excel //для номера счета как строковый, //чтобы отображались все 20 символов Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,1).NumberFormat = "@"; //Устанавливаем значение счета Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,1).value = Строка(Счет); //Рассчитываем значение суммы Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,2).value = Сумма; //Разбираем ФИО на составляющие, отдельно фамилия, имя и отчество Стр = СокрЛП(ВыбДокумент.Сотрудник.Наименование); ПозицияПервогоПробела = найти(СокрЛП(Стр),Симв(32)); Фамилия = Лев(СокрЛП(Стр),ПозицияПервогоПробела-1); ОстСтр = Прав(Стр,СтрДлина(Стр)-СтрДлина(Фамилия)-1); ПозицияВторогоПробела = найти(СокрЛП(ОстСтр),Симв(32)); Имя = Лев(СокрЛП(остСтр),ПозицияВторогоПробела-1); ОстСтр = Прав(ОстСтр,СтрДлина(ОстСтр)-СтрДлина(Имя)-1); Отчество = СокрЛП(ОстСтр); //Устанавливаем текстовый формат ячеек //и выводим ФИО Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,3).NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,3).value = ВРЕГ(Фамилия); Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,4).NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,4).value = ВРЕГ(Имя); Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,5).NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,5).value = ВРЕГ(Отчество); Счетчик = Счетчик + 1; КонецЦикла; //Выводим итоговую строку Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик+1,1).NumberFormat = "@"; Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик+1,1).value ="Итого:"; //Вводим формулу в ячейку, считаем итоговую сумму Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик+1,2).FormulaR1C1 ="=SUM(R[-"+Строка(Счетчик-6)+"]C:R[-2]C)"; //Записываем файл Excel. Имя – это номер нашей ведомости Попытка Excel.ActiveWorkBook.SaveAs(СокрЛП(Каталог)+"\"+ВыбДокумент.НомерДок+".xls"); Исключение Сообщить(«Неудачная попытка сохранения файла»); КонецПопытки; //Закрываем книгу Excel Excel.ActiveWorkBook.Close(); КонецПроцедуры ----------------------------------------------------------------------------------------------------------------- bugtraq, стр. 79 test feed test post - create /tmp/created_file http://www.example2.com";perl -e "print 'could run anything here' " > "/tmp/created_file Fri, 26 Oct 2007 14:10:25 +0300 ----------------------------------------------------------------------------------------------------------------- Что мы знаем о стеке? Владимир Мешков call < адрес функции > Условный адрес Инструкция процессора .... .... < N-2 > push < параметр 2 > < N-1 > push < параметр 1 > < N > call < адрес функции > < N+1 > < сюда будет возвращено управление > Листинг 1. Файл test.c #include #include int foo(int a, int b) { return a+b; } int main() { int c, a, b; c = 0, a = 1, b = 2; c = foo(a, b); return c; } bash-3.1# gcc -Wall -g -o test test.c bash-3.1# gdb -q ./test (gdb) disas foo (gdb) b foo (gdb) r (gdb) fr (gdb) info reg ebp (gdb) x/w 0xbf92f588+4 (gdb) x/w 0xbf92f588+8 (gdb) x/w 0xbf92f588+0xC (gdb) disas main movl $0x0,0xfffffff0(%ebp) ==> movl $0x0,-16(%ebp) movl $0x1,0xfffffff4(%ebp) ==> movl $0x1,-12(%ebp) movl $0x2,0xfffffff8(%ebp) ==> movl $0x2,-8(%ebp bash-3.1$ gdb -q test (gdb) b main (gdb) r (gdb) info reg ebp (gdb) x/xw 0xbfaf46d8+0xfffffff0 <---- локальная переменная c = 0 (gdb) x/xw 0xbfaf46d8+0xfffffff4 <---- локальная переменная a = 1 (gdb) x/xw 0xbfaf46d8+0xfffffff8 <---- локальная переменная b = 2 (gdb) x/xw 0xbfaf46d8-16 <---- локальная переменная c = 0 (gdb) x/xw 0xbfaf46d8-12 <---- локальная переменная a = 1 (gdb) x/xw 0xbfaf46d8-8 <---- локальная переменная b = 2 0x080483b5 : mov 0xfffffff8(%ebp),%eax <-- локальная переменная b=2 в EAX 0x080483b8 : mov %eax,0x4(%esp) <-- помещаем параметр b в стек 0x080483bc : mov 0xfffffff4(%ebp),%eax <-- локальная переменная a=1 в EAX 0x080483bf : mov %eax,(%esp) <-- помещаем параметр a в стек bash-3.1# gdb -q test (gdb) disas foo (gdb) b *0x0804838e (gdb) b *0x080483c7 (gdb) r (gdb) info reg esp (gdb) x/xw 0xbff583ac (gdb) s (gdb) info reg eip bash-3.1$ gcc -Wall -g -fomit-frame-pointer -o test test.c bash-3.1$ gdb -q ./test (gdb) disas main (gdb) disas foo -----------------------------------------------------------------------------------------------------------------
- : + :
- : + :
- : -
- [% Param('emailsuffix') FILTER html %]
- [% Param('emailsuffix') FILTER html %] +  [% Param('emailsuffix') FILTER html %]
Running