Acties:
  • 0 Henk 'm!

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Goeiedag

Ik werk momenteel als vakantiejob in een bedrijf waar ze mij enkele klusjes willen laten opknappen.
De afdeling waar ik werk heeft me opgedragen een lokale versie van hun intranet te installeren op een machine die ze hier nog staan hadden, zodat ze er zelf wat mee kunnen spelen.

Op die machine heb ik Ubuntu 10.04 gezet met alle benodigde software. PHPMyAdmin, Drupal 6.16, Apache2, PHP5, etc. Drupal 6.16 was nodig omdat het dezelfde versie moest zijn als het intranet.

Hierna heb ik van de IT afdeling alle bestanden uit hun Drupal installatie gekregen (dus gewoon een letterlijke kopie van hun drupal map met user-uploaded files weggelaten) en een SQL dump van hun database.

Om dit alles op de lokale machine werkend te krijgen, heb ik eerst Drupal 6.16 zelf geinstalleerd op mijn machine. Ik heb geen enkele map, bestand, entry in de database, config,.. gewijzigd.
Hierna heb ik de complete inhoud van de drupal installatie van het intranet over de versie installatie geplakt. Alle bestanden en mappen vervangen, dit ging zonder problemen.
Na dit gedaan te hebben, heb ik via PHPMyAdmin alle tabellen uit de lokale database gedropped zodat ik een lege drupal database had, en dan via de mysql command line de database van het intranet geimporteerd (via het source commando).

Wanneer ik dan naar de installatie surf (http://localhost/drupal-6.16/), krijg ik netjes de login pagina te zien zoals deze op de live versie van het intranet staat.
Echter, wanneer ik probeer in te loggen (twee verschillende accounts met voldoende rechten die ook live werken), krijg ik Permission Denied errors.
Wanneer dit gebeurt, wilt een module (CustomError) me doorsturen naar een customized pagina, maar deze wordt niet gevonden. Kijk ik in de map van deze module dan zie ik daar inderdaad geen bestand staan die 403 noemt, alhoewel ik op de live versie van het intranet die fout niet krijg als ik ergens probeer te komen waar het niet mag. Dan blijf ik in de intranet layout met in de body van de pagina een propere foutmelding.
Het krijgen van deze mooie pagina is van ondergeschikt belang; wat belangrijk is, is dat ik hier een permission denied krijg waar het niet zou mogen.

Ik ben te weten gekomen dat er een LDAP server wordt aangesproken en mijn vermoeden is dat hier de oorzaak ligt. Echter ziet alles er goed uit, dus zowel ik als mijn collega met kennis van dit soort zaken hebben geen idee meer waar het aan kan liggen. En aangezien IT te druk bezig is, kunnen we hen niet storen :).

Bij het kopiëren van de live directory over de fresh install, heb ik via de wijzigingen in TRAC (via svn) slechts één wijziging gezien die impact heeft op wat ik doe hier (in totaal waren er 5 files gewijzigd).

Het betrof de volgende verandering, waarbij ik de link naar de gebruikte database gewijzigd heb.

Origineel /sites/default/settings.php:
code:
1
$db_url = 'mysqli://user:pw@host/database';


werd
code:
1
$db_url = 'mysql://user:pw@host/database';


Samengevat: MySQLi werd MySQL en de gegevens van de database op de live server heb ik aangepast naar de gegevens van de lokale database.

Goed, wat heb ik nu zoal al gedaan?

Andere login
Zoals gezegd heb ik met twee verschillende accounts proberen inloggen, dit is met beide mislukt.
Ik heb overigens geen beschikking over het administrator account.

Error.log
Bij het bekijken van de error log van apache zijn me geen oplossingen opgevallen, enkel de melding dat er iets fout ging.
Om 09:53 staat het resultaat van een inlogpoging (3 regels). Ik ben niet zeker hoe ik dit moet interpreteren, maar ik denk niet dat dit van vitaal belang is.
Hieronder de log van /var/log/apache2/error.log:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Thu Jul 14 08:24:28 2011] [notice] Apache/2.2.14 (Ubuntu) mod_jk/1.2.28 PHP/5.3.2-1ubuntu4.9 with Suhosin-Patch configured -- resuming normal operations
[Thu Jul 14 08:59:22 2011] [error] [client 127.0.0.1] File does not exist: /var/www/sites, referer: http://localhost/drupal-6.16/
[Thu Jul 14 08:59:23 2011] [error] [client 127.0.0.1] File does not exist: /var/www/sites, referer: http://localhost/drupal-6.16/
[Thu Jul 14 08:59:40 2011] [error] [client 127.0.0.1] File does not exist: /var/www/drupal-6.16/customerror, referer: http://localhost/drupal-6.16/
[Thu Jul 14 08:59:40 2011] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Thu Jul 14 08:59:45 2011] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Warning:  Table 'drupal6.access' doesn't exist\nquery: SELECT 1 FROM access WHERE type = 'host' AND LOWER('127.0.0.1') LIKE LOWER(mask) AND status = 0 LIMIT 0, 1 in /usr/share/drupal6/includes/database.mysql.inc on line 128
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Warning:  Table 'drupal6.cache' doesn't exist\nquery: SELECT data, created, headers, expire, serialized FROM cache WHERE cid = 'variables' in /usr/share/drupal6/includes/database.mysql.inc on line 128
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Warning:  Table 'drupal6.variable' doesn't exist\nquery: SELECT * FROM variable in /usr/share/drupal6/includes/database.mysql.inc on line 128
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Notice:  Undefined variable: variables in /usr/share/drupal6/includes/bootstrap.inc on line 480
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Warning:  Table 'drupal6.cache' doesn't exist\nquery: UPDATE cache SET data = '', created = 1310626803, expire = 0, headers = '', serialized = 0 WHERE cid = 'variables' in /usr/share/drupal6/includes/database.mysql.inc on line 128
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Notice:  Undefined variable: variables in /usr/share/drupal6/includes/bootstrap.inc on line 487
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Warning:  Table 'drupal6.system' doesn't exist\nquery: SELECT name, filename, throttle FROM system WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight ASC, filename ASC in /usr/share/drupal6/includes/database.mysql.inc on line 128
[Thu Jul 14 09:00:03 2011] [error] [client 127.0.0.1] PHP Warning:  Table 'drupal6.url_alias' doesn't exist\nquery: SELECT COUNT(pid) FROM url_alias in /usr/share/drupal6/includes/database.mysql.inc on line 128
[Thu Jul 14 09:53:15 2011] [error] [client 127.0.0.1] File does not exist: /var/www/sites, referer: http://localhost/drupal-6.16/
[Thu Jul 14 09:53:16 2011] [error] [client 127.0.0.1] File does not exist: /var/www/sites, referer: http://localhost/drupal-6.16/
[Thu Jul 14 09:53:25 2011] [error] [client 127.0.0.1] File does not exist: /var/www/drupal-6.16/customerror, referer: http://localhost/drupal-6.16/


Hieronder een stuk relevante code van /var/log/apache2/access.log
code:
1
2
3
4
127.0.0.1 - - [14/Jul/2011:09:53:09 +0200] "GET /drupal-6.16 HTTP/1.1" 301 561 "-" "Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.04 (lucid) Firefox/3.6.18"
127.0.0.1 - - [14/Jul/2011:09:53:09 +0200] "GET /drupal-6.16/ HTTP/1.1" 403 3126 "-" "Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.04 (lucid) Firefox/3.6.18"
127.0.0.1 - - [14/Jul/2011:09:53:25 +0200] "POST /drupal-6.16/customerror/403?destination=front HTTP/1.1" 404 511 "http://localhost/drupal-6.16/" "Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.04 (lucid) Firefox/3.6.18"
127.0.0.1 - - [14/Jul/2011:09:53:42 +0200] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.14 (Ubuntu) (internal dummy connection)"


Code aanpassen
Ik heb geprobeerd de authenticatiecode aan te passen om zo bij de login check gewoon iedereen door te laten. Dit beloofde echter wel heel ingewikkeld te worden doordat LDAP er bij kwam kijken bij het gehele authenticatie proces.

Hier volgen de code fragmenten die ik op eigen intuitie of via aanwijzingen op het internet heb aangepast.

/var/www/drupal-6.16/modules/user/user.module
Hier dacht ik een fout te kunnen omzeilen door altijd een TRUE value terug te geven bij het valideren.
code:
1
2
3
4
5
6
// Check if user is blocked or denied by access rules.
  user_login_name_validate($form, $state, (array)$account);
  if (form_get_errors()) {
    // Invalid login.
    return TRUE; // Hier aangepast van FALSE naar TRUE
  }


/var/www/drupal-6.16/modules/ldap_integration/ldapauth.module
Bij een MIXED modus gaat men eerst proberen inloggen via LDAP en indien dit niet lukt schakelt men over naar de lokale database. In de lokale database heb ik 330 gebruikers waaronder mijn accounts, dus dit zou logischerwijs moeten lukken.
In EXCLUSIVE mode gaat men enkel naar de LDAP server kijken en wordt de lokale drupal database qua gebruikers niet gebruikt.
code:
1
2
define('LDAPAUTH_AUTH_MIXED',           1); // Veranderd van 0 naar 1
define('LDAPAUTH_AUTH_EXCLUSIVED',      0); // Veranderd van 1 naar 0


/var/www/drupal-6.16/modules/ldap_integration/ldapauth.module
De volgende oplossing werd aangeboden op het internet en heeft me ook geen vruchten opgeleverd.
Hier wordt er in feite van uitgegaan dat je altijd de user uit de lokale database pakt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (LDAPAUTH_LOGIN_PROCESS == LDAPAUTH_AUTH_MIXED) {
    // Authenticate local users first.
    $result = db_query("SELECT name, data FROM {users} WHERE name='%s'", $name);
    if ($row = db_fetch_array($result)) {
      $data = unserialize($row['data']);
      // De volgende IF-Statement werd becommentarieerd.
      //if (!isset($data['ldap_authentified']) || $data['ldap_authentified'] == 0) {
        // A local user with same name exists - authenticate that user.
        if (user_authenticate($form_values)) {
          // Nullify global ldap resource for good measure.
          unset($_ldapauth_ldap);
          return;
        }
     // } Sluiting van de commentatie
    }
  }


/var/www/drupal-6.16/modules/ldap_integration/ldapauth.module
Hier heb ik de functie _ldapauth_init() volledig becommentarieerd om te proberen voorkomen dat de LDAP module wordt opgestart, maar dit heeft geen verschil gemaakt.
Voor zover ik het snap, worden de _init() hooks gebruikt om een module op te starten en zou dit verwijderen ook moeten helpen om het programma te deactiveren.

Alle LDAP modules en afhankelijke modules uit de installatie verwijderen.
Hieronder een lijst van de modules die ik uit mijn /modules/ gehaald heb en waarna het toch nog niet lukte. De lijst is gebasseerd op een
code:
1
 grep -ir ldap /var/www/modules/
en eerder genoemde fouten.
contact_list
customerror
ldap_integration
localize
mailing_list
mail_signature
talk_to_edwin
Hieronder staat info van de ldapauth module entry in de database.
code:
1
2
3
4
Server: ldap://gondor.lan.website.com
Port: 636
Binddn: ldap_query_user
Bindpw: password


Ik kan pingen naar deze server en hij zou van buitenaf bereikbaar moeten zijn :)


Ik denk dat dit zowat is wat ik tot nu toe gedaan heb, indien er me nog iets te binnen schiet dan zal ik dit hier plaatsen.
Mijn vraag nu: weet iemand waarom deze foutmelding tot stand komt en hoe ik deze kan oplossen?
Bijkomend hierbij en misschien een grote help bij het oplossen: is er een speciale debug modus voor drupal waarmee ik tot meer gedetailleerde info kan komen? Ik heb erop zitten zoeken maar vond niets relevants.

Indien er meer info vereist is of bijkomende handelingen dan zal ik deze met veel plezier direct doen, m'n dagtaak voor de komende week is dit werkend krijgen.


Groeten
Speedzor

Streaming History


Acties:
  • 0 Henk 'm!

  • Freezerator
  • Registratie: Januari 2000
  • Laatst online: 16:48
