/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Добавить комментарий | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Добавить комментарий

Александр Слобода: солнце, которое не заходит

Хутор Слободской стоял вдалеке от больших дорог. До райцентра Освея - добрый десяток километров, а до железнодорожной станции Дрисса - все 50. А фамилия у хуторян была одна: Слобода. Почти к самым хатам подступал лес. Неподалеку от дома, за болотцем, - озеро Тятно, откуда выбегала речушка Ужица. Маленькая, но с такой серебряной водой, что на дне ее можно было сосчитать песчинки. Вдали виднелись соседские хутора Демидов и Плющики. А центр колхоза имени ОСОАВИАХИМа располагался в деревне Дубровы - в километрах пяти от хутора Слободского.

Родительский дом никак не назовешь просторным. Но удивительное дело: под соломенной стрехой жили в мире и согласии три поколения Слободы: дед Степан и бабка Полина; отец Иван Степанович и мама Ольга Константиновна да еще родной брат отца; Александр, старший сын, и его трое братьев. И всем хватало места. О, какой волшебной сказкой были долгие зимние вечера! Когда за темными оконцами выла, скулила вьюга, наметая сугробы под самую крышу. Потрескивает лучина (керосин стоил дорого, к тому же имел свойство быстро заканчиваться). Жужжит бабкина прялка, и тянется, тянется из кудели бесконечная нить. Мама - за кроснами. Птицей мелькает в ее руках челнок и рождается на глазах льняное полотно. Дед Степан - мастер по колесному делу. Только он каким-то особым зрением и чутьем мог найти в лесу пригодный для колес дубок. Знал, сколько надо подержать заготовку над паром, чтобы согнуть, придать ей нужную форму. Работал тщательно, без спешки. Но когда заканчивал работу, на каждое его изделие можно было смело ставить клеймо Мастера.

Какими же счастливыми были эти долгие зимние вечера! Потому что все - вместе и все - живы. И, казалось, так будет всегда. И нескончаемы будут чудесные сказки бабки Полины под тихое жужжание прялки и рассказы отца о гражданской войне.

Но вот и начальная школа позади. А была она в обычной крестьянской избе, где 15 ребятишек со всех хуторов учились в одном классе. Семилетка в Дубровах - это уже целый мир. Новый. Волнующий. И страшно интересный. Каждый день пять километров туда, пять - обратно, такое и взрослому не покажется сахаром. А тут мальчишка, которому еще нет и двенадцати. Как же не хотелось ему подниматься ранним утром, как трудно было из теплой хаты шагнуть в зимнюю стужу или осеннюю слякоть. Но это было его дело. Пока еще не взрослое, не такое, как у отца, колхозного бригадира, но одинаково ответственное. Никто никогда не читал Александру нотаций об ответственности. Но с самых ранних лет в его сознание, как в живую ткань, вросло действенное понятие «надо».

Александр решил твердо: после семилетки - в Полоцкий лесотехнический техникум. Там - и общежитие, и форменная одежда, и стипендия. Выучусь, размышлял он про себя, - стану лесничим. Объездчик, лесник - это поначалу. А вот потом...

Не повезло парню: недобрал всего каких-то пару баллов. Отец выслушал молча и без тени огорчения сказал: «Ну что ж, сынок, поработай пока в колхозе. С десятилеткой в Освее не получится: сам знаешь - нет у меня денег, чтобы платить за квартиру, питание...» Александр знал это прекрасно и потому слова отца воспринял как приказ, не подлежащий обсуждению. Колхоз так колхоз, тем более что трудилось там немало его сверстников. Пахал, сеял, бороновал, косил, стоговал сено, свозил в пуню...

Осенью 1940 года Александра Слободу провожала родня в Красную Армию. Нерадостными были эти проводы... Мать захлебывалась слезами. Плакала бабка. То и дело уголком платка утирала глаза тетка. Видно, способно женское сердце учуять беду задолго до черного дня…

Ранним утром отец запряг лошадь. Положил в телегу сена, расстелил сверху дерюжку. Как же трудно оторвать от себя материнские руки... «Ну хватит, мать! - не выдержал отец. - Не на войну же провожаем». Родные лица, дом на окраине леса - как в зыбком тумане. ...Сборный пункт был на станции Дрисса. Иван Степанович развернул телегу, крепко обнял Александра и сказал дрогнувшим голосом: «Счастливой тебе службы, сынок. А когда отслужишь, то ищи свой дом в деревне. Переселимся мы с хутора...» И уехал, ни разу не оглянувшись.

