Anda di halaman 1dari 35

h a n g e Vi

N
y
bu
to
.d o

LDAP

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

A finales de los aos 70, ITU (International Telecommunication


Union) empez a trabajar en el email estndar X.400. El estndar
necesitaba un directorio de nombres para acceder entre redes en
estilo jerrquico no muy diferente al de DNS.
Esta necesidad hizo necesario desarrollar una serie de estndar y
especficamente el estndar X.519, quien defina DAP (Directory
Access Protocol).
Estos dos protocolos eran grandes, pesados y consuman muchos
recursos.
A inicios de los aos 90, IETF ve la necesidad de modificar este
protocolo y utilizar capas del protocolo TCP/IP y siguiendo el
estndar X.519. A este protocolo le darn el nombre LDAP (Light
Directory Access Protocol).

.d o

1. Breve historia de LDAP

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Tcnicamente, LDAP es un protocolo que define el mtodo a


emplear para acceder a datos de un directorio ordenado.
Define como cargar los datos en el directorio (importar) y como
guardar los datos (exportar) desde el directorio (LDIF).

LDAP no define que tipo de informacin se va a guardar.

LDAP define cuatro modelos:

Modelo de informacin: Define como estar


representado la informacin en sistemas de LDAP.
Modelo de nombre: Estructura de nombres. Ejem.
'dc=example, dc=com'
Modelo de funcionamiento: Define como leer, buscar,
escribir o modificar la informacin.
Modelo de seguridad.

.d o

2. Visin general de LDAP I

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to
.d o

2. Visin general de LDAP II

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

LDAP no define que tipo de datos se van a guardar, solamente


como acceder a estos. Pero la mayora de los LDAP, utilizan una
BD estndar como back-end. Por ejemplo OpenLDAP da la opcin
de seleccionar que tipo de BD se van a emplear.
Cuando utilizamos los servidores LDAP no sabemos de donde
vienen los datos. Pueden venir de un servidor o otro. Lo importante
es configurar correctamente en el cliente el servidor.
Es importante diferenciar estos dos conceptos; acceder a los
servicios de LDAP y operar con los servicios LDAP. Por un lado
tendremos esquemas y organizacin de la informacin. Y por otra la
implementacin y utilizar los datos.
Un directorio es un conjunto de objetos con atributos organizados
en una manera lgica y jerrquica

.d o

.c

lic

k
c u -tr a c k

2. Visin general de LDAP III

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

La caracterstica de LDAP es, escribir una vez y leer muchas veces.


LDAP no est preparado para cambiar la informacin en cada
acceso. Las respuestas de la escritura son muy lentas. Sin
embargo si tiene que estar muy preparado para reaccionar de
forma muy rpida cuando acceden usuarios, trabajadores a entrada
de la fbrica, etc.
La lectura de datos es mucho ms rpida comparando con las BD
como MySQL o PostGresSQL.
Todos los datos estn indexados.
Por las duplicaciones de LDAP, al modificar o crear una nueva
entrada de datos, se generarn mltiples transacciones.

.d o

3. LDAP vs BD I

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Los datos entre LDAP maestro y esclavo se sincronizan mediante


un proceso de replicacin simple.
En el momento de la replicacin una pregunta al esclavo y al
maestro pueden devolver distinta respuesta. Aqu se diferencia
mucho de la consistencia que pueden dar las bases de datos
relacionales.
Hoy en da se ha mejorado en la replicacin y las conexiones
mediante internet se han mejorado pero esta caracterstica no se ha
subsanado.

.d o

3. LDAP vs BD II

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

LDAP da acceso a clientes tanto de intranet como extranet, y este


acceso est estandarizado. Por este motivo, se puede sustituir un
servidor LDAP por otro sin que los clientes se den cuenta.
Al ser un estndar, el desarrollo tanto del servidor como el del
cliente pueden ser independientes.
Puede dar soporte a servicios muy distantes. Podemos disponer un
servidor de LDAP para una empresa pequea o ms de un servidor
con la informacin replicada para una multinacional.

.d o

4. Por qu utilizar LDAP

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

LDAP normalmente dar servicio a otros servicios.


Acceso condicional. Llaves electrnicas, acceso a informacin
digital, acceso a redes, acceso a sistemas operativos, autenticacin
en otros servicios (Apache, FTP, ).
Paginas amarillas. La informacin guardada en LDAP ser til
como consulta de datos. Los emails de los trabajadores, contacto
de clientes,

Sustitucin de un DNS clsico por un LDAP.

Sustitucin de NIS.

