Ticket #646 (closed defeito: invalid)

Opened 11 years ago

Last modified 11 years ago

Erro ao criar usuário no ExpressoAdmin

Reported by: wmerlotto Owned by: alguem
Priority: grave Milestone: Expresso 2.0
Component: ExpressoAdmin Version: trunk
Severity: Keywords:
Cc: WorkGroup:

Description

Fui criar um novo usuário pelo ExpressoAdmin e após acessar a interface de "Contas de usuários" a tag "Carregando..." no canto superior direito não saía e ainda não conseguia selecionar os grupos para o novo usuário. Nos logs do apache/php só apareceu isso:

PHP Fatal error:  Call to undefined function lang() in /var/www/html/trunk/phpgwapi/inc/class.common.inc.php on line 329

Estou utilizando CentOS-5.3 com php-5.2.6 e navegador firefox-3.5.

Change History

comment:1 follow-up: ↓ 3 Changed 11 years ago by niltonneto

Só nessa distribuição ocorre o problema?

comment:2 follow-up: ↓ 4 Changed 11 years ago by rodsouza

Isso não é problema diretamente ligado ao ExpressoLivre?.

comment:3 in reply to: ↑ 1 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Só nessa distribuição ocorre o problema?

Não pude testar em outras distribuições, mas também está ocorrendo com outras versões do PHP.

comment:4 in reply to: ↑ 2 Changed 11 years ago by wmerlotto

Replying to rodsouza:

Isso não é problema diretamente ligado ao ExpressoLivre?.

Ok, pode não ser, mas então onde está o problema?

comment:5 follow-ups: ↓ 6 ↓ 22 Changed 11 years ago by niltonneto

Testei aqui no Ubuntu 8.10 e Debian Lenny, PHP 5.2.6 em ambos, e funcionou normalmente. Talvez haja alguma diferença no seu php.ini. Dá uma olhada e compare com php.ini da dist Debian....

comment:6 in reply to: ↑ 5 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Testei aqui no Ubuntu 8.10 e Debian Lenny, PHP 5.2.6 em ambos, e funcionou normalmente. Talvez haja alguma diferença no seu php.ini. Dá uma olhada e compare com php.ini da dist Debian....

Está estranho... Revisei toda a configuração do php.ini e aumentei os logs. O problema ainda persiste, e estes são os logs registrados no servidor:

PHP Notice:  Undefined index:  _action in /var/www/expresso/expressoAdmin1_2/controller.php on line 4
PHP Notice:  Undefined offset:  2 in /var/www/expresso/expressoAdmin1_2/controller.php on line 19
PHP Notice:  Undefined offset:  1 in /var/www/expresso/expressoAdmin1_2/controller.php on line 19
PHP Notice:  Undefined index:  _action in /var/www/expresso/expressoAdmin1_2/controller.php on line 4
PHP Notice:  Undefined offset:  2 in /var/www/expresso/expressoAdmin1_2/controller.php on line 19
PHP Notice:  Undefined offset:  1 in /var/www/expresso/expressoAdmin1_2/controller.php on line 19
PHP Notice:  Undefined index:  _action in /var/www/expresso/expressoAdmin1_2/controller.php on line 4
PHP Notice:  Constant PHPGW_INCLUDE_ROOT already defined in /var/www/expresso/expressoAdmin1_2/inc/class.db_functions.inc.php on line 2
PHP Notice:  Constant PHPGW_API_INC already defined in /var/www/expresso/expressoAdmin1_2/inc/class.db_functions.inc.php on line 3
PHP Notice:  Undefined index:  _action in /var/www/expresso/expressoAdmin1_2/controller.php on line 4
PHP Notice:  Undefined index:  _action in /var/www/expresso/expressoAdmin1_2/controller.php on line 4
PHP Notice:  Constant PHPGW_INCLUDE_ROOT already defined in /var/www/expresso/expressoAdmin1_2/inc/class.db_functions.inc.php on line 2
PHP Notice:  Constant PHPGW_API_INC already defined in /var/www/expresso/expressoAdmin1_2/inc/class.db_functions.inc.php on line 3
PHP Notice:  Undefined variable: _SESSION in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 26
PHP Notice:  Undefined variable: _SESSION in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 27
PHP Notice:  Undefined index:  phpgw in /var/www/expresso/phpgwapi/inc/class.common.inc.php on line 324
PHP Notice:  Trying to get property of non-object in /var/www/expresso/phpgwapi/inc/class.common.inc.php on line 324
PHP Fatal error:  Call to undefined function lang() in /var/www/expresso/phpgwapi/inc/class.common.inc.php on line 329