Но не суждено было сбыться его словам. Сына он видел в последний раз... 8 сентября 1942 года партизан бригады Захарова Иван Степанович Слобода выбрался из лесу домой, чтобы заколоть кабанчика. Что–то оставить семье, остальное - на телегу и в лес. Некая черная душа донесла на него карателям. Мать увидела их первой. Вытолкала во двор младшего сына Женю - беги к тетке! Иван Степанович метнулся в баню. Но когда каратели выволокли из дому Ольгу Константиновну и стали люто ее избивать, он не выдержал: «Сволочи, не мучайте женщину! Я здесь»... Схватили обоих и увезли.

На следующий день тетка Федосья пыталась их отыскать в Освее. «Иди в парк, - сказали ей, - там и найдешь...» Маму и отца Александра Ивановича Слободы фашисты расстреляли в парке. Сбросили в яму, закидали кое–как землей...

Никого из родных Слободы, хуторских друзей и однокашников не осталось на свете. Никого. Даже места, где когда–то был их хутор, не найти. И лес стал другим. И все, все - другое. В реку по имени Жизнь дважды не вступишь. Только почему тогда самые солнечные воспоминания о той, довоенной жизни? И почему то солнце, взойдя однажды, уже никогда не заходит? И всякий раз почему–то испуганной птицей встрепенется сердце. От чего? От боли или от счастья?..

Боевое крещение водитель-механик 27-го отдельного разведбатальона (был у разведчиков и кавалерийский взвод, и бронетанковая рота - танкетки Т-37, Т-38 на гусеничном ходу) Александр Слобода получил на шестой день войны. Горстка бойцов (менее взвода) вышла к реке Друть. Командовал ими лейтенант Василий Жмаев. В батальоне это был единственный командир с боевой наградой. За участие в финской кампании лейтенанта наградили орденом боевого Красного Знамени.

Они залегли на картофельном поле.

Рев моторов, лязг гусениц тяжелой волной накатил на них, заставил вжаться в землю. Танки шли на скорости и с той наглой уверенностью, как будто на учениях у себя на полигоне. Следом - три грузовика с солдатами. «Пропустить!» - скомандовал лейтенант. А что они могли сделать со своими винтовками? Но вот показались мотоциклы. От дружного залпа головной мотоцикл опрокинулся, два рванули в сторону, задние пытались развернуться, но было поздно: пули разведчиков настигали их.

В том коротком бою они захватили двоих офицеров с картами, взяли оружие врага, но не в этом было главное: горстка бойцов разгромила колонну мотоциклистов. Враг был во много раз сильнее их, но он разбит. Значит, гитлеровцев можно бить! И побеждать! А через день они заняли оборону по Днепру.

«Это был обыкновенный ад. Гарь. Смрад. Копоть. Через сутки гимнастерка превратилась в бронежилет. Третий день во рту ни крошки. От нестерпимой жажды кажется, что все внутри обуглилось...
Василия Яковенко, пулеметчика, ранило в ключицу: «Саня, выручай. Не могу вести огонь...» - «А патроны где?» - «Снаряд засыпал». Роюсь в земле, кровеня пальцы об осколки и камни. Нахожу диски. Они забиты землей. Мгновенно разбираю, прочищаю, собираю. Пулемет заработал. Когда выдалась минутка, оттащил Василия с огневой позиции, передал сестре.

Не верьте никому, что есть люди, которые не испытывают страха перед смертью. Самое главное - победить его в себе.

Об орденах и медалях тогда никто из нас не думал. Остаться бы в живых - вот высшая награда. До сих пор не могу понять, как я вышел живым из того ада. Даже не ранило... За оборону Могилева меня наградили орденом боевого Красного Знамени. Указ вышел в августе 41–го. Орден был на винту и я носил его на гимнастерке слева. Под сердцем. Он спас мне жизнь. Пуля попала прямо в орден. Вот смотрите... (Александр Иванович достал из шкафа парадный костюм. От сияния наград в комнате стало светлее. Кусочком горячего солнца сверкнула Золотая Звезда Героя Социалистического Труда.) Видите на эмали скол? Вот сюда и угодила пуля. Я потом почувствовал боль. Смотрю - на груди от винта черная вмятина. Рассказываю бойцам - не верят. Стали искать пулю - нашли в гимнастерке. А было это уже под Москвой.