Base de datos de consulta.

Consulta a LDAP desde PHP, Perl o otros lenguajes de


programacin.

.d o

5. Funcionalidad LDAP

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

LDAP utiliza los directorios en un modelo de datos que asumen o


representa los datos en una jerarqua de objetos. Esto no implica
que LDAP sea un base de datos orientada a objetos.
LDAP es un protocolo que da acceso a si mismo sin definir que tipo
de informacin se va a guardar.
Las primitivas read, write y modify funcionan describiendo los datos
con caractersticas de modelo.

.d o

6. Modelo de datos I

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Estructura de rbol de objetos:

Los datos se representan como objetos jerrquicos,


llamadas entradas.
Cada entrada tiene una entrada padre y puede tener ms
de una entrada hijo.
Cada entrada est compuesto por uno o ms objetos de
clase (objectclass)
Cada objectclass puede contener uno o ms de un
atributo (attribute).
Las caractersticas de los objectclass y los attribute se
describan con definiciones ASN.1.

.d o

.c

lic

k
c u -tr a c k

6. Modelo de datos II

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to
.d o

6. Modelo de datos III

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Todos los atributos pertenecen a un o a varios objectclass.

Cada atributo define el tipo de datos utilizado.

Strings, Numbers, Boolean, ...

Time, Telephone numbers,

Binary, Distinguished Name (DN), Bit string,

Ejemplo

Puede haber atributos obligatorios (MUST) o opcionales (MAY)


definidos en el objectclass del que es parte. Esto se asemeja a la
utilizacin de formularios.
Los atributos pueden tener uno (single) o varios valores (multi). Si el
atributo define el email, para una misma entrada puede haber ms
de un email. Por defecto los atributos suelen tener el valor multi.
Los atributos suelen tener nombres y algunas veces aliases o
abreviaturas. Por ejemplo, el atributo commonName es miembro
del objectclase person (y de otras) y se utiliza como cn.

.d o

.c

lic

k
c u -tr a c k

7. Atributos I

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Al mismo nivel, cualquier atributo se puede definir como unique


para realizar bsquedas a posteriori.

Suponemos que tenemos una agenda con los siguientes


atributos: names, phone number, addresses y favorite
drink (es un atributo que podemos encontrar en LDAP
por defecto).
Seleccionamos como unique el atributo CN. As
podremos realizar cualquier bsqueda con este atributo.
Si no disponemos de un atributo unique, una consulta nos
puede devolver todas las entradas que coincidan con
los parmetros de bsqueda.
Se pueden definir ms de un atributo como unique: cn +
favoriteDrink

.d o

.c

lic

k
c u -tr a c k

7. Atributos II

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

El objectClass en definitiva es un paquete de atributos.


Cada objectClass es un paquete relacionado con aplicaciones o
servicios muy habituales. Por este motivo no suele ser muy
corriente crear un objectClass para un servicio comn. Es verdad
sin embargo que un objectClass no se va a ajustar 100% al servicio
o aplicacin que necesitas y se tendr infrautilizar.
El objectClass define los atributos con MUST o MAY.
El objectClass puede ser parte de una jerarqua, en este caso va a
heredar todas las caractersticas de sus parientes.
ObjectClass ms utilizados:

ObjectClass

.d o

.c

lic

k
c u -tr a c k

8. ObjectClass

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

La descripcin del rbol se realizar mediante entradas a nuestro


LDAP. Empezando desde el root y bajando en la jerarqua que se
adecue a nuestras necesidades.
Es muy importante disear en papel la jerarqua que necesitamos
para nosotros y mirando siempre las necesidades tecnolgicas y no
la estructuracin fsica nuestra.
Los parientes siempre se tendrn que definir antes de los hijos.
Despus no hay forma de cambio sencillo.
Para las entradas utilizaremos el formato LDIF.

.d o

9. Describir el rbol I

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Ejemplo:
version: 1
## version not strictly necessary but good practice to
future
## DEFINE DIT ROOT/BASE/SUFFIX ####
## uses RFC 2377 format
## dcObject is an AUXILIARY objectclass and MUST
## have a STRUCTURAL objectclass (organization in this
# this is an ENTRY sequence and is preceded by a BLANK
dn: dc=example,dc=com
dc: example
description: The best company in the whole world
objectClass: dcObject
objectClass: organization
o: Example, Inc.
## FIRST Level hierarchy - people
# this is an ENTRY sequence and is preceded by a BLANK
dn: ou=people, dc=example,dc=com
ou: people
description: All people in organisation
objectClass: organizationalUnit
## SECOND Level hierarchy - people entries
# this is an ENTRY sequence and is preceded by a BLANK
dn: cn=Joe Schmo,ou=people,dc=example,dc=com
objectclass: inetOrgPerson
cn: Joe Schmo
sn: Schmo
uid: jschmo
mail: joe@example.com
mail: j.schmo@example.com
ou: sales

