Thursday 23 November 2017

Ldap Binær Alternativ


Attributter med alternativ-binær Enkelte katalogsystemer håndhever en spesiell behandling for bestemte attributter, slik at LDAP-attributtalternativet binær må brukes. Årsaken til dette: Den angitte attributtverdier eller påstandsverdier må være kodet for BER (Basic Encoding Rules) - ellers blir verdiene kodet i henhold til LDAP-spesifikke koding RFC 4517 for attributter syntaks. For å signalisere denne spesielle håndtering, returnerer LDAP-serveren bare slike attributter med det binære alternativet. LDAP-alternativer som det binære alternativet beskrives generelt i LDAP v3-spesifikasjonen i RFC 4511. De legges til attributtnavnene som et suffiks når LDAP-serveren og klienten kommuniserer med hverandre, for eksempel som dette: Det binære alternativet er spesielt beskrevet i RFC 4522. Noen ganger er det ikke merket tydelig i katalogskjemaet når et attributt krever en håndtering med det binære alternativet. I disse tilfellene har du muligheten til å sette et slikt attributt i listen over binære tilleggsegenskaper i programalternativer under Verktøy - Valg - LDAP-innstillinger: Så slike attributter kan leses og skrives uten problemer. Normalt trenger du ikke å jobbe hardt på denne listen fordi de fleste attributter som trenger de binære alternativene, er forhåndsdefinert som standardverdier her. Du vil innse når et attributt må legges til denne listen når du ser det i attributtlisterpanelet med binærstrengen på slutten av attributternavnet: Et annet symptom som varsler deg om å legge til et slikt attributtnavn til de binære tilleggsattributtene liste: En protokollfeil oppstår hvis du vil skrive et slikt attributt uten det binære alternativet: Attributter Fordi de fleste operasjonene i LDAP-katalogen senterer omkring attributter, må du forstå hvordan du bruker disse attributter gjennom JNDI. En LDAP-oppføringsattributter er representert av Attributes-grensesnittet, mens individuelle attributter er representert av Attributt-grensesnittet. For å lage attributter for bruk i programmet, bør du bruke BasicAttributes og BasicAttribute-klassene. Her er et eksempel som lager to attributter, oc og foto. og setter dem inn i et Attributes-objekt. Attributtnavn Du identifiserer et attributt ved bruk av dets attributtnavn. som noen ganger kalles attributtidentifikatoren eller attributtypenavnet. Directory Operations-leksjonen diskuterer attributtnavn, spesielt den dekker attributt subclassing, attributtnavn synonymer og syntaksen for å angi språkinnstillinger. Disse funksjonene kan ikke støttes av alle LDAP-serverimplementeringer. LDAP-attributtnavnene er ikke-følsomme. Dermed to attributtnavn, for eksempel objektklasse og objektClass. Begge skulle tolkes for å referere til samme attributt. Hvis du bruker BasicAttributes-klassen til å representere LDAP-attributter, bør du passere true for ignoreCase-parameteren til sine konstruktører. Her er noen eksempler. Med LDAP v3 kan alternativene legges til et attributtnavn. Hvert alternativ er foran et semikolon-tegn (). Alternativer er som attributt subclassing. Det vil si at en attributt som heter uten alternativet, blir behandlet som superklassen til et attributt som heter med et alternativ. Det eneste alternativet som er definert av protokollen er binært (angitt ved bruk av strengen binær), som betyr at attributter verdien skal overføres i binærformat (uavhengig av den faktiske syntaksen). Dette alternativet er reservert for overføring av ASN.1-kodede data (for eksempel sertifikater: caCertificatebinary). Servere som støtter attributt subclassing kan støtte identifikasjon av attributten uten det binære alternativet, men det er best alltid å inkludere det binære alternativet i attributtnavnet. Operasjonsegenskaper LDAP v3 støtter begrepet operative attributter. som er attributter tilknyttet et katalogobjekt for administrative formål. Tilgangskontrolllisten for et objekt, for eksempel, er en operativ attributt. I DirContext. getAttributes () og DirContext. search (). Du kan levere null som listen over attributter skal returnere og kan derfor spesifisere at alle attributter tilknyttet de forespurte objektene returneres. Attributtene returnerte, men inkluderer ikke operative attributter. For å hente operative attributter, må du nevne dem eksplisitt. Attributtverdier Et LDAP-attributt kan ha en enkelt verdi eller flere, uordnede verdier. Om et attributt har lov til å ha mer enn en verdi, dikteres av definisjonene i direktørskjemaet. Både enkelt - og multivalgerte attributter er representert i JNDI som Attributt. I forrige eksempel. et multivalgt attributt og et enkeltverdig attributt blir opprettet. JNDI er veldig fleksibel i hvordan attributtverdier kan representeres fordi slike verdier er deklarert som java. lang. Object. Når du bruker JNDI til å få tilgang til eller oppdatere attributter lagret i en bestemt mappe, er typene av attributtverdiene avhengig av katalogen og til en viss grad på den tilsvarende tjenesteleverandøren. For LDAP-katalogen representerer Suns LDAP-leverandør attributtverdier som enten java. lang. String eller byte. Byte-arrayer brukes til å representere attributtverdier med synkroniseringstegn for nonstring attributt. Strings brukes til å representere verdiene til alle andre syntaksene. For en vilkårlig attributt er det ingen programmatisk måte å avgjøre om syntaksen er nonstring. Manuelle måter er selvsagt tilgjengelige, og involverer å se på attributtet og dets syntaks i dokumenter som RFC 2256. LDAP-tjenesteleverandøren har en innebygd liste over attributtnavn som den vet, inneholder ikke-strengverdier og tillater at klienter legger til det liste. Tabellen nedenfor gir den innebygde listen. Når du leser en av disse attributter fra LDAP-katalogen, vil verdien være av typen byte. Angi tilleggsfrie attributter Hvis programmet bruker et attributt hvis verdi skal returneres som et byte-array, men navnene på attributter ikke er i denne listen, må du legge til navnet i listen over ikke-strengeattributter. Du gjør dette ved å bruke java. naming. ldap. attributes. binary miljøegenskapen. Verdien er en rekke romavskilt attributtnavn. For eksempel informerer følgende miljøegenskapsinnstilling LDAP-leverandøren om at verdiene til attributter som heter mpegVideo og mySpecialKey skal returneres som byte-arrays: Undertrykkelse av Return of Attribute Values ​​LDAP v3 lar deg spesifisere at bare attributttype navn (og ikke attributt verdier) returneres. For å gjøre dette ved å bruke JNDI, angir du java. naming. ldap. typesEnly miljøegenskapen. Denne egenskapen påvirker DirContext. getAttributes () og DirContext. search (). Når du angir at objekter skal returneres (ved å passere sant til SearchControls. setReturningObjFlag ()) og deretter påkaller du søk (). Denne egenskapen ignoreres fordi attributtverdier kreves for å generere objektet. Heres et eksempel som får en liste over en oppføringsattributt navn. Dette eksemplet produserer følgende output. ldapgetvalueslen Bare en mindre oppdatering til notatet under fra jhgustafsson angående objectGUID-feltet. Går et skritt videre, noen ganger er det nyttig å vise denne GUID som en streng, og Microsoft har en støtteartikkel og et skript som beskriver hvordan du konverterer objectGUID fra Hex to String. Denne artikkelen er her: support. microsoftdefault. aspxscidkb3Ben-us3B325649 Nedenfor er en PHP-funksjon som gjør det samme som Microsofts VB script, det tar innspill av objectGUID i binærformat og returnerer den formatert som en streng (etter å konvertere den til Hex som en midtsteg). Dette returnerer den eksakte objectGUID-verdien som vises for ethvert Active Directory-objekt i ADUC. Eksempel utgang: 3f79048f-42cd-4c77-8426-835cd9f8a3ad funksjon GUIDtoStr (binærguid) hexguid pakke ut (Hhex, binærguid) hex hexguidhex hex1 substr (hex, -26, 2). substr (hex, -28, 2). substr (hex, -30, 2). substr (hex, -32, 2) hex2 substr (hex, -22, 2). substr (hex, -24, 2) hex3 substr (hex, -18, 2). substr (hex, -20, 2) hex4 substr (hex, -16, 4) hex5 substr (hex, -12, 12) guidstr hex1. -. HEX2. -. hex3. -. hex4. -. hex5 For å utdype på rcrows-innlegg, hvis du vil konvertere objektSID-verdien til en brukbar streng (fra Active Directory), vil følgende funksjon gjøre trikset (dette ble lånt fra en annen del av håndboken, bare tenkt at ID legger til det her): Returnerer den tekstlige SID-funksjonen bintostrsid (binsid) hexsid bin2hex (binsid) rev hexdec (substr (hexsid, 0, 2)) subcount hexdec (substr (hexsid, 2, 2)) auth hexdec (substr (hexsid, 4, 12)) Resultat rev-auth for (x0x lt subcount x) subauthx hexdec (dette-gtlittleendian (substr (hexsid, 16 (x 8), 8))) resultat. -. subauthx Cheat ved å slå på S-retur S-. Resultat Konverterer et lite endian hex-nummer til en, som hexdec kan konvertere funksjonen littleendian (hex) for (x strlen (hex) - 2 x gt 0 x x - 2) resultat. substr (hex, x, 2) returresultat Denne funksjonen er ikke relatert til ldapgetvalueslen-funksjonen, men er fortsatt nyttig hvis du vil konvertere binærverdien for objectGUID til et strengformat (konvertert fra noen vbscript levert av Richard Mueller): Denne funksjonen vil konvertere en binærverdireg til en gyldig streng. funksjon bintostrguid (objectguid) hexguid bin2hex (objectguid) hexguidtoguidstr for (k 1 k lt 4 k) hexguidtoguidstr. substr (hexguid, 8-2 k, 2) hexguidtoguidstr. - for (k 1 k lt 2 k) hexguidtoguidstr. substr (hexguid, 12-2 k, 2) hexguidtoguidstr. - for (k 1 k lt 2 k) hexguidtoguidstr. substr (hexguid, 16-2 k, 2) hexguidtoguidstr. -. substr (hexguid, 16, 4) hexguidtoguidstr. -. substr (hexguid, 20) Heres et eksempel på hvordan du bruker begge: etablere forbindelsen og spesifiser basen først. Det finnes mange eksempler i håndboken for denne srldapsearch (this-gtconn, this-gtbasedn, filter, fields) oppføringer ldapgetentries (this-gtconn, sr) hvis (inarray (objectguid, fields)) entries0objectguid0 this-gtbintostrguid (entries0objectguid0) hvis (inarray (objektside, felt)) oppføring ldapfirstentry (this-gtconn, sr) objektsidbinary ldapgetvalueslen (this-gtconn, entry, objectside) entries0objectsid0 this-gtbintostrsid (objectsidbinary0) Håper dette hjelper noen Hei Her løsning for WINDOWS objektside: LIB. klasse LDAPOBJECTSID offentlig funksjon toString (SIDBINARY) split strsplit (SIDBINARY, 8) hexArray array () foreach (delt som nøkkel gt byte) hexArraykey strToUpper (substr (0.dechex (bindec (byte)) -2)) BLOCKCOUNT hexdec (hexArray1 ) DECGROUPSUB-ID-BLOCKSi () for (i0 iltBLOCKCOUNT i) offset 8 (4 i) DECGROUPSUB-ID-BLOCKSi-array () DECGROUPSUB-ID-BLOCKSi1 hexdec (hexArrayoffset3) DECGROUPSUB-ID-BLOCKSi2 hexdec (hexArrayoffset2) DECGROUPSUB-ID - BLOCKSi3 hexdec (hexArrayoffset1) DECGROUPSUB-ID-BLOCKSi4 hexdec (hexArrayoffset) SID S-.hexdec (hexArray0) .- Dette-gtbyte6ToLong (hexdec (hexArray2), hexdec (hexArray3), hexdec (hexArray4), hexdec (hexArray5) hexdec (hexArray6), hexdec (hexArray7)) foreach (DECGROUPSUB-ID-BLOCKS as BLOCK) SID. -.this-gtbyte4ToLong (Blokk1, blokk2, BLOCK3, BLOCK4) returnerer LID egen funksjon byte6ToLong (b1, b2, b3, b4, b5, b6) byte6ToLong b1 byte6ToLong byte6ToLong256 b2 b3 byte6ToLong byte6ToLong256 byte6ToLong byte6ToLong256 b4 byte6ToLong byte6ToLong256 b5 b6 byte6ToLong byte6ToLong256 retur byte4ToLong, byte4ToLong (b1, b2, b3, b4) byte4ToLong b1 byte4ToLong byte4ToLong b2 byte4ToLong byte4ToLong256 b2 byte4ToLong byte4ToLong256 b3 byte4ToLong byte4ToLong256 b4 retur byte4ToLong srldapsearch (conn, basedn, filter, fields) oppføring ldapfirstentry (conn, sr) objektsidbinary ldapgetvalueslen (conn, entry, objektside) Obj ny LDAPOBJECTSID () ekko Obj-gttoString (objectsidbinary0)

No comments:

Post a Comment