Могилев - та же Брестская крепость. Только огромных масштабов. Наступление немцев здесь было остановлено на три недели. Могилев - это начало победы и под Москвой, и под Сталинградом. Сколько же полегло здесь наших ребят... А ведь каждый верил, что жизнь свою отдает не зря. И вот приказ: оставить город. С тяжелым сердцем мы подчинились ему. На войне как на войне. За победой может последовать и поражение. Не это страшно. Глаза матерей, детей и стариков, когда мы проходили через деревни, я помню по сей день.

Шли в основном ночью. Днем, затаившись в лесу, отрабатывали маршрут и жестоко страдали от сознания своего бессилия: враг не таясь идет по нашей родной земле, а мы должны скрываться, пробираться ночью, как преступники. Мучились от голода: краюшку хлеба, которую крестьяне отрывали от своих детей, делили на 15 - 20 человек и запивали болотной водицей...

В конце августа пробились к своим. Воевал под Ельней. И опять-таки в составе своей 53-й дивизии. А впереди - оборона Москвы. Вот уж действительно стояли насмерть! Каждая пядь земли полита солдатской кровью...

Никогда не забуду, как в ноябре 41-го, перед самым парадом в Москве, вызвал меня командир дивизии генерал-майор Наумов: «Нам необходимы сведения о силах противника у реки Медынь».

Проникли мы в глубокий тыл противника. Собрали необходимые разведданные. Вышли к аэродрому. По вспышкам, которые наблюдали с тыла, нанесли на карту огневые точки. Захватили офицера с картами. Перешли линию фронта и вернулись к своим. Удача тогда сопутствовала нам во всем. Но такие удачи - редкость. Чаще всего было по-другому. Разведчики - народ рискованный, азартный. Накануне Дня Красной Армии провели мы комсомольское собрание. И постановили: отметить очередную годовщину по-боевому. Неподалеку от нас в деревне располагалась немецкая часть. Внезапным ударом мы ее разгромили. А когда возвращались обратно, попали под огонь своих «катюш». О нашей вылазке командование, разумеется, не знало и решило, что немцы что–то затевают. Вот и дали залп. Это был ужас! Своими глазами я увидел, как земля горит под ногами. Каким-то непостижимым чудом мы остались живы. Когда же комдиву доложили, что было на самом деле, тот отреагировал своеобразно: прекратить заниматься военным спортом!

23 февраля 42-го за храбрость при обороне Москвы меня наградили вторым орденом боевого Красного Знамени.

А вот 22 июня 1942 года, как раз в горестную годовщину войны, мне не повезло. Ночью мы вброд перешли реку Угра, проникли в тыл противника. Днем вели наблюдения за всеми передвижениями немцев. А когда наступила ночь, ворвались в их траншею и взяли офицера. Но бесшумно все это проделать не удалось. Была схватка. Я приказал бойцам: «Отходите, мы вас прикроем. А потом - вы прикроете нас». Немцы открыли сильный огонь. А когда мы отошли к опушке леса, завязался настоящий бой. Тут меня и ранило в правую ногу. Разведчики несли меня на плащ-палатке. Так и реку переплывали. Глотнешь воздуха - и с головой под воду. Как я только не захлебнулся! На нашем берегу медсестра меня перевязала, сообщили о ранении командиру дивизии. И тут же выехали за мной из медсанбата. Но пробыл я там недолго: началась газовая гангрена. Меня на самолет - и в Москву, в эвакогоспиталь N 7. Хирург посмотрел и говорит: «Все, лейтенант, ты свое отвоевал. Будем ампутировать...» Разрезали по–живому. Запекшаяся кровь ударила фонтаном. Промыли, прочистили. И к моему великому счастью, обошлось без ампутации.

Вышел из госпиталя... Мне 22 года. На груди - два ордена боевого Красного Знамени, в петлицах - два кубика. Вхожу в метро в вагон электропоезда - мне уступают место люди почтенного возраста. Захожу в парикмахерскую - побрили, постригли, поодеколонили. Даю деньги - не берут. «Героев, товарищ лейтенант, мы обслуживаем бесплатно».

В Большом театре оперы и балета - «Иван Сусанин». А что если рискнуть и попросить билет? Дали да еще извинились, что не в партер!