include for

case)
line

line

line

.d o

9. Describir el rbol II

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Para navegar por el rbol utilizaremos los comandos (read, search,


modify,...), y de esta manera tendremos la posibilidad de decir al
LDAP donde est la informacin que buscamos o queramos
cambiar.
Al meter la informacin, se han utilizado atributos, alguno de ellos
con la propiedad unique. Se utilizarn estos atributos para realizar
las bsquedas.
Cada entrada dispondr de un nombre distinguido. (DN).

.d o

10.Navegar en el rbol

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Uno de los aspectos ms importantes de LDAP, es la capacidad


que dispone para delegar responsabilidades a otros servidores
LDAP.
Una empresa puede disponer de una delegacin en otro pas. Esta
delegacin dispondr de su parte de LDAP, y el mantenimiento de
esta parte se podr delegar completamente a esa delegacin.

Ejemplo roaming universidad.

A diferencia con el DNS, un servidor LDAP si sabe que a delegado


esa parte de informacin a otro servidor, no buscar el la
informacin exigida por el servidor, sino que le pasar al cliente la
direccin del servidor que pueda disponer esa informacin.

.d o

.c

lic

k
c u -tr a c k

11.Dividir LDAP I

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to
.d o

11. Dividir LDAP II

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to
.d o

11. Dividir LDAP III

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Las rplicas no se realizan al nivel de LDAP sino a nivel de DIT.


Dentro de un mismo servidor LDAP puede haber ms de un DIT,
por este motivo nos puede interesar replicar nicamente uno.
La rplica del DIT sucede peridicamente, a esta fase se le conoce
como replication cycle time.
Hay mtodos para reducir el tiempo de la rplica al mximo posible.
OpenLDAP hasta la versin 2.3 utilizaba el demonio slurpd para
este fin, pero cambiaron la estrategia y ahora es ms manejable y
ms flexible.
Podemos encontrar dos modos de rplicas:

Master-Slave.

Maste-Master.

.d o

12. Rplicas de LDAP I

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Master-Slave:

Los cambios y las entradas se realizan nicamente en el


Master.
Puede haber ms de un Slave con la misma informacin,
por este motivo es muy fcil realizar un balanceo de
cargas.
Los Slave, son read-only. nicamente se puede leer los
datos de estos servidores. Esto garantiza un
funcionamiento ms gil y rpido.
Si cae el servidor Maestro perdemos la oportunidad de
realizar nuevas entradas.

.d o

12. Rplicas de LDAP II

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Multi-Master:

En estos casos se pueden realizar nuevas entradas o


modificaciones en todos los servidores, y despus de
realizar el cambio se propaga esta informacin por
todos los servidores.
OpenLDAP no soportaba esta funcionalidad, pero despus
de los cambios en la versin 2.4, si es posible disponer
de esta estructura.
Puede haber problemas de concurrencia, por este motivo
se han cogido estas directivas en OpenLDAP:

Si se han modificado dos atributos al mismo


tiempo en distintos servidores, segn el atributo
sea SINGLE o MULTI-VALUED, la entrada
puede quedar en un estado, incorrect o
unusable.

Si un usuario borra una entrada y la otra persona


aade la misma entrada, la entrada reaparecera.

.d o

12. Rplicas de LDAP III

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to
.d o

12. Rplicas de LDAP IV

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to
.d o

Objetos LDAP

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Todo en LDAP es jerrquico, tambin con objectClass y attributes.


Los Schemas sin embargo son paquetes de unidad, donde
aparecern en grupos y relacionados objectClass y attributes.
Schemas:

Todos los objectClass y attributes estn definidos en


schemas. Excepto algunos que estn embebidos en el
propio sistema LDAP.
Todos los schemas utilizados en aplicaciones LDAP, debe
de conocer (tener instalado) el servidor LDAP.

.d o

.c

lic

k
c u -tr a c k

1. Introduccin

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

ObjectClass: grupo de attributes:

Los ObjectClass estn definidos en los schemas.


