LDAP SID von Samba Interpretieren



  • Moin,

    versuche gerade die ObjectSid von Samba unter einem C++ Programm zu interpretieren hat das schon jemand von euch gemacht ? Einfach in Struct wandeln geht nicht 😞



  • Mit Samba und LDAP hatte ich noch nichts zu tun aber mit LDAP. Allerdings ist das schon länger her. Was für Fragen hast Du konkret?



  • @Tuxist1 sagte in LDAP SID von Samba Interpretieren:

    ObjectSid

    unter windows gibt es eine ObjectSid sprich die uid eines Nutzers wie dekodiere ich sie richtig unter linux.

    habe schon struct gebaut wie unter windows und binär interpretiert ohne erfolg.



  • @Tuxist1 sagte in LDAP SID von Samba Interpretieren:

    @Tuxist1 sagte in LDAP SID von Samba Interpretieren:

    ObjectSid

    unter windows gibt es eine ObjectSid sprich die uid eines Nutzers wie dekodiere ich sie richtig unter linux.

    Du bekommst von Deiner LDAP-Abfrage ein Objekt zurück, dass von verschiedene LDAP-Klasse Attribute erbt. Einige sind optional andere müssen definiert sein. Die SID ist dabei nur eines dieser Attribute, und wenn ich die Beispiele bei SAMBA anschaue, ist sie nur für SAMBA von Bedeutung und spielt auf der Linux/UNIX Seite keinerlei Rolle. D.h. für Nutzer ist da eher die LDAP Klasse posixAccount (eine Subklasse von Person) ein Thema und da bekommst Du die passende Felder direkt zurückgeliefert und musst sie nur ggf. von Strings in Zahlen umwandeln.

    habe schon struct gebaut wie unter windows und binär interpretiert ohne erfolg.

    Was willst Du konkret tun?
    D.h. Du machst eine LDAP-Abfrage und bekommst ein Objekt als Antwort. Was willst Du weiter erreichen?



  • @john-0 die ldap anfrage funktioniert leider kann ich mich dem object nichts anfangen weil es nur unformatierte zeichen sind habe im den workarround es base64 zu kodieren sieht irgendwie aber blöde aus wollte wie unter windows das haben das zum Beispiel so aussieht: S-1-5-21-3686201514-2077471124-1704617262-1104



  • @Tuxist1 sagte in LDAP SID von Samba Interpretieren:

    @john-0 die ldap anfrage funktioniert leider kann ich mich dem object nichts anfangen weil es nur unformatierte zeichen sind habe im den workarround es base64 zu kodieren sieht irgendwie aber blöde aus wollte wie unter windows das haben das zum Beispiel so aussieht: S-1-5-21-3686201514-2077471124-1704617262-1104

    Ok, das spielt unter Linux für alle Dinge außer SAMBA nun einmal keinerlei Rolle. Bei mir ist lokal die SID für den Rechner durch SAMBA gesetzt, und sieht so aus wie Du das erwartest. Was willst Du konkret machen? Wenn es eine korrekte Linux Installation ist, und nur bestimmte Infos in den SIDs fehlen, könnte man die über die posixAccount Daten im LDAP Server herausholen (UID, GID, …).



  • ist zwar lange her aber die Lösung war relativ einfach wenn man erstmal drauf gekommen ist:

                                char sid[512];
    
                                struct SID_IDENTIFIER_AUTHORITY {
                                    unsigned char Value[6];
                                };
    
                                struct SID {
                                    unsigned char            Revesion;
                                    unsigned char            SubAuthorityCount;
                                    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
                                    uint32_t                 SubAuthority[1];
                                };
    
                                SID* mysid = (SID*)values[i]->bv_val;
    
                                ssize_t written = snprintf(sid, 512, "S-%d-%d-%d", (unsigned int)mysid->Revesion, (unsigned int)mysid->SubAuthorityCount,
                                    (unsigned int)mysid->SubAuthority[0]);
    
                                uint32_t subids[mysid->SubAuthorityCount];
                                memcpy(subids, &mysid->SubAuthority[1], (mysid->SubAuthorityCount * sizeof(uint32_t)));
    
                                for (int ii = 0; ii < (int)mysid->SubAuthorityCount-1; ++ii) {
                                    written += snprintf(sid+written,(512-written), "-%u", subids[ii]);
                                }
    
                                sys::cout << sid << sys::endl;
    

Anmelden zum Antworten