Калининский фронт. Это уже - сентябрь 42-го. Едва прибыл на место - вызов в штаб армии. «Вы, кажется, белорус по национальности?» - «Да, белорус». - «А вам бы не хотелось попасть в родные края для командования партизанским отрядом?» Оказывается, был приказ Сталина направлять из действующей Красной Армии опытных командиров в партизанские отряды. Так я стал командиром партизанского отряда N 3, действующего на Витебщине. Навел справки о родителях и узнал страшную весть... Но столько тогда бед и несчастий обрушилось на каждую живую душу, что, казалось, из них возникла черная река человеческих страданий. И твое личное горе - лишь капля в ней...

Весной 43-го в бою под деревней Курино на Западной Двине меня тяжело ранило. В ту же правую ногу. На мое счастье, прилетел самолет и меня вместе с другими ранеными отправили на Большую землю. Лечился в городе Калинине. Там же меня признали инвалидом Великой Отечественной войны.

Через три месяца меня выписали. Добрался я в Гомель, потом в Новобелицу, где находились и правительство БССР, и Центральный партизанский штаб. Иду по коридору, а навстречу мне - молодой высокий человек в шинели и в фуражке с красным околышком. «Ты кого тут ищешь, лейтенант?» Объяснил. «Слушай, а давай-ка к нам, в обком комсомола, - и протягивает мне широченную ручищу: Иван Поляков, секретарь Гомельского обкома комсомола...»

До восхода солнца Великой Победы оставалось еще полтора года».

На свою большую жизнь, Александр Иванович, вы можете всегда оглянуться со спокойной совестью. Вы много лет руководили людьми. И умели жить их болями и радостями. Вы совершали дела и поступки, вызывая огонь на себя. Почему сегодня так мало руководителей, способных на это?

- Лично для себя поступок не совершается. Это делается ради общих интересов, во имя людей. Поступок - тот же подвиг. А подвиги даже на войне не могли быть явлением массовым. Всякое случалось: и предательство, и трусость, и подлость, и низость... Но война, как рентген, мгновенно высвечивала в человеческой душе и великое, и ничтожное. А вот в мирной жизни существуют десятки, если не сотни вариантов, как завуалировать и оправдать трусость, подлость, нерешительность, безволие, безответственность. И что характерно: обладая букетом этих человеческих пороков, можно было спокойно жить, руководить и даже числиться в передовиках. В мою душу вошло Буйницкое поле. А там цветы зла не растут.

...После знаменитого «кукурузного» пленума ЦК КПСС последовало жесткое указание: 15 процентов от пашни - под кукурузу. Я в те годы работал первым секретарем Любанского райкома партии. Неисполнение указания - значит уклонение от решений партии. А за такие дела можно было и с должностью расстаться, и с партийным билетом.

Чует моя душа - на беду толкает нас это указание. Приглашаю самых авторитетных председателей колхозов: Кузьму Ивановича Шаплыко, других руководителей. Прошу у них совета. Они в один голос: «Погубим животноводство!» Кукуруза на торфяниках растет, но ранние заморозки ее доконают. Значит, чтобы выдержать эти 15 процентов площадей, надо запахивать травы. Но где гарантия, что кукуруза - панацея от кормовых бед? Из обкома бомбят звонками, требуют отчета. Но ведь было принято постановление ЦК КПБ, где однозначно сказано: не менее 50 процентов площадей - под травы. Неужели ЦК забыл о своем решении? Надо ехать к Кириллу Трофимовичу Мазурову.

Рассказал я Кириллу Трофимовичу о своих тревогах. «Ну, это постановление - наше. А над нами - ЦК КПСС. А вообще–то ты прав. Как быть? Поступай, как советуют руководители хозяйств. Но это - разговор между нами». На том и расстались. А ведь Мазуров мог оборвать меня на полуслове. Выслушал. И, по сути, - поддержал. Почему? Очевидно, потому, что никто из партработников не рискнул обратиться к первому лицу в республике со своими сомнениями. Проще, а главное - безопаснее сказать: поддерживаю и одобряю. А там хоть трава, точнее кукуруза, не расти!

Кукуруза в том знаменательном году так и не выросла. Весна 62-го была холодной, дождливой. Проходит май, июнь, а «королева полей» в хозяйствах соседних районов поднялась над землей на каких-то 5 сантиметров. И все ростки - синие. Вот тебе и кормовое изобилие! Природа, как и человек, не терпит насилия.

А у нас - травостой по пояс. И район наш оказался единственным, где показатели по молоку и мясу дали плюс.