Pueden estar organizados en jerarqua, en este caso
heredan las propiedades.
Pueden ser STRUCTURAL, en este caso se utilizan para
crear entradas, AUXILIARY, en este caso se utilizan
para ayudar a las entradas o ABSTRACT no se utilizan
como entradas, por ejemplo: Top.
Tienen un nombre identificativo y nico.
Define cada atributo que compone, siendo estos
necesarios o opcionales.
Puede haber ms de un ObjectClass presente en una
entrada de LDAP.
Pero nicamente un nico ObjectClass structural

.d o

.c

lic

k
c u -tr a c k

1. Introduccin II

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Attributes:

Todos los atributos estn incluidos en un o en varias


objectclass
Para utilizar un atributo en una entrada, previamente habr
que definir que se va a utilizar el objectclass donde est
definido el atributo.
El atributo puede aparecer varias veces en una entrada si
est definido como MULTI-VALUE (por defecto). Si est
definido como SINGLE-VALUE aparecer una nica
vez.
La definicin de un atributo contempla el formato del
atributo, por ejemplo, string o number. Y tambin como
actuar en ciertas operaciones, como comparaciones,
donde pueda ser sensible a maysculas o no.

.d o

.c

lic

k
c u -tr a c k

1. Introduccin III

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Entradas:

Las entradas deben de contener un objectclass estructural


y solamente uno.
Pueden contener objectclass auxiliares tantos como se
necesitan.
Puede contener un nico abstract objectclass.
Las entradas pueden tener otras entradas debajo en la
jerarqua.
Las entradas pueden tener otra entrada arriba en la
jerarqua.
Las entradas pueden tener ms entradas a la misma altura
y compartir el mismo pariente.

.d o

.c

lic

k
c u -tr a c k

1. Introduccin IV

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to
.d o

1. Introduccin V

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Como se ha definido anteriormente, es un paquete donde


encontraremos objectclass y atributos definidos.
Un servicio que quiera utilizar un LDAP para un servicio concreto
tendr dos opciones:

Utilizar esquemas habituales e instaladas por defecto.


Crear su propio schema para interactuar con el servidor
LDAP. Esta schema se instalar en el servidor LDAP y
se tendrn que crear o modificar entradas utilizando los
atributos (y los objectclass) para este servicio.

.d o

.c

lic

k
c u -tr a c k

2. Schema

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

De esta manera se define un obejctClass:


ObjectClassDescription = "(" whsp
numericoid whsp
; ObjectClass identifier
[ "NAME" qdescrs ]
[ "DESC" qdstring ]
[ "OBSOLETE" whsp ]
[ "SUP" oids ]
; Superior ObjectClasses
[ ( "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" ) whsp ]
; default structural
[ "MUST" oids ]
; AttributeTypes
[ "MAY" oids ]
; AttributeTypes
whsp ")"

Una clase habitual:


objectclass ( 2.5.6.2 NAME 'country'
SUP top STRUCTURAL
MUST c
MAY ( searchGuide $ description
) )

.d o

3. ObjectClass

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

Cada atributo es incluido en uno o en ms objectclass.

El atributo debe de ser reconocido por el servicio LDAP.

Un atributo puede tener un valor (SINGLE-VALUE) o ms de un


valor (MULTI-VALUE).
La definicin de un atributo incluye la definicin de tipo y el sintaxis
a emplear para despus realizar las bsquedas correctamente.

.d o

4. Attributes

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

h a n g e Vi
e

N
y
bu
to

AttributeTypeDescription = "(" whsp


numericoid whsp
; AttributeType identifier
[ "NAME" qdescrs ]
; name used in AttributeType
[ "DESC" qdstring ]
; description
[ "OBSOLETE" whsp ]
[ "SUP" woid ]
; derived from this other
; AttributeType
[ "EQUALITY" woid
; Matching Rule name
[ "ORDERING" woid
; Matching Rule name
[ "SUBSTR" woid ]
; Matching Rule name
[ "SYNTAX" whsp noidlen whsp ] ; Syntax OID
[ "SINGLE-VALUE" whsp ]
; default multi-valued
[ "COLLECTIVE" whsp ]
; default not collective
[ "NO-USER-MODIFICATION" whsp ]; default user modifiable
[ X-ORDERED whsp type ]
; non-standard - default not X-ORDERED
[ "USAGE" whsp AttributeUsage ]; default userApplications
whsp ")"

.d o

4. Attributes II

.c

lic

k
c u -tr a c k

.d o

lic

to

bu

O
W

XC

er

O
W

F-

PD

h a n g e Vi
e

XC

er

PD

F-

c u -tr a c k

.c

Anda mungkin juga menyukai