Passwort in Kimai zurücksetzen

Habe gerade einem Admin-Kollegen geholfen, in seine Kimai-Installation wieder reinzukommen.
Datenbank- und File-Systemzugriff war vorhanden, von daher nur eine Frage, in welcher Form das Passwort gespeichert ist.

Die Lösung: In der Datei includes/autoconf.php gibt es eine Zeile, in der ein $password_salt gesetzt wird.
Dieses nehmen wir und schreiben es vor und hinter das gewünschte neue Passwort und jagen es durch die MD5-Funktion (z.B. in MySQL). Sodann tragen wir dieses zum gewünschten Benutzer in der Tabelle kimai_usr ins Feld pw ein.

Beispiel:
neues Passwort=meinpasswort
$password_salt in includes/autoconf.php: ABCDEFG

in MySQL:
select md5('ABCDEFGmeinpasswortABCDEFG');

liefert als Ergebnis: 4b42ec596d78e884beafbe29387b38a2

Diese Zeichenkette ins pw-Feld des gewünschten Benutzers der Tabelle kimai_usr eintragen und fertig. Jetzt sollte man sich mit dem Passwort ‘meinpasswort’ eintragen können.

tidy HTML per Konsole innerhalb von PHP verwenden

Die Ausgangssituation: Ich möchte auf einem Webserver mit PHP 5.3, der unter Gentoo-Linux läuft, meinen PHP-Output via tidy HTML ausgeben, damit der Code aufgeräumt bzw “sauber” ist.

Das Problem: Mir ist es aus “Gründen” nicht möglich die PHP-Library nachzuinstallieren.

Die Lösung: Ich habe mir die Sources von tidy bei sourceforge.net geholt: http://tidy.cvs.sourceforge.net/viewvc/tidy/?view=tar , dann im Home-Verzeichnis in einem temporären Ordner entpackt und kompiliert (“gmake” im Ordner /tidy/build/gmake/).

Wenn das geklappt hat, sollte im Verzeichnis /tidy/bin/ jetzt die ausführbare Datei “tidy” liegen.

Da das Home-Verzeichnis auf diesem System automatisch zur Umgebungsvariable zählt, habe ich diese Datei direkt ins Home-Verzeichnis kopiert und eine Konfigurations-Datei namens tidy.config dazu erstellt:

output-html: yes
drop-font-tags: yes
drop-empty-paras: yes
hide-comments: yes
join-classes: yes
join-styles: yes
show-body-only: yes
indent: yes
indent-spaces: 3
wrap: 300

So sieht meine Konfiguration für das Projekt aus. Falls jemand vor hat, seine eigene Konfiguration zu erstellen, sollte er sich insbesondere den Punkt “show-body-only” ansehen… da ist normalerweise gewünscht, dass das auf “false” steht ;-)

Damit ich nun unter PHP diese Datei verwenden kann, so wie ich es gewohnt bin, wenn die Library aktiviert ist, schreibe ich eine Funktion, die im Projekt global verfügbar ist:

if (!function_exists(tidy_parse_string))
{
function tidy_parse_string($string)
{
exec ('echo "' . addcslashes($string, '"') . '" | tidy -config ~/tidy.config', $array);
return implode("\n", $array);
}
}

Diese Lösung ist zwar nicht besonders elegant, aber für ein zu migrierendes System, das auf die Funktion tidy_parse_string() setzt, ist es zumindest ein work-around, das bei mir in diesem Fall (bis jetzt) funktioniert hat.

Value ’0000-00-00′ can not be represented as java.sql.Date

Habe gestern das Problem gehabt, per Quantum DB in Eclipse auf eine MySQL-Datenbank zugreifen zu müssen, in der Date-Felder mit dem Wert ’0000-00-00′ belegt waren, was anscheinend ein Problem für den MySQL-Connector darstellt. Der meldet sich dann nur noch mit dem Text aus der Überschrift und SQL State: S1009 und Error Code: 0 und verweigert die Ausgabe der Suchanfrage.

Die vorläufige Lösung für mich bestand darin, die Connection URL um den Parameter zeroDateTimeBehavior=convertToNull zu erweitern, sodass solche Datums-Werte in NULL umgewandelt werden, da ’0000-00-00′ kein valides Datum ist.

Die Connection URL sieht dann etwa so aus:
jdbc:mysql://host:3306/database?zeroDateTimeBehavior=convertToNull

Das reicht mir aktuell, um damit weiterarbeiten zu können, da ich nur SELECTs auf die Datenbank absetzen muss. Wie sich diese Einstellung verhält, wenn man in die Datenbank schreibt, muss sich erst noch zeigen.

VMWare Server: Gast-System kann bei NAT zwar nach draussen pingen, bekommt aber ansonsten keine Verbindung zustande

Habe gerade das Problem gehabt, dass ein Debian-Gastsystem in VMWare (Windows 7 Host) von draussen erreichbar war, DNS auflösen und nach aussen pingen konnte, aber selbst keine Verbindungen aufbauen konnte (wget, telnet, ssh).

Nach vielen Stunden der Suche, konnte mein Kollege sich daran erinnern, dass er das Problem schonmal hatte und gelöst hatte, indem man die vmnat.exe im Verzeichnis c:\Windows\SysWOW64\ durch eine neuere Version ersetzt, die z.B. beim VMWare Player dabei ist.

Die Datei kann man sogar im laufenden System ersetzen, sofern man vorher den Dienst “VMWare NAT Service” beendet und nach dem Ersetzen wieder startet.
Danach klappts auch wieder mit dem Netzwerk. Ich musste dafür bei mir nichtmal das Gastsystem beenden.

Apache2 Reverse Proxy mit Client-IPs

Die Ausgangslage: Ich habe immer wieder mal das Problem, eine Webseite (bzw einen kompletten Virtual Host) auf einen neuen Server umzuziehen. Der häufigste Grund dafür ist eine veraltete Server-Software zu aktualisieren (z.B. von Debian Etch oder Lenny auf Debian Squeeze). In diesen Fällen gehe ich oft so vor, dass ich auf dem neuen Server die gleiche Virtual Host Konfiguration einrichte, wie auf dem Alten. Normalerweise habe ich hier auf beiden Systemen einen Apache2 Webserver, daher sollte das relativ einfach zu übertragen sein. Das hat zum einen den Vorteil, dass ich auf dem Zielsystem gleich testen kann, ob die Webseite noch so funktioniert, wie gewünscht, zum anderen kann ich per Reverse Proxy Konfiguration auf dem alten Server die Webseite schon vom neuen Server holen, obwohl die DNS-Einstellung der Domain noch nicht abgeschlossen ist – und zwar ohne dass der gemeine Webseiten-Besucher davon etwas mitbekommt.
Continue reading

Reihenfolge von HTML-Elementen in einem Kontainer per jQuery ändern resultiert in einem leeren Kontainer

Die Ausgangssituation: Ich habe einen Kontainer, dessen (direkte) Kind-Elemente ich per jQuery eine neue Reihenfolge verpassen möchte. Dazu erzeuge ich mir einen Array, der alle betreffenden Elemente beinhaltet und ändere die Reihenfolge dieses Arrays. Dann gehe ich die Elemente des Arrays nacheinander durch und hänge sie am Ende des Kontainers wieder an (genauer: per .insertAfter() hinter das letzte Element) – das bedeutet, das Element wird aus dem DOM genommen und nach hinten verschoben. Danach sollte der Kontainer die gewünschte Reihenfolge haben.
Continue reading

Reality Interwebs – besser als TV

Leute, Leute…
Ihr, die ihr auf der Mailingliste sitzt und genervt antwortet, dass ihr aus der Liste gelöscht werden wollt: HAHA! *mitdemFingerzeig*
Scheint Euch ja so sehr zu nerven, dass Ihr in Kauf nehmt, dass Eure eigene Email-Adresse nicht nur von den Spammern verifiziert wird (das ist vielleicht das Offensichtlichste) – nein, Ihr nehmt auch noch in Kauf, dass Ihr tausende Leute durch eure eigene “Beschwerde-Email” auf die gleiche Weise nervt.
Ist es so schwer, die Konsequenz daraus zu erkennen? Ihr werdet selbst zum Spammer und Eure eigene Email-Adresse landet auf den Blacklists.
Continue reading

Drachenkurve revisited

In einem früheren Blogartikel (Drachenkurve, 9.April 2008) schrieb ich, dass ich die Drachenkurve per PHP nachgezeichnet hatte.
Der Nachteil mit dieser Methode war, dass das Erzeugen der Fraktal-Grafik selbst auf einem starken Server recht lange dauert, was zur Folge haben kann, dass der Browser oder der Server nach einer gewissen Zeit einfach abbricht, ohne dass man irgendetwas zu Gesicht bekommt.

Deshalb habe ich die ganze Erstellung der Grafik einfach auf die Client-Seite verschoben. HTML5 bietet nämlich mit dem Canvas-Element und etwas Javascript eine hervorragende Möglichkeit dafür.
Continue reading