На следующий год в конце весны приезжают в район К.Т.Мазуров и Т.Я.Киселев: «Покажи нам, Александр Иванович, район. Но без показухи. Маршрут определяй сам». Едем. «А что это за стога?» - спрашивает Мазуров. (Зимовка-то была голодной. В колхозах и соломы не осталось.) - «Тимофеевка. Не успели скормить». - «Давайте глянем». Извлек Кирилл Трофимович из стога пучок нежных метелок вперемежку с цветами красного клевера. Поднес к лицу. Потом спрашивает у Киселева: «Скажи-ка, Тихон Яковлевич, чем пахнет?» «Чаем», - ответил Киселев. «Вот единственный руководитель, который действовал как настоящий хозяин. Спасибо тебе, Александр Иванович!» - и крепко пожал мне руку.

Десять лет - первый секретарь Любанского райкома партии. Еще десять лет - партийная и советская работа в регионе (Солигорск, Слуцк). Было время, когда за полтора года семья переезжала 4 раза. И за все эти годы - ни одной жалобы. Вот какие у нас люди!

- Люди как люди, - вмешивается в наш разговор Нина Викентьевна, жена Александра Ивановича. - Важно, что ты никогда не был хапугой. Ты даже мысли не допускал, что можно прихватить что–то для себя, пользуясь служебным положением. Да что там прихватить! Купить что–либо в обход очереди было выше твоих сил. А люди знали об этом и, конечно, ценили...

Первого апреля 1944 года Нина Викентьевна закончила войну. До предела исхудавшую, почти дистрофика (в чем только держался ее боевой дух!) партизанку Павловскую отправят самолетом за линию фронта. Двумя орденами Отечественной войны, боевыми медалями отмечена ее партизанская юность.

После войны Нина Павловская училась в Высшей партийной школе при ЦК КПБ. На комсомольском отделении. Александр Слобода - на партийном. Вот и встретились две судьбы, в которых столько было общего, чтобы дальше идти только вместе. В январе 48–го они поженились. Вырастили сына Евгения и дочь Татьяну. У них - две внучки и правнучка. Это счастливая семья!

Александр Иванович Слобода долгие годы работал заместителем председателя Комитета народного контроля БССР. Он и здесь остался верным своему жизненному принципу: в любом человеке видеть прежде всего человека. И любить его. А с 1987 года Александр Иванович - председатель Минской областной ветеранской организации. К нему идут люди, кого окаянные дни выбили из жизненной колеи. Потому что знают: не холодная чиновничья душа встретит их на пороге, а горячее, большое и доброе сердце, которое никогда не запорошит «холодный пепел остывших костров».

Сегодня он - на заслуженном отдыхе. Но не порывает связь с Компартией, с ветеранской организацией. Как и всегда - боевой, кипучий. И в этом видит счастье в своей жизни, начало которому положил Великий Октябрь.

***
Справка
А.И. Слобода родился в 1920 году в Верхнедвинском районе Витебской области Белоруссии.

Трудовую деятельность начал в 1937 году трактористом. В сентябре 1940 года призван в Красную Армию. Службу проходил в Приволжском военном округе красноармейцем 27-го отдельного разведбатальона 53-й стрелковой дивизии. В 1941-1942 годах в составе этой части в качестве помощника командира взвода участвовал в сражениях на Западном фронте. Был ранен. После излечения воевал командиром роты автоматчиков в 5-й гвардейской дивизии Калининского фронта. С декабря 1942 года по июль 1943 года командовал партизанским отрядом имени Ленинского Комсомола в Витебской области. Был повторно ранен.

С 1943 года и до конца Великой Отечественной войны работал секретарем Гомельского обкома комсомола. После окончания Высшей партийной школы в Минске с 1948 по 1952 год работал секретарем Бобруйского обкома комсомола, с 1952 по 1958 год - секретарем Слуцкого райкома партии, с 1958 по 1961 год - председателем Слуцкого райисполкома, с 1961 по 1970 год - первым секретарем Любанского райкома партии Минской области. С 1975 по 1980 год являлся заместителем председателя комитета народного контроля БССР.

В 1966 году удостоен звания Героя Социалистического Труда. В годы войны и в мирное время награжден орденом Ленина, двумя орденами Красного Знамени, орденами Отечественной войны I степени, Трудового Красного Знамени, «Знак Почета», 20 медалями, а также четырьмя Почетными грамотами БССР.

Автор: 
Леонид ЕКЕЛЬ, «СБ»
Номер газеты: 
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
3 + 2 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.