Alguém tem uma dica?

comment:7 follow-up: ↓ 8 Changed 11 years ago by niltonneto

Desligue o notice. Em php.ini: error_reporting = E_ALL & ~E_NOTICE

comment:8 in reply to: ↑ 7 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Desligue o notice. Em php.ini: error_reporting = E_ALL & ~E_NOTICE

Então, ativei o notice justamente para ver se ajudava... Sem o notice o erro continua o mesmo descrito no ticket.

comment:9 Changed 11 years ago by niltonneto

Humm, você está com problema de bind no LDAP. Não está deixando nem logar como anonimo. Mas no ExpressoAdmin, por causa disso, você descobriu um bug quando há esse tipo de problema realmente. Pelo código que vi, acho que a chamada ajax não está incluindo o PHP que contém a função lang(), gerando esse erro. Agora sim, vou tentar reproduzi-lo aqui. E você, dá uma olhada no teu setup. Pode ter alguma configuração do LDAP errada lá....

comment:10 follow-up: ↓ 12 Changed 11 years ago by niltonneto

Consegui reproduzir o erro. Em setup, configurações, você ter preenchido o item "If using LDAP replication" errado. Se você utiliza o mesmo ldap para leitura e escrita, deixa tudo em branco. Em relação ao bug "PHP Fatal error: Call to undefined function lang()", vou verificar.

comment:11 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Humm, você está com problema de bind no LDAP. Não está deixando nem logar como anonimo.

É apareceram algumas mensagens relacionadas ao bind mesmo...

ldap_bind() [<a href='function.ldap-bind'>function.ldap-bind</a>]: Unable to bind to server: Invalid credentials in /var/www/expresso/setup/index.php on line 422

Mas no ExpressoAdmin, por causa disso, você descobriu um bug quando há esse tipo de problema realmente. Pelo código que vi, acho que a chamada ajax não está incluindo o PHP que contém a função lang(), gerando esse erro. Agora sim, vou tentar reproduzi-lo aqui.

Ok!

E você, dá uma olhada no teu setup. Pode ter alguma configuração do LDAP errada lá....

Cara, revisei o setup e está ok. Tanto que acesso o menu "Organizações" do módulo ExpressoAdmin sem problemas.

Só para confirmar, não é necessário configurar o servidor master do LDAP, correto?

comment:12 in reply to: ↑ 10 ; follow-up: ↓ 14 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Consegui reproduzir o erro. Em setup, configurações, você ter preenchido o item "If using LDAP replication" errado. Se você utiliza o mesmo ldap para leitura e escrita, deixa tudo em branco.

Então, sempre esteve em branco... Não alterei estas opções.

Em relação ao bug "PHP Fatal error: Call to undefined function lang()", vou verificar.

comment:13 Changed 11 years ago by niltonneto

Só consegui reproduzir esse problema salvando, e de forma errada, as configurações do ldap master. Se eu salvo em branco (utilização padrão), saio e entro novamente no Expresso, então ele funciona sem erros.

comment:14 in reply to: ↑ 12 ; follow-ups: ↓ 15 ↓ 16 Changed 11 years ago by niltonneto

Corrigido em [1414]. Refere-se ao bug "PHP Fatal error: Call to undefined function lang()". Verifique no Firebug ou no console Javascript, qual erro de LDAP bind retornado.

comment:15 in reply to: ↑ 14 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Corrigido em [1414]. Refere-se ao bug "PHP Fatal error: Call to undefined function lang()".

Maravilha! Agora os erros do bind estão mais visíveis:

PHP Warning:  ldap_bind() [<a href='function.ldap-bind'>function.ldap-bind</a>]: Unable to bind to server: Can't contact LDAP server in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 100
PHP Warning:  ldap_list(): supplied argument is not a valid ldap link resource in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 690
PHP Warning:  ldap_sort() expects parameter 1 to be resource, boolean given in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 691
PHP Warning:  ldap_get_entries(): supplied argument is not a valid ldap link resource in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 693

Verifique no Firebug ou no console Javascript, qual erro de LDAP bind retornado.

No console do javascript este erro é retornado:

Error: Can't bind to LDAP server (anonymous bind): <p>ADONewConnection: Unable to load database driver ''</p><p>ADONewConnection: Unable to load database driver ''</p><p>ADONewConnection: Unable to load database driver ''</p>s:0:"";

comment:16 in reply to: ↑ 14 ; follow-up: ↓ 17 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Corrigido em [1414]. Refere-se ao bug "PHP Fatal error: Call to undefined function lang()". Verifique no Firebug ou no console Javascript, qual erro de LDAP bind retornado.

Nilton, vc sabe me dizer quais parâmetros o ExpressoAdmin consulta no banco de dados para daí efetuar o login no LDAP? Acho que o problema está no banco...

comment:17 in reply to: ↑ 16 ; follow-up: ↓ 18 Changed 11 years ago by niltonneto

Replying to wmerlotto:

Replying to niltonneto:

Corrigido em [1414]. Refere-se ao bug "PHP Fatal error: Call to undefined function lang()". Verifique no Firebug ou no console Javascript, qual erro de LDAP bind retornado.

Nilton, vc sabe me dizer quais parâmetros o ExpressoAdmin consulta no banco de dados para daí efetuar o login no LDAP? Acho que o problema está no banco...

Percebi que no teu caso, ele está caindo no "if" do bind anônimo. Isso quer dizer que o ldap_master está em branco na base de dados, que é o correto. Resta saber porque teu ldap está recusando binds anônimos....Dá uma olhada no log dele, no momento de carregar essa tela.

comment:18 in reply to: ↑ 17 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Percebi que no teu caso, ele está caindo no "if" do bind anônimo. Isso quer dizer que o ldap_master está em branco na base de dados, que é o correto. Resta saber porque teu ldap está recusando binds anônimos....Dá uma olhada no log dele, no momento de carregar essa tela.

Cara, o pior de tudo é que meu LDAP está aceitando bind anônimo. Acabei de testar pelo phpLDAPadmin.

Debugando com o firebug, percebi que quando ele executa esta requisição .../index.php?menuaction=expressoAdmin1_2.uiaccounts.add_users, no cookie a variável ConfigPW=xxxxx está com uma senha que não tem nada haver com a senha do LDAP. Nilton, vc saberia me dizer de onde ele pega esta senha?

comment:19 Changed 11 years ago by wmerlotto

Bom, ignorem meu último comentário... Não tem nada haver... Mas enfim, fiquei procurando o problema e a autenticação sempre falhava na linha expressoAdmin1_2/inc/class.ldap_functions.inc.php:101:

$ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
if ($ldap_connection)
{
   ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
   ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
   if ( ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']) )
     return $ldap_connection; <= AQUI

Substituí as GLOBALS pelos valores correspondentes do LDAP e funcionou. Ao menos não é reportado mais erro neste ponto, mas sim em outros:

PHP Warning:  ldap_list(): supplied argument is not a valid ldap link resource in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 690
PHP Warning:  ldap_sort() expects parameter 1 to be resource, boolean given in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 691
PHP Warning:  ldap_get_entries(): supplied argument is not a valid ldap link resource in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 693
PHP Warning:  ldap_list(): supplied argument is not a valid ldap link resource in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 1764
PHP Warning:  ldap_get_entries(): supplied argument is not a valid ldap link resource in /var/www/expresso/expressoAdmin1_2/inc/class.ldap_functions.inc.php on line 1765

Alguém tem alguma ideia do que pode estar acontecendo?

comment:20 follow-up: ↓ 21 Changed 11 years ago by niltonneto

O session.auto_start tá ligado no php.ini?

comment:21 in reply to: ↑ 20 ; follow-up: ↓ 24 Changed 11 years ago by wmerlotto

  • Status changed from new to closed
  • Resolution set to invalid

Replying to niltonneto:

O session.auto_start tá ligado no php.ini?

Resolvido! O session.auto_start não estava ativo... Acabei comentando esta linha nas configurações. Desculpe pela falha.

Estou encerrando o ticket. Valeu!

comment:22 in reply to: ↑ 5 ; follow-up: ↓ 23 Changed 11 years ago by niltonneto

Replying to niltonneto:

Testei aqui no Ubuntu 8.10 e Debian Lenny, PHP 5.2.6 em ambos, e funcionou normalmente. Talvez haja alguma diferença no seu php.ini. Dá uma olhada e compare com php.ini da dist Debian....

E eu ainda falei para comparar o php.ini !!!! HE HE HE!! Mas tudo bem, pelo menos resolveu aí. Abraço.

comment:23 in reply to: ↑ 22 Changed 11 years ago by wmerlotto

Replying to niltonneto:

Replying to niltonneto:

Testei aqui no Ubuntu 8.10 e Debian Lenny, PHP 5.2.6 em ambos, e funcionou normalmente. Talvez haja alguma diferença no seu php.ini. Dá uma olhada e compare com php.ini da dist Debian....

E eu ainda falei para comparar o php.ini !!!! HE HE HE!! Mas tudo bem, pelo menos resolveu aí. Abraço.

Pois é, eu deixo estas configurações no apache, via php_value session.auto_start 1 e acabei comentando a linha sem querer... Valeu!

comment:24 in reply to: ↑ 21 ; follow-up: ↓ 25 Changed 11 years ago by rodsouza

Replying to wmerlotto:

Replying to niltonneto:

O session.auto_start tá ligado no php.ini?

Resolvido! O session.auto_start não estava ativo... Acabei comentando esta linha nas configurações. Desculpe pela falha.

Estou encerrando o ticket. Valeu!

ESSA CONFIGURAÇÃO NÃO DEVE ESTAR COMO 'ON'....

DEVE ESTAR 'OFF'...

comment:25 in reply to: ↑ 24 Changed 11 years ago by wmerlotto

Replying to rodsouza:

Replying to wmerlotto:

Replying to niltonneto:

O session.auto_start tá ligado no php.ini?

Resolvido! O session.auto_start não estava ativo... Acabei comentando esta linha nas configurações. Desculpe pela falha.

Estou encerrando o ticket. Valeu!

ESSA CONFIGURAÇÃO NÃO DEVE ESTAR COMO 'ON'....

DEVE ESTAR 'OFF'...

Bom, então vamos entrar em um consenso. Neste  comentário do ticket #559, está dito para deixar o sessio.auto_start e session.use_cookies como 0, OFF, desativado. E fiz isso desde que esta alteração foi recomendada, em 02/07/09.

Até então, não tinha testado completamente o ExpressoAdmin e ontem, quando fui utilizá-lo encontrei os problemas relatados acima neste ticket.

Após o comentário do Nilton, de ativar o session.auto_start, verifiquei no arquivo de instalação do  Debian e o mesmo está ativo.

Lembrando que o ExpressoAdmin só voltou a funcionar corretamente após ativar esta opção no php.ini ou mesmo no apache.

Então, qual é a forma correta??

comment:26 Changed 11 years ago by niltonneto

Realmente, quando desativo a diretiva "session.auto_start", no meu ambiente Debian, esse problema aparece. Se session.auto_start e use_cookies devem ficar desativados como foi dito, sugiro que o ticket #552 seja reaberto e somente fechado até que se corrija isso no ExpressoAdmin, e em todos os outros lugares. Do contrário, mantemos esses valores em "1" e pronto.

comment:27 Changed 11 years ago by wmerlotto

Ok! Vou reabrir o ticket #552 e este ficará como fechado/inválido.

comment:28 Changed 11 years ago by niltonneto

Opa, escrevi errado. É o ticket #559.

Note: See TracTickets for help on using tickets.