Здравствуйте! Я новичок в работе с itop. Проект уже год как работает. Вношу изменения в модуль и не пойму как сделать перекомпиляцию. Установила toolkit, но до меня как справлялись без него. Первый вопрос - как это сделать?
Второй - после установки toolkit висит
Checking the consistency of the data model definition…
То есть нет кнопки refresh. В чем может быть дело?
Спасибо!
Здравствуйте.
Для перекомпиляции рабочего проекта, Вам необходимо снять атрибут “только для чтения” с файлы конфигурации iTop и запустить повторно его процесс установки, в режиме обновления.
Спасибо, что откликнулись! Расскажите, пожалуйста, подробнее про процесс установки в режиме обновления?
Может ссылка на мануал?
Спасибо!
Это стандартный процесс.
Описан вот тут https://www.itophub.io/wiki/page?id=2_4_0%3Ainstall%3Aupgrading_itop
Installing extensions or additional modules
The way to install a new extension, or an additional module (i.e. a module which was not selected during the previous installation) is quite similar to an upgrade:
Make sure that the iTop configuration file (config-itop.php in conf/production) is not read-only,
Point your web browser to http(s)://location_of_itop/setup and follow the on-screen instructions.
Спасибо! Помогло
Можно задам тоже вопрос связанный с компиляцией и инсталяцией в этой теме чтобы не плодить новые?
А toolkits это что и как его установить для компилирования?
При установке голой версии 2.4.0 все проходит нормально и все устанавливается.
Я вношу изменения в itop, а именно добавил папку с файлами в “datamodels”. И после этого хочу еще раз с чистого листа установить itop, но с добавленными данными моими. Я правильно понимаю, что проходя Setup по шагам и происходит компиляция?
У меня на этапе Configuration Management options вылазит ошибка:
Parse error: syntax error, unexpected ‘}’ in C:\www\mywebsite\setup\modulediscovery.class.inc.php(446) : eval()'d code on line 65
В этой 65 строке: if (!array_key_exists(‘itop_version’, $aArgs))
Как исправить? Помогите пожалуйста!
Понятно что скобка где-то не закрыта, но где?
Прошу прощения, нашел лишнюю скобку в самом конце. Дальше инсталяция нормально идет.
Но про toolkit все таки вопрос остался, что это и как установить?
На первой вкладке проверяется правильность модели данных: изменил модуль, нажал Refresh, если есть ошибки, исправляешь, если нет, идешь на вторую вкладку. На второй вкладке нажимаешь Refresh, если отображаются необходимые изменения в БД, нажимаешь Udpate iTop Code And Database, если изменять БД не нужно, жмешь Udpate iTop Code. Всё, изменения модуля применены.
Так это toolkit для уже установленного itop. У меня пока нет установленного. Соответственного пользоваться я им не могу.
Помогите с проблемой компиляции разобраться. Добавил модуль. Модуль проверил, все правильно и корректно написано.
При компиляции на 20% зависает и выдает: Parse error: syntax error, unexpected ‘2’ (T_LNUMBER) in C:\www\itop\setup\modelfactory.class.inc.php(718) : eval()'d code on line 15.
В 15 строке в файле пусто. Пустая строка. ЧТо означает 718 в скобках? Понятно что цифра 2 где-то лишняя, но где ее искать?
Помогите пожалуйста разобраться.
Mik cделайте все по людски.
- установить голый продукт, со стандартным набором модулей, ничего не изменяя.
- установить toolkit
- скопируйте свой модуль в папку /var/www/you_itop/extencsion/you_module
- перейдите в toolkit http://you_itop/toolkit и он вам проверит все и выдаст рекомендации.
Если после этого не разберетесь выложите тут файл мы посмотрим.
По-людски будет вот так:
- установи голый продукт, с нужным набором модулей, ничего не изменяя
- установи toolkit
- скопируй свой модуль С ПУСТОЙ МОДЕЛЬЮ ДАННЫХ в папку C:\www\itop\extensions
- обнови айтоп через http://you_itop/setup, на последнем шаге отметь для установки свой модуль
- закинь модель данных в модуль
- перейди в toolkit
Без пункта 3 установка завершится той же ошибкой. Без пункта 4 тулкит не увидит новый модуль.
Борис, Владимир, давайте по порядку объясню что я хочу сделать и что получить на выходе и что делаю.
Ранее я задавался вопросом аутентификации пользователей из разных AD в разных лесах в одной системе itop в этой теме Интеграция itop и active directory
Долго мучился и вообщем-то своей головой в нужном направлении додумался как это сделать, позже нашел объяснение на форуме разработчика как это можно сделать, что и пытаюсь применить.
А именно чтобы была возможность настройки двух LDAP серверов в файле конфигурации itop, нужно сделать копию папки \datamodels\2.x\authent-ldap\ и переименовать ее в \datamodels\2.x\authent-ldap2. Внутри папки файлы
en.dict.authent-ldap.php
model.authent-ldap.php
module.authent-ldap.php
ru.dict.authent-ldap.php
Переименовать в
en.dict.authent-ldap2.php
model.authent-ldap2.php
module.authent-ldap2.php
ru.dict.authent-ldap2.php
Содержимое файлов соответственно тоже изменить ldap на ldap2 и LDAP на LDAP2.
После чего пройти инсталляцию, чтобы скомпилировалось с добавленными изменениями.
Так вот на этапе инсталляции и компиляции происходит на 20% зависание с ошибкой:
Parse error: syntax error, unexpected ‘2’ (T_LNUMBER) in C:\www\itop\setup\modelfactory.class.inc.php(718) : eval()'d code on line 15.
Файлы сюда текстовые прикрепить не могу, поэтому выложу код:
model.authent-ldap2.php
Summary
<?php
// Copyright © 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see http://www.gnu.org/licenses/
/**
- Authent LDAP2
- User authentication Module, no password at all!
- @copyright Copyright © 2010-2012 Combodo SARL
-
@license http://opensource.org/licenses/AGPL-3.0
*/
class UserLDAP2 extends UserInternal
{
public static function Init()
{
$aParams = array
(
“category” => “addon/authentication”,
“key_type” => “autoincrement”,
“name_attcode” => “login”,
“state_attcode” => “”,
“reconc_keys” => array(‘login’),
“db_table” => “”,
“db_key_field” => “id”,
“db_finalclass_field” => “”,
“display_template” => “”,
);
MetaModel::Init_Params($aParams);
MetaModel::Init_InheritAttributes();
// Display lists
MetaModel::Init_SetZListItems('details', array('contactid', 'first_name', 'email', 'login', 'language', 'status', 'profile_list', 'allowed_org_list')); // Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('list', array('first_name', 'last_name', 'login', 'status')); // Attributes to be displayed for a list
// Search criteria
MetaModel::Init_SetZListItems('standard_search', array('login', 'contactid', 'status')); // Criteria of the std search form
MetaModel::Init_SetZListItems('advanced_search', array('login', 'contactid')); // Criteria of the advanced search form
}
/**
* Check the user's password against the LDAP2 server
* Algorithm:
* 1) Connect to the LDAP2 server, using a predefined account (or anonymously)
* 2) Search for the specified user, based on a specific search query/pattern
* 3) If exactly one user is found, continue, otherwise return false (wrong user or wrong query configured)
* 3) Bind again to LDAP2 using the DN of the found user and the password
* 4) If the bind is successful return true, otherwise return false (wrong password)
* @param string $sPassword The user's password to validate against the LDAP2 server
* @return boolean True if the password is Ok, false otherwise
*/
public function CheckCredentials($sPassword)
{
$sLDAP2Host = MetaModel::GetModuleSetting('authent-ldap2', 'host', 'localhost');
$iLDAP2Port = MetaModel::GetModuleSetting('authent-ldap2', 'port', 389);
$sDefaultLDAP2User = MetaModel::GetModuleSetting('authent-ldap2', 'default_user', '');
$sDefaultLDAP2Pwd = MetaModel::GetModuleSetting('authent-ldap2', 'default_pwd', '');
$bLDAP2StartTLS = MetaModel::GetModuleSetting('authent-ldap2', 'start_tls', false);
$aOptions = MetaModel::GetModuleSetting('authent-ldap2', 'options', array());
if (array_key_exists(LDAP_OPT_DEBUG_LEVEL, $aOptions))
{
// Set debug level before trying to connect, so that debug info appear in the PHP error log if ldap_connect goes wrong
$bRet = ldap_set_option($hDS, LDAP_OPT_DEBUG_LEVEL, $aOptions[LDAP_OPT_DEBUG_LEVEL]);
$this->LogMessage("ldap_set_option('$name', '$value') returned ".($bRet ? 'true' : 'false'));
}
$hDS = @ldap_connect($sLDAP2Host, $iLDAP2Port);
if ($hDS === false)
{
$this->LogMessage("ldap_authentication: can not connect to the LDAP2 server '$sLDAP2Host' (port: $iLDAP2Port). Check the configuration file config-itop.php.");
return false;
}
foreach($aOptions as $name => $value)
{
$bRet = ldap_set_option($hDS, $name, $value);
$this->LogMessage("ldap_set_option('$name', '$value') returned ".($bRet ? 'true' : 'false'));
}
if ($bLDAP2StartTLS)
{
$this->LogMessage("ldap_authentication: start tls required.");
$hStartTLS = ldap_start_tls($hDS);
//$this->LogMessage("ldap_authentication: hStartTLS = '$hStartTLS'");
if (!$hStartTLS)
{
$this->LogMessage("ldap_authentication: start tls failed.");
return false;
}
}
if ($bind = @ldap_bind($hDS, $sDefaultLDAP2User, $sDefaultLDAP2Pwd))
{
// Search for the person, using the specified query expression
$sLDAP2UserQuery = MetaModel::GetModuleSetting('authent-ldap2', 'user_query', '');
$sBaseDN = MetaModel::GetModuleSetting('authent-ldap2', 'base_dn', '');
$sLogin = $this->Get('login');
$iContactId = $this->Get('contactid');
$sFirstName = '';
$sLastName = '';
$sEMail = '';
if ($iContactId > 0)
{
$oPerson = MetaModel::GetObject('Person', $iContactId);
if (is_object($oPerson))
{
$sFirstName = $oPerson->Get('first_name');
$sLastName = $oPerson->Get('name');
$sEMail = $oPerson->Get('email');
}
}
// %1$s => login
// %2$s => first name
// %3$s => last name
// %4$s => email
$sQuery = sprintf($sLDAP2UserQuery, $sLogin, $sFirstName, $sLastName, $sEMail);
$hSearchResult = @ldap_search($hDS, $sBaseDN, $sQuery);
$iCountEntries = ($hSearchResult !== false) ? @ldap_count_entries($hDS, $hSearchResult) : 0;
switch($iCountEntries)
{
case 1:
// Exactly one entry found, let's check the password by trying to bind with this user
$aEntry = ldap_get_entries($hDS, $hSearchResult);
$sUserDN = $aEntry[0]['dn'];
$bUserBind = @ldap_bind($hDS, $sUserDN, $sPassword);
if (($bUserBind !== false) && !empty($sPassword))
{
ldap_unbind($hDS);
return true; // Password Ok
}
$this->LogMessage("ldap_authentication: wrong password for user: '$sUserDN'.");
return false; // Wrong password
break;
case 0:
// User not found...
$this->LogMessage("ldap_authentication: no entry found with the query '$sQuery', base_dn = '$sBaseDN'. User not found in LDAP2.");
break;
default:
// More than one entry... maybe the query is not specific enough...
$this->LogMessage("ldap_authentication: several (".ldap_count_entries($hDS, $hSearchResult).") entries match the query '$sQuery', base_dn = '$sBaseDN', check that the query defined in config-itop.php is specific enough.");
}
return false;
}
else
{
// Trace: invalid default user for LDAP2 initial binding
$this->LogMessage("ldap_authentication: can not bind to the LDAP2 server '$sLDAP2Host' (port: $iLDAP2Port), user='$sDefaultLDAP2User', pwd='$sDefaultLDAP2Pwd'. Error: '".ldap_error($hDS)."'. Check the configuration file config-itop.php.");
return false;
}
}
public function TrustWebServerContext()
{
return false;
}
public function CanChangePassword()
{
return false;
}
public function ChangePassword($sOldPassword, $sNewPassword)
{
return false;
}
protected function LogMessage($sMessage, $aData = array())
{
if (MetaModel::GetModuleSetting('authent-ldap2', 'debug', false) && MetaModel::IsLogEnabledIssue())
{
if (MetaModel::IsValidClass('EventIssue'))
{
$oLog = new EventIssue();
$oLog->Set('message', $sMessage);
$oLog->Set('userinfo', '');
$oLog->Set('issue', 'LDAP2 Authentication');
$oLog->Set('impact', 'User login rejected');
$oLog->Set('data', $aData);
$oLog->DBInsertNoReload();
}
IssueLog::Error($sMessage);
}
}
}
?>
module.authent-ldap2.php
Summary
<?php
// Until we develop a mean to adress this within the setup, let’s check that this instance
// of PHP has the php_ldap extension
//
if (function_exists(‘ldap_connect’))
{
SetupWebPage::AddModule(
FILE, // Path to the current file, all other file names are relative to the directory containing this file
‘authent-ldap2/2.4.0’,
array(
// Identification
//
‘label’ => ‘User authentication based on LDAP2’,
‘category’ => ‘authentication’,
// Setup
//
'dependencies' => array(
),
'mandatory' => false,
'visible' => true,
// Components
//
'datamodel' => array(
'model.authent-ldap2.php',
),
'data.struct' => array(
//'data.struct.authent-ldap2.xml',
),
'data.sample' => array(
//'data.sample.authent-ldap2.xml',
),
// Documentation
//
'doc.manual_setup' => '',
'doc.more_information' => '',
// Default settings
//
'settings' => array(
'host' => 'localhost', // host or IP address of your LDAP2 server
'port' => 389, // LDAP2 port (std: 389)
'default_user' => 'DOMAIN\USER', // User and password used for initial "Anonymous" bind to LDAP2
'default_pwd' => 'PASSWORD', // Leave both blank, if anonymous (read-only) bind is allowed
'base_dn' => 'DC=DOMAIN,DC=COM', // Base DN for User queries, adjust it to your LDAP2 schema
'user_query' => '(sAMAccountname=%1$s)', // Query used to retrieve each user %1$s => iTop login
// For Windows AD use (samaccountname=%1$s) or (userprincipalname=%1$s)
// Some extra LDAP2 options, refer to: http://www.php.net/manual/en/function.ldap-set-option.php for more info
'options' => array(
LDAP_OPT_PROTOCOL_VERSION => 3,
LDAP_OPT_REFERRALS => 0,
),
'start_tls' => false,
'debug' => false,
),
)
);
} // if (function_exists(‘ldap_connect’))
Логины и пароли с ldap сервером, понятно, свои.
Где я мог тут ошибится что мне при компиляции выдает ошибку?
Parse error: syntax error, unexpected ‘2’ (T_LNUMBER) in C:\www\itop\setup\modelfactory.class.inc.php(718) : eval()'d code on line 15.
Тема с дискуссией англоязычная, я и там спросил - https://sourceforge.net/p/itop/discussion/1113906/thread/c4f3f27e/?limit=25
О, мои глаза!))) Продолжу в теме про LDAP…