/** * 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); } Интернациональный долг был выполнен достойно | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Интернациональный долг был выполнен достойно

(К 22-ой годовщине вывода Советских войск из Афганистана)
15 февраля исполняется 22-ая годовщина вывода ограниченного контингента советских войск из Демократической Республики Афганистан. Несмотря на то, что минуло более двадцати лет, многих продолжает волновать вопрос, почему наши воины оказались за рубежами Родины, какую цель имели, насколько оправданной была помощь Советских Вооруженных сил и каковы последствия этой акции Советского Союза. Попытаюсь ответить на эти вопросы и поделиться воспоминаниями от пребывания в Демократической Республике Афганистан.
27 апреля 1978 года в Афганистане произошла национально-демократическая революция, которая смела антинародный режим Дауда, выражавший интересы эксплуататорских классов. Движущими силами революции стали трудящиеся массы и прогрессивно настроенные военнослужащие вооруженных сил. А руководящей и направляющей силой – Народно-демократическая партия Афганистана (НДПА), возглавляемая известным писателем Мухамедом Тараки. Новое руководство объявило страну Демократической Республикой Афганистан (ДРА) и взяло курс на создание общества социалистической ориентации. Идеология НДПА была близка к марксистско-ленинской теории. Поэтому не случайно по просьбе руководства ДРА уже в мае 1978 года Советский Союз направил в Афганистан большую группу советников и специалистов, в том числе и в Вооруженные силы, а также оказал молодому государству экономическую и гуманитарную помощь.
Политика новой власти вызвала острое противостояние зажиточных слоев в деревне, прозападных капиталистических элементов в городе, религиозных фанатиков и националистических экстремистов. Немало усилий по удушению афганской революции приложили международные империалистические силы во главе с Соединен-
ными Штатами Америки. На территории Пакистана и других сопредельных с Афганистаном государств были организованы многие десятки лагерей, где американские и другие военные специалисты готовили банды, щедро обеспечивали их вооружением, военной техникой и снаряжением, деньгами и направляли их на территорию Афганистана. Одновременно велась активная клеветническая кампания в СМИ по дискредитации целей апрельской революции, политики НДПА и советско-афганской дружбы.
К концу 1979 года народная власть оказалась под угрозой уничтожения контрреволюционными силами. Трагическая ситуация усиливалась серьезными распрями в руководящей партии, о чем есть необходимость сказать особо.
НДПА была создана в 1965 году. Ее основателями называют трех человек: Мухаммеда Тараки, Мир Акбар Хайбара и Бобрака Кармаля. В конце 1965 года после учебы в США возвратился в страну и был введен в ЦК НДПА Хафизулла Амин, который перессорил руководителей партии, что привело к ее расколу на два крыла: «Хальк» (народ) и «Парчам» (знамя). Оба крыла ставили одну и ту же цель – построение демократического государства социалистической ориентации. Однако несколько отличалась тактика, более радикальная у первых и более либеральная у других. Это вытекало из их социального состава. Среди халькистов большинство составляли выходцы из простонародья: крестьян, ремесленников, младших армейских чинов. Среди парчамистов преобладали представители интеллигенции и близких к ним социальных слоев. Крылья то объединялись, то опять расходились, но революцию делали вместе. В стране назревала революционная ситуация, а поводом для народного взрыва стало убийство террористами из исламской экстремистской организации «Братья мусульмане» одного из лидеров НДПА подполковника Вооруженных сил Мир Акбар Хайбара в конце апреля 1978 года. После революции Амину удалось устранить из властных структур парчамистов, а затем развязать террор против них. Утвердившись у власти, он уничтожил и лидера страны Тараки, а затем начал заигрывать с американцами. И, тем не менее, Амин сам неоднократно обращался к советскому руководству с просьбой о вводе советских войск для спасения Апрельской революции.
шно созерцать, как в соседней дружественной стране уничтожаются плоды близкой ему по духу национально-демократической революции, потому откликнулся на просьбу афганского правительства о военной помощи и послал ограниченный контингент своих войск в ДРА 26 декабря 1979 года.
Была и другая геополитическая причина ввода советских войск в Афганистан. Дело в том, что США и их союзники уже не один год в процессе холодной войны окружали СССР и весь социалистический лагерь своими военными базами, которых насчитывалось более 2000, и агрессивными военными блоками НАТО, СЕАТО, СЕНТО, АНЗЮС. Возникла опасность, что территория Афганистана, являющегося подбрюшьем южных границ СССР, будет наводнена американскими военными базами. Следовательно, с юга силы агрессии вплотную приблизились бы к территории Советского Союза. Этого нельзя было допустить. Таким образом, оказывая братскую помощь народу Афганистана, мы одновременно противостояли экспансии американского империализма.
Ввод советских войск совпал с устранением от власти Амина. Страну возглавил другой руководитель – Бобрак Кармаль.
Вначале перед советскими воинскими частями ставилась зада­-
ча взять под охрану государствен­но-административные и народно-хозяйственные объекты. А боевые действия против контрреволю­ционно-бандитских формирований должны были вести афганские воинские части и другие силовые структуры. Вскоре выяснилось, что многие афганские воинские части самостоятельно сражаться против бандитов не могут ввиду низкой боеспособности и низкого морального духа личного состава. Вследствие этого в боевых операциях пришлось участвовать и советским воинским частям.
На первых порах контрреволюционные силы вели боевые действия крупными бандформированиями, но вскоре изменили тактику и разбились на относительно небольшие группы, которые наносили внезапные удары, используя особенности хорошо знакомого им горного рельефа, где на театре военных действий отсутствовала линия фронта. Это осложняло выполнение боевых задач правительственными и советскими войсками. В большинстве военные действия сводились к зачисткам местности, населенных пунктов и вытеснению душманов из горных ущелий. И меньше в открытых боестолкновениях.
Советские воины глубоко осознавали, что, помогая афганскому народу, они выполняют свой благородный интернациональный долг. Не случайно, афганская эпопея изобилует многочисленными примерами стойкости и отваги, мужества и героизма солдат, сержантов и офицеров. Они служили вдохновляющим примером и поднимали боевой дух и афганских войск, обеспечивали уничтожение душманских банд, отражение натиска реакционных сил и их зарубежных вдохновителей.
Как я уже говорил, наряду с советским воинским контингентом в ДРА были направлены военные советники, в числе которых довелось быть и мне. Следовательно, о событиях тех лет я знаю не понаслышке.
Будучи начальником отдела организационно-партийной работы политуправления Белорусского Военного Округа, я знал о передислокации воздушно-десантных и некоторых других частей из Белоруссии в Туркестанский военный округ.
Поэтому для меня не стало неожиданным назначение меня советником начальника политотдела армейского корпуса Вооруженных сил ДРА, штаб которого дислоцировался в Кабуле. Уже 12 января 1980 года меня инструктировал Первый заместитель начальника Главного политуправления Советской Армии и Военно-Морского Флота генерал-полковник Г.В.Средин, который четко определил главную задачу – помочь молодым политорганам корпуса наладить партийно-политическую работу по повышению боеспособности частей и политико-морального состояния личного состава. Подчеркнул важность работы по формированию в военной среде понимания необходимости укрепления единства партийных рядов НДПА.
В армейском корпусе работала довольно многочисленная группа советников. Достаточно сказать, что в управлении корпуса было 11 советников (у командира, начальника штаба, начальников службы и два в политотделе), по четыре в управлениях дивизий, по два в полках и отдельных батальонах. Части корпуса дислоцировались в девяти восточных провинциях, преимущественно в горной местности. Пришлось нашим советникам овладевать тактикой ведения боевых действий в горно-лесистой местности.
Укомплектованность афганских подразделений желала лучшего, слаженность и обученность подразделений не вызывала оптимизма. Среди солдат немало было неграмотных или малограмотных, многие подсоветные не владели русским языком, и приходилось пользоваться помощью переводчиков. Все это создавало дополнительные трудности в работе советников в выполнении ответственной задачи по оказанию помощи командирам и политработникам в повышении боеспособности войск.
Офицерский корпус афганских Вооруженных сил, особенно политработники, отличался своей молодостью. Многие закончили советские военные училища и хорошо владели русским языком. Моим «подсоветным» оказался тридцатилетний начальник политотдела корпуса старший лейтенант
Мухаммед Насим, окончивший Одесское зенитно-артиллерийское военное училище. Мы с ним общались без переводчика. Он состоял в НДПА с дореволюционных времен и считал себя убежденным марксистом. Кстати, большинство офицеров штаба корпуса тоже были членами партии, некоторые с гордостью называли себя
коммунистами.
Вместе с тем давали о себе знать рецидивы противоречий между двумя крыльями в партии, хотя после апрельской революции состоялся объединительный съезд НДПА. Выполняя его решения, руководство партии настойчиво проводило линию на обеспечение единства партийных рядов, осуждало деление на крылья. На это направлялась и кадровая политика, в том числе и в Вооруженных силах. Так в руководстве корпуса командир и начальник штаба ранее принадлежали к крылу «Парчам», начальник политотдела – к «Хальк», а его заместитель – к «Парчам». И так в разных вариациях во всех соединениях и частях.
Однако процесс партийного единения в Вооруженных силах шел не гладко. То там, то здесь вспыхивали распри, взаимные обвинения, отмечались групповщина и недоверие друг к другу. Советникам приходилось немало времени уделять разрешению споров, налаживанию взаимного доверия.
Политорганы корпуса еще проходили процесс сколачивания. Из четырех дивизий политотделы трех были в основном укомплектованы, но в 9-й горно-пехотной дивизии, располагавшейся в провинции Кунар, политотдел числился только на бумаге. Назначенными оказались только два инструктора. Зато полковое звено было укомплектовано закаленными бойцами революционной борьбы. Однако в подразделениях, где штатным расписанием предусматривалось наличие замполитов рот, политработники полностью отсутствовали.
Пришлось посоветовать полит­отделу, продумать организацию курсов по подготовке замполитов рот из членов партии командиров взводов, а также сержантов и солдат, имеющих достаточную общеобразовательную подготовку. Занятия проводили офицеры политотдела и советники с помощью переводчиков. В течение месяца было подготовлено 77 замполитов рот, которые после экзамена были направлены в части. Впоследствии со многими приходилось встречаться в войсках, в том числе и в боевой обстановке и отмечать, что курсы прошли для них с пользой.
Части корпуса постоянно участвовали в боевых операциях, зачастую во взаимодействии с подразделениями ограниченного контингента Советской Армии. Вместе со своими подсоветными в боевых действиях участвовали и наши советники. Острие работы с личным составом направлялось на разъяснение боевых задач и поднятие боевого духа. Стало правилом при подготовке операций проводить целую систему мероприятий политработы с различными категориями военнослужащих. Тем не менее, действенность приложенных усилий, а также эффективность проведенных операций зачастую были низкими. Это стало особенно очевидным после того, как душманы изменили свою тактику и начали действовать преимущественно небольшими группами, устраивать засады, производить неожиданные вылазки и диверсии, внедрение в афганские воинские части своих людей.
К сожалению, фактов низкого морального духа, трусости и даже предательства было немало. В марте 1980 года в Кунаре пришлось быть свидетелем бегства целого подразделения от приближающейся банды душманов.
В июне того же года в отдельном разведывательном батальоне корпуса в провинции Бомиан подняли мятеж два офицера, которые скрывали свою принадлежность к организации «Братья мусульмане» и выполняли задание Гульбитдина Хекматиара, одного из лидеров душманов. Они во время построения батальона расстреляли руководящий состав и членов партии, затем увели в горы значительную часть личного состава.
Излюбленными приемами контр­революционных сил были провокации и диверсии, дезинформация населения и военнослужащих, чтобы настроить их против народной власти и Советской Армии. Они часто засылали свою агентуру с целью вербовки единомышленников, склонения на свою сторону колеблющихся, физической расправы над стойкими сторонниками народной власти, патриотически настроенными военнослужащими и для разжигания внутрипартийных распрей. Велась охота на авторитетных военачальников и советских военных советников.
Летом 1980 года руководство корпуса получило сообщение, что якобы в результате распрей между замполитом батальона халькистом Али Сарваром и командиром роты парчамистом Касемом был сдан противнику гарнизон Алингар, что в провинции Лагман. Расследование же показало, что мятеж ночью поднял агент исламистов командир пулеметной роты Лал Мамат, который убил спящих руководителей батальона, в затем построил подразделение и перед строем расстрелял не успевших скрыться под покровом темноты членов партии и Демократической организации молодежи Афганистана (ДОМА). Затем он распространил слух, что сдача гарнизона было следствием внутрипартийных распрей между офицерами подразделения.
Этот и другие подобные случаи заставили командование, политотдел и советников проявлять боль­-
ше внимания вопросам бдительности и проверке кадров, прибывающих в части, разоблачению коварных методов работы враждебных сил и их антинародных целей.
Помощь западных спонсоров своим афганским наймитам постоянно возрастала. У душманов появились зенитные ракеты «Стингер», новейшие образцы стрелкового вооружения, гранатометы, современные средства минирования и связи. Натаскивая и опекая бандформирования, американцы создавали свою будущую головную боль – «Аль-Каиду» и талибов, с которыми сейчас сами не в состоянии справиться, и теперь увязли в Афганистане, хотя некоторые политологи полагают, что увязнуть, чтобы никогда не уйти оттуда, таков и был расчет американских правящих кругов и агрессивной военщины. Время подтвердило, что не напрасна была обеспокоенность советского руководства развитием ситуации у его южных границ.
Не прошло и трех лет после ухода советских войск из ДРА, как США и их союзники руками обильно прикормленных контрреволюционных сил, реакционного духовенства и помещиков, религиозных фанатиков-талибов расправились с афганской революцией и потопили в крови прогрессивные силы, казнили главу правительства Наджибуллу и других руководителей Народно-демократической партии и государства. Многострадальный Афганистан превратился в очаг средневекового мракобесия, производителя и поставщика наркотиков, базу международного терроризма.
За время работы в Афганистане мне приходилось общаться не только с военнослужащими, но и с гражданским населением. За редким исключением афганцы относились к «шурави» дружелюбно и с уважением. Но под влиянием активно проводимой враждебной пропаганды отношения изменялись не в лучшую сторону. Этому способствовали и факты недостойного поведения отдельных наших воинов по отношению к местному населению, о которых очень быстро узнавал весь Афганистан. Горько осознавать, что, несмотря на интернациональную помощь Советского Союза, трудолюбивый и талантливый народ многострадального Афганистана не смог воспользоваться плодами своей революции.
Интернациональный долг был выполнен достойно. И не вина наших воинов, что война не была доведена до победного конца. Были и невосполнимые потери. Мы глубоко скорбим и склоняем головы перед памятью павших в сражениях с душманами на земле Афганистана. Нельзя согласиться с теми, кто обывательски и приземленно оценивают благородную миссию советских войск в Афганистане и считают напрасными наши усилия по поддержке афганской революции.
Вывод Советских войск из Афганистана был первой серьезной уступкой Западу тогдашнего руководства СССР во главе с М.С.Горбачевым. Затем последовали сдача ГДР, ликвидация Организации Варшавского Договора и Совета Экономической Взаимопомощи, что последовательно ослабляло международные позиции Советского Союза и приближало торжество внешних и внутренних антисоветских сил, ликвидировавших СССР. Такова правда об афганской эпопее.

Автор: 
Андрей КОВАЛЬ, заместитель председателя Совета партии, член Военно-научного общества при ЦДО, полковник в отставке
Номер газеты: