Schlagwort: Perl

LDAP-Suche schlägt bei Namen mit Umlauten fehl

Solange ein Benuztername keinen Umlaut besitzt, kann man den Datensatz Daten mit dem Perl-Modul Net::LDAP recht einfach aus dem Active Directory auslesen:

use Net::LDAP;
$loginUser = Win32::LoginName();

$ldap = Net::LDAP->new($ldapServer) or die "$0";
$ldap->bind($ldapUser, $ldapPass});
$ldap_base = 'OU=Users';
$ldap_results = $ldap->search(base => $ldapBase, filter => "sAMAccountName=$loginUser");

if ($ldap_results->count) {
    # was ganz tolles mit dem Datensatz anstellen
}

Sofern aber ein Umlaut in dem Login-Namen steckt, so schlägt die Suche nach „benjamin.tröt“ fehl, obwohl ein entsprechender sAMAccountName im Active Directory vorhanden ist.

Weiterlesen

 

Firefox ignoriert charset=UTF-8

Ein Perl-Skript stellt sein UI als Website mit Hilfe des Moduls HTTP::Server::Simple zur Verfügung. Eigentlich sollte ein

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

im Header-Bereich ausreichen, um anzuzeigen, daß die Daten in UTF-8 kodiert sind. Firefox weigerte sich hartnäckig und benutze immer den Default „windows-1252“ zur Darstellung, was alle Umlaute bis zur Unkenntlichkeit verstümmelte.

Erst durch Mitsenden der Zeichenkodierung im Header

print $cgi->header(
	-nph => 1,
	-status => '200 OK',
	-type => 'text/html',
	-charset => 'UTF-8'
);

ließ sich Firefox überreden, die Seite auch tatsächlich als UTF-8 darzustellen.

Weiterlesen

 

Experimental keys on scalar is now forbidden

Nach einem Wechsel der Interpreter- oder Compilerversion stolpert die neue Version ab und an über Dinge, die bisher problemlos verarbeitet wurden. Im aktuellen Fall mag Perl 5.28 eine Zeile nicht mehr, die von Perl 5.14 noch problemlos verarbeitet wurde:

Die fragliche Zeile

foreach $type ( keys $phonebook{ $entry } ) {

wird nur noch mit einem

Experimental keys on scalar is now forbidden at scriptname.pl line 123.

Weiterlesen

 

Aktuelles Verzeichnis nicht mehr Teil von @INC

Gerade beim Wechsel zwischen verschiedenen Perl-Versionen über ein Feature (und keinen Bug) gestolpert: seit Version 5.26 ist das aktuelle Verzeichnis nicht mehr im Standard-Include-Pfad @INC enthalten.

Als Grund hierfür gibt perldelta zur Version 5.26 unschöne Begleiterscheinungen der bisherigen Vorgehensweise an:

While convenient, this has security implications: for example, where a script attempts to load an optional module when its current directory is untrusted (such as /tmp), it could load and execute code from under that directory.

Weiterlesen

 

Bytefolge mit Perl ersetzen

Die Funktionen, die Perl für das Suchen und Ersetzen innerhalb von Strings bereitstellt, lassen sich auch hervorragend dazu verwenden, Bytefolgen innerhalb von Binärdaten zu bearbeiten.

Mittels der pack-Funktion wird die zu suchende Bytefolge in einer Variable gespeichert

$source = pack("C*", 0x00, 0x40, 0x06, 0x00, 0x00, 0xB0, 0x04, 0x00);

Deren Position innerhalb der zu durchsuchenden Daten kann durch die Funktion index ermittelt

$pos = index($data, $source);

und ggf.

Weiterlesen