Active Directory Primärgruppe eines Users mit PHP finden

Versucht man über LDAP Infos über Benutzeraccounts aus dem Active Directory zu laden, dann wird ein nicht ganz unwichtiges Detail unterschlagen: Die Primary Group des Benutzers. Eine LDAP-Abfrage nach memberOf liefert alle Gruppen, mit Ausnahme der primären. Stattdessen wird im Benutzer-Objekt eine numerische primaryGroupID abgespeichert. Diese ID taucht jedoch im Objekt der Gruppe auf den ersten Blick nicht auf. Das ganze geht sogar noch weiter: Gruppen enthalten mit dem member-Attribut alle Mitglieder. Es liegt also nahe, mit der Abfrage “(&(member=$userDN)(objectType=group))” alle Gruppen zu finden in denen sich der Benutzer befindet. Leider macht uns das Active Directory hier auch einen Strich durch die Rechnung, es liefert wieder nur alle Gruppen ohne die Primärgruppe. Active Directory Primärgruppe eines Users mit PHP finden weiterlesen

pain, suffering, grief and lamentation

If you go ahead and use “–core-library” but are in fact
building an application, then be forewarned that your application
will still fail to build or run, at some point. Please be
prepared for angry customers who find, for example, that your
application ceases to function once they upgrade their operating
system. You will be to blame for this problem.

If you are legitimately using some code that happens to be in a
core package, then the easiest safe alternative you have is to
repackage that code. That is, move the classes in question into
your own package namespace. This means that they will never be in
conflict with core system classes. JarJar is a tool that may help
you in this endeavor. If you find that you cannot do this, then
that is an indication that the path you are on will ultimately
lead to pain, suffering, grief, and lamentation.

Ich liebe Entwickler mit Humor

Build and Analyze

Nachdem ich jetzt nahezu eine Woche lang verzweifelt den Grund für eine Speicherzugriffsverletzung bei meiner iPhone Applikation gesucht habe hat mich ein Tipp von einem Freund auf den richtigen Weg gebracht.

Xcode hat seit kurzem eine neue Funktion, Build and Analyze. Diese Funktion analysiert die Anwendung nach Fehlern die sich erst nach dem Kompilieren bemerkbar machen. In meinem Fall spuckte sie dies aus:

Build and Analyze

Nachdem ich mit der Nase darauf gestoßen wurde war mir auch sofort klar dass das so nicht stimmen kann, aber irgendwie habe ich es bisher immer übersehen. Dauer der Lösung: 2 Minuten. Unglaublich.

Vielen Dank an Frank für den Tipp.

HTTPS Datei Upload mit POST

Eine nette Aufgabe kam heute auf mich zu … aus einem Programm heraus eine Datei über eine Website per HTML-Formular auf einen Webserver laden, das ganze über eine HTTPS-Verbindung und mit Authentifizierung per Zertifikat.

Klingt eigentlich nicht so schwer … dachte ich zumindest.

Die Zertifikate aus dem CertificateStore von Windows auslesen war auch relativ einfach, der Upload per HTTP eigentlich auch … bis ich dann das Zielformular über die Zertifikatabfrage schützte.

Die Suche nach der Fehlerquelle hat dann einige Zeit gekostet, bis ich dann irgendwann feststellte dass Apache es einfach nicht mag wenn man über eine SSL-Verbindung ohne Vorankündigung ein POST-Formular abschickt.

Die Lösung des Problems war dann relativ einfach, einfach vorher einen kurzen Seitenabruf mit GET, dann den tatsächlichen Upload, zwischendurch die Session nicht verlieren und voila…

X509CertificateCollection certs = new X509CertificateCollection();
MyCerts mycert = new MyCerts();
int num = mycert.Init();
for (int i=0; i < num; i++)
certs.Add(mycert[i]);
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.ClientCertificates = certs;
webrequest.Method = "GET"
WebResponse response = webrequest.GetResponse();
Stream read = response.GetResponseStream();
read.Close();
webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.ClientCertificates = certs;
webrequest.Method = "POST"
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
// content zusammenbauen und senden

auf einmal geht es einwandfrei.