Waarschijnlijk verwijst de testsite in de setting. nog naar de oude url, daarmee krijg je die foutmelding ook. In je settings.php in de sites directory, kijk wat het cookie domain en de base url is. Waarschijnlijk staat het cookie domain nog op de waarde van de live omgeving.

[ Voor 8% gewijzigd door Freezerator op 14-07-2011 11:01 ]


Acties:
  • 0 Henk 'm!

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Freezerator schreef op donderdag 14 juli 2011 @ 11:01:
Waarschijnlijk verwijst de testsite in de setting. nog naar de oude url, daarmee krijg je die foutmelding ook. In je settings.php in de sites directory, kijk wat het cookie domain en de base url is. Waarschijnlijk staat het cookie domain nog op de waarde van de live omgeving.
Die oplossing had ik ook gevonden op het internet, maar bij mij stonden beide regels als commentaar dus ze hadden geen invloed. Ik heb ze toch even getest en met de volgende instellingen krijg ik een login pagina zonder opmaak en met dezelfde foutmelding.

code:
1
2
$cookie_domain = 'localhost';
$base_url = 'http://localhost';  // NO trailing slash!

Streaming History


Acties:
  • 0 Henk 'm!

  • Freezerator
  • Registratie: Januari 2000
  • Laatst online: 16:48
http://drupal.org/node/118226

Hierin staat uitgelegd om geen cookie domain in te stellen voor localhost.
Anders kan je in je hosts file even een url aanmaken (testomgeving.bedrijf.nl) en deze als cookie domain gebruiken en je site ook instellen met die url (testomgeving.bedrijf.nl) en zo verbinding maken.

Acties:
  • 0 Henk 'm!

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Freezerator schreef op donderdag 14 juli 2011 @ 11:10:
http://drupal.org/node/118226

Hierin staat uitgelegd om geen cookie domain in te stellen voor localhost.
Anders kan je in je hosts file even een url aanmaken (testomgeving.bedrijf.nl) en deze als cookie domain gebruiken en je site ook instellen met die url (testomgeving.bedrijf.nl) en zo verbinding maken.
Ik heb /etc/hosts aangepast naar dit:
code:
1
127.0.0.1   mysite.com


vervolgens heb ik in /sites/default/settings.php de volgende wijzigingen gemaakt:

code:
1
2
$cookie_domain = 'mysite.com';
$base_url = 'http://mysite.com/drupal-6.16';  // NO trailing slash!


Nu heb ik mijn opmaak nog steeds, maar de error blijft.

Edit: value van cookies op de loginpagina.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
3 cookies
Name    SESS0165f7f279dc31d292e1d457be5622cb
Value   lneojg9ejgp3dae9jq4ageuos1
Host    .mysite.com
Path    /
Secure  No
Expires Sat, 06 Aug 2011 13:00:44 GMT


Name    SESSf528764d624db129b32c21fbca0cb8d6
Value   jdif8db2v0cmc4jvoh9omto9e7
Host    mysite.com
Path    /
Secure  No
Expires Sat, 06 Aug 2011 12:58:45 GMT

 

Name    has_js
Value   1
Host    mysite.com
Path    /
Secure  No
Expires At End Of Session

[ Voor 23% gewijzigd door speedzor op 14-07-2011 11:53 ]

Streaming History


Acties:
  • 0 Henk 'm!

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Bon, ik heb het dus op eigen zoekkracht kunnen oplossen :)

De oplossing zelf is redelijk lang en omdat ik hem daarnet nog helemaal in het engels in Trac heb getypt heb ik geen zin om het opnieuw allemaal te zeggen.

Komt er op neer dat er geen (juist) geconfigureerde vhost in apache zat, mijn website bevond zich in een subdirectory van /var/www/ waardoor themes (hardcored waarschijnlijk) niet geladen werden, de LDAP configuratie is juist, clean-urls staat niet geactiveerd en lukt me ook niet dus dat laat ik zoals het is en je moet een lokale admin aanmaken om alles te configureren in het menu.
Verder wat settings en configs en hosts aanpassen, maar goed.
Kwestie van anderen later beetje op weg te zetten :)

Streaming History

Pagina: 1