Programmierung

Perl Package Manager meldet 'ERROR: 401 Authorization Required'

14. Juni 2013 · Programmierung · andreas · Kein Kommentar

Sollte der ActivePerl Package Manager den Versuch, einer Paketinstallation nur noch mit einem ‘ERROR: 401 Authorization Required’ quittieren, so liegt dies u.U. am Alter der verwendeten Version.

Wie die ActiveState PPM Availability policy erläutert, wird zum Zugriff auf die PPM-Archive von Perl 5.8 und 5.10 seit 2010, zum Zugriff auf die Archive von Perl 5.12 seit September 2012 eine Lizenz der Business Edition benötigt.

Zeit, beim anstehenden Upgrade der Perl-Installation über einen Wechsel zu Strawberry Perl nachzudenken.


Verwandte Artikel suchen und finden

15. Mai 2013 · Programmierung · andreas · Kein Kommentar

Grundsätzliche Überlegungen

Neben der möglichst lesbaren Darstellung eines Texts ist es ein Service für den Leser, weiterführende Links passend zum Thema des aktuell angezeigten Artikels anzubieten. Eine Möglichkeit diesen Mehrwert zu schaffen ist, eine Liste inhaltlich verwandter Texte der gleichen Quelle anzuzeigen. Die Schwierigkeit hierbei liegt in der Definition, wann zwei Texte als verwandt gelten können und wie eng deren Verwandtschaftsgrad ist.

Für einen beschränkten Kreis an Texten kann die Zuordnung manuell durchgeführt werden: Beim Anlegen eines neuen Texts trifft der Autor eine Auswahl an bereits vorhandenen Texten, die aus seiner Sicht für den Leser interessant sein könnten. Mit steigender Zahl der Texte steigt jedoch auch die Gefahr, einen Texte zu übersehen und ein zu einem späteren Zeitpunkt erstellter Texte wird in der Liste niemals auftauchen - außer die Zuordnungen werden immer wieder aufs Neue kontrolliert und gepflegt.

Während ein Mensch nach kurzem Überfliegen meist problemlos den Verwandtschaftsgrad zwischen zwei Texten bestimmen kann, ist dies für einen Computer ungleich schwieriger. Eine generelle und für alle Anwendungsfälle gültige Regel lässt sich nur schwer aufstellen, denn je nach Ausgangslage können sich die Anforderungen an einen solchen Algorithmus stark unterscheiden. Deshalb muß versucht werden, ihm möglichst clever einen Weg zum Bestimmen des Verwandtschaftsgrades aufzuzeigen.

Weiterlesen


Groß- und Kleinschreibung von MySQL-Tabellennamen

25. Dezember 2012 · Programmierung · andreas · 2 Kommentare

Eine “schöne” Stolperfalle, wenn Projekte aus einer Windows- in eine Unix-Umgebung geschoben werden, sind die Tabellennamen in MySQL. Egal, ob die Tabelle unter dem Namen “Kosten”, “kosten” oder “Kosten” angelegt wurde, unter Windows ignoriert ein Statement wie

SELECT * FROM kOsTeN;

jegliche Groß- und Kleinschreibung und liefert die selektierten Zeilen, während MySQL unter Unix in einen Fehler läuft.


Pfadangaben in der php.ini, Strichpunkt und Doppelpunkt

16. Dezember 2012 · Programmierung · andreas · Kein Kommentar

Manchmal sucht man Fehler, die eigentlich gar keine sind - deshalb ist der entscheidende Hinweis aus der PHP-Dokumentation auch nochmal hier dupliziert:

Das Format ist ähnlich zur PATH-Umgebungsvariablen des jeweiligen Systems: Eine Liste von Verzeichnissen, getrennt durch einen Doppelpunkt unter Unix oder ein Semikolon unter Windows.

Nein, einfach kopieren zwischen verschiedenen Betriebssystemen geht nicht!


Remoteprozess auf einem Windows-Rechner mittels PERL starten

11. August 2012 · Programmierung · andreas · Kein Kommentar

Um mittels PERL einen Remoteprozess auf einem entfernten Windows-Rechner zu starten, gibt es mehrere Alternativen:

Eine Möglichkeit ist die Verwendung von “PsExec.exe” aus der PsTools-Suite von Microsoft, die allerdings den Nachteil hat, daß über einen “system”-Call ein externes Programm aufgerufen wird und die Einfluss- und Kontrollmöglichkeiten sehr beschränkt sind.

Soll der Start in PERL durchgeführt werden, so ist zwischen zwei Anwendungsszenarien zu unterscheiden:

Sofern lediglich unter dem Kontext des aufrufenden Benutzers ein Prozess gestartet werden soll, reichen 2 Zeilen PERL-Code (aus Gründen der Übersichtlichkeit wurde auf Fehlerbehandlung verzichtet):

remote.pl
use strict; use warnings; use Win32::OLE; my $remoteHost = 'myHost'; my $remoteCmd = 'c:\windows\notepad.exe'; my $wmi = Win32::OLE->GetObject("winmgmts:{ImpersonationLevel=Impersonate,(security)}//$remoteHost\\root\\cimv2:Win32_Process"); $wmi->Create($remoteCmd);

Weitaus flexibler ist hingegen die Möglichkeit, den Prozess unter einem anderen Benutzer zu starten und ggf. auch noch auf Daten eines weiteren Rechners zugreifen zu lassen:

remote.pl
use strict; use warnings; use Win32::OLE; use Win32::OLE::Variant; my $remoteDomain= 'myDomain'; my $remoteHost = 'myHost'; my $remoteUser = 'myDomain\myUser'; my $remotePwd = 'myPassword'; my $remoteCmd = 'c:\windows\notepad.exe'; my $locator = Win32::OLE->new('WbemScripting.SWbemLocator'); my $service = $locator->ConnectServer($remoteHost, 'root\cimv2', $remoteUser, $remotePwd, 'MS_409', "kerberos:$remoteDomain\\$remoteHost"); $service->{Security_}->{AuthenticationLevel} = 6; # PktPrivacy $service->{Security_}->{ImpersonationLevel} = 4; # Delegate my $process = $service->Get('Win32_Process'); my $vPid = Variant(VT_I4 | VT_BYREF, 0); $process->Create($remoteCmd, undef, undef, $vPid); print "process running - pid: $vPid\n";

Beim Remotehost ist darauf zu achten, daß der tatsächliche Rechnername und kein DNS-Alias verwendet wird da sonst der Verbindungsaufbau mit dem Fehler 0x800706ba “Der RPC-Server ist nicht verfügbar” scheitert.

Sofern tatsächlich im Rahmen des Remoteaufrufs ein dritter Rechner miteinbezogen werden soll, sind hierbei einige Einschränkungen zu beachten, wie der TechNet-Artikel “Geheimnisse von Windows Management Instrumentation” erklärt:

Wenn ein Clientcomputer (Computer A) Anmeldeinformationen für die Domäne von einem Remoteserver (Computer B) an einen dritten Computer (Computer C) weiterleiten muss, ist Delegierung erforderlich. Dies trifft zu, wenn zwei oder mehr Netzwerkhops für einen bestimmten Vorgang ausgeführt werden müssen. Ohne Delegierung kann Computer B keine von Computer A empfangenen Anmeldeinformationen weiterleiten; deshalb schlägt die Verbindung mit Computer C fehl.

Die genauen Schritte zur Einrichtung der Delegierung sowie ein vbs-Skript zum Testen des Aufrufs sind in dem Artikel erläutert.

windows-delegierung

Wichtig ist der Hinweis, dass zur erfolgreichen Durchführung die Delegierung für Computer B in Active Directory aktiviert werden muss. Hierzu ist in den Eigenschaften des Computer-Kontos im Active Directory die Option “Computer für Delegierungszwecke vertrauen” zu aktivieren, ansonsten scheitert der Aufruf mit dem Fehler 0x80070721: “Fehler im Sicherheitspaket”.

Literaturhinweise:

Aktualisierungen:
05.05.2015: Zusätzliche Informationen bezüglich Rechnernamen und Delegierung hinzugefügt.