% run this through LaTeX with the appropriate wrapper

\chapter {Attribute Syntaxes}
\label{syntaxes}

All attributes recognised by Quipu have an associated ``string''
representation, that is used to store the data in the DSA.
This Chapter describes all the currently recognised syntaxes.

For most of the syntaxes, as BNF description is given, using the following
base description:-

\begin{quote}\small\begin{verbatim}
<a> ::= any of the 52 upper and lower case IA5 letters
<d> ::= any IA5 digit 0-9
<k> ::= any of the 52 upper and lower case IA5 letters,
               IA5 digits, and "-" (hyphen)
<p> ::= any IA5 character in ASN.1 PrintableSting
<CRLF> ::= IA5 Newline
<letterstring> ::= <a> | <a> <letterstring>
<numericstring> ::= <d> | <d> <numericstring>
<keystring> ::= <k> | <k> <keystring>
<printablestring> ::= <p> | <p> <printablestring>
\end{verbatim}\end{quote}

The BNF description of attributes can be found in
Appendix~\ref{bnf}, but this does not repeat the BNF used for syntaxes
given below.

\section{Standard Syntaxes}

This section describes the Attribute Syntaxes defined by X.500.

There are many attributes that are represented by a sequence of
printable characters.  There are various was in which the contents of the
string is restricted, each is represented by a different syntax, which are
described below.

\subsection{PrintableString}
\index{PrintableString}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	serialNumber\\
\hline
\end{tabular}
\end{center}

The printable string characters are:
\begin{quote}\begin{tabular}{l}
\verb"A" through \verb"Z"\\
\verb"a" through \verb"z"\\
\verb"0" through \verb"9"\\
\verb"'" (apostrophe)\\
\verb"(" (left parenthesis)\\
\verb")" (right parenthesis)\\
\verb"+" (plus-sign)\\
\verb"," (comma)\\
\verb"-" (hyphen)\\
\verb"." (period)\\
\verb"/" (solidus)\\
\verb":" (colon)\\
\verb"?" (question-mark)\\
space
\end{tabular}\end{quote}

The value can be any character listed above, with matching as for
CaseExactString.

When matching multiple white spaces and tabs are treated as a single space
character.

Approximate matching is supported for this syntax.

The only attribute of this type is \verb+serialNumber+, this is used in the
\verb+device+ objectClass, and represents the serial number of the device.

\subsection{CaseExactString}
\index{CaseExactString}

No attributes currently use this syntax.

\label{T61String}
The value for this syntax can be one of two types, either a printable
string, or a T.61 string represented as follows:
\begin{verbatim}
<StringValue> ::= "{T.61}" <T61String> | <printablestring>
<T61String>   ::= Any character defined to be in T.61 String.
\end{verbatim}

Characters in T.61 string that can not be represented by an equivalent ASCII
character are quoted, using ``\verb+\xx+'' where ``\verb+xx+'' is the
hexadecimal value of the character.

Matching is as for PrintableString.

\subsection{CaseIgnoreString}
\index{CaseIgnoreString}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	knowledgeInformation\\
	commonName\\
	surname\\
	localityName\\
	stateOrProvinceName\\
	streetAddress\\
	organizationName\\
	organizationalUnitName\\
	title\\
	description\\
	businessCategory\\
	postalCode\\
	postOfficeBox\\
	physicalDeliveryOfficeName\\
	\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	userid\\
	textEncodedORaddress\\
	info\\
	favouriteDrink\\
	roomNumber\\
	userClass\\
	host\\
	documentIdentifier\\
	documentTitle\\
	documentVersion\\
	documentLocation\\
	durName\\
	wkdName\\
	protocolProfile\\
	objectID\\
	friendlyCountryName\\
\hline
\end{tabular}
\end{center}
The syntax is the same as CaseExactString, except that when matching 
``characters that differ only in their case are considered identical''.

Approximate matching is supported for this syntax.

The use of some of the attributes is now described, the more obvious ones
are omitted.

\begin{describe}
\item [knowledgeInformation] A description of knowledge mastered by a DSA.
\item [localityName] Used to identify the geographical area or locality in
which the object is physically located e.g.,
\begin{quote}\small\begin{verbatim}
London
\end{verbatim}\end{quote}
\item [stateOrProvinceName]
			describes the state in which
			the \verb"locality" is found; e.g.,
\begin{quote}\small\begin{verbatim}
New York
\end{verbatim}\end{quote}
\item [title]
An objects job title, e.g.,
\begin{quote}\small\begin{verbatim}
Technical Manager
\end{verbatim}\end{quote}

\item [businessCategory]
describes the business of the object, e.g.,
\begin{quote}\small\begin{verbatim}
networking
\end{verbatim}\end{quote}
This is used to find people sharing the same occupation.

\item [physicalDeliveryOfficeName]
			describes the geographical location
			of the physical delivery office which services the
			postal address of this object; e.g.,
\begin{quote}\small\begin{verbatim}
Troy
\end{verbatim}\end{quote}

\item [friendlyCountryName]
A `nice' name for countries, as opposed to the two letter codes enforced by
use of \verb+CountryName+, for example
\begin{quote}\small\begin{verbatim}
Great Britain
\end{verbatim}\end{quote}

\end{describe}

\subsection{CountryString}
\index{CountryString}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	countryName\\
\hline
\end{tabular}
\end{center}
This syntax is treated as a PrintableString, with matching rules as for
CaseIgnoreString, and the restriction that the string must consist of
exactly two characters.

\subsection{IA5String}
\index{IA5String}\index{quipuVrsion attribute}
\begin{center}
\begin{tabular}{|l|}\hline
QUIPU Attributes \\ \hline
	control\\
	quipuVersion\\
\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	aRecord\\
	mDRecord\\
	mXRecord\\
	nSRecord\\
	sOARecord\\
	cNAMERecord\\
\hline
\end{tabular}
\end{center}

This syntax is handled as PrintableString, except a wider range of
characters are recognised (i.e any character in IA5 string, characters such
as NewLine are quoted using the same mechanism as described for T61 string
in Section~\ref{T61String}), with matching rules as for CaseExactString.



\subsection{VisibleString}
\index{VisibleString}
\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	nRSSystemDescription\\
\hline
\end{tabular}
\end{center}
This is currently treated as an ASN attribute (see Section~\ref{ASN_syntax}).


\subsection{OctetString}
\index{OctetString}

No attributes use this syntax directly.

Characters that can not be printed as an ACSII are represented using the
quoting mechanism described in Section~\ref{T61String}.

\subsection{NumericString}
\index{NumericString}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	x121Address\\
	internationaliSDNNumber\\
\hline
\end{tabular}
\end{center}
The value is simply a numeric string:
\begin{verbatim}
<NumericValue>	::= <numericstring>
\end{verbatim}

The two attributes are used thus:
\begin{describe}
\item[x121Address] defines the X.121 Address of an object as defined by the
CCITT Recommendation X.121
\item[internationaliSDNNumber]
An International ISDN Number as defined by CCITT Recommendation E.164.
\end{describe}

\subsection{DestinationString}
\index{DestinationString}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	destinationIndicator\\
\hline
\end{tabular}
\end{center}
Behaves as a \verb+<printablestring>+, with CaseIgnoreString matching rules.

The only attribute of the type \verb+destinationIndicator+ is used to define
the addressee as required by the Public Telegram Service.

\subsection{TelephoneNumber}
\index{TelephoneNumber}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	telephoneNumber\\ 
\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	homePhone\\
\hline
\end{tabular}
\end{center}


\begin{center}
\begin{tabular}{|l|}\hline
NYSER Attributes \\ \hline
	mobileTelephoneNumber\\
	pagerTelephoneNumber\\
\hline
\end{tabular}
\end{center}

The value should be a string describing the phone number of the object
using the international notation; e.g.,
\begin{quote}\begin{verbatim}
+1 518-283-8860
\end{verbatim}\end{quote}
or
\begin{quote}\begin{verbatim}
+1 518-283-8860 x1234
\end{verbatim}\end{quote}
In general, the syntax is:
\begin{quote}\begin{verbatim}
"+" <country code> <national number> [ "x" <extension> ]
\end{verbatim}\end{quote}

Matching is as defined for CaseExactString, except that all space and `-'
characters are skipped during the comparison.

\subsection{PostalAddress}
\index{PostalAddress}

\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	postalAddress\\
	registeredAddress\\
	homePostalAddress\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<PostalAddressValue> ::= <address_component> | 
                         <address_component> `$' <address>
<address_component> = <StringValue>
\end{verbatim}
For example \verb+UCL $ Gower Street $ London+.
You are limited to a maximum of 6 \verb+<address_component>+'s, each with a 
maximum of 30 characters.
(Note each \verb+<address_component>+ can include T61 strings -- see
Section~\ref{T61String} for details of this).

Please note: substring matching is not supported by Quipu for this syntax.

\subsection{DN}
\index{DN}\index{masterDSA attribute}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	aliasedObjectName\\
	member\\
	owner\\
	roleOccupant\\
	seeAlso\\
\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
QUIPU Attributes \\ \hline
	masterDSA\\
	slaveDSA\\
\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	manager\\ 
	documentAuthor\\
	secretary\\
	lastModifiedBy\\
	associatedName\\
\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
MHS Attributes \\ \hline
	mhsMessageStoreName\\
\hline
\end{tabular}

\end{center}
\begin{verbatim}
<DNValue> ::= <name>
\end{verbatim}
Distinguished names are discussed in Section~\ref{quipu_name}, the BNF is
repeated for completeness:
\begin{verbatim}
<DNValue>	::= <rdn> | <rdn> "@" <DNValue>
<rdn>		::= <attribute> | <attribute> "%" <rdn>
\end{verbatim}

The DNs held by the attribute have the following meanings:-
\begin{describe}
\item[aliasedObjectName] The name of an aliased object.
\item[member] Specifies a member of a \verb+gruopOfNames+.
\item[owner] The name of the person responsible for the associated object.
\item[roleOccupant] The person that fills an organisational role.
\item[seeAlso] Other objects that may be of interest.
\item[masterDSA] The DSA holding the master EDB file.
\item[slaveDSA] DSAs holding slave EDB files.
\item[manager] The manager of a DSA.
\item[documentAuthor] Author of a document!
\item[secretary] The name of an person Secretary.
\item[lastModifiedBy] The object that last modified the referenced object!
\end{describe}

\subsection{OID}
\index{OID}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	supportedApplicationContext\\
\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
MHS Attributes \\ \hline
	mhsDeliverableContentTypes\\
	mhsDeliverableEits\\
	mhsSupportedAutomaticActions\\
	mhsSupportedContentTypes\\
	mhsSupportedOptionalAttributes\\
\hline
\end{tabular}
\end{center}
\begin{verbatim}
<OIDValue> ::= <oid>
\end{verbatim}

All the syntaxes in this section are represented by OIDs as follows:
\begin{verbatim}
<oid> ::= <keystring> "." <numericoid> | 
          <keystring> | 
          <numericoid>
<numericoid> ::= <numericstring> | 
                 <numericstring> "." <numericoid>
\end{verbatim}
For example \verb+2.3.4.2+ or \verb+attribute.6+.

In general, the value will be a string using oidtable mappings.

\subsection{ObjectClass}
\index{objectClass attribute}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	objectClass\\
\hline
\end{tabular}
\end{center}
Although essentially an OID, a separate syntax is provided an OID has
additional semantics when used as an object class.

\subsection{TelexNumber}
\index{TelexNumber}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	telexNumber\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<TelexNumberValue> ::= <printablestring> "$" <printablestring> 
                       "$" <printablestring>
\end{verbatim}
This is used to represent \verb+number $ country $ answerback+, for example
\verb+28722 $ G $ UCLPHYS+.

\subsection{TeletexTerminalIdentifier}
\index{TeletexTerminalIdentifier}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	teletexTerminalIdentifier\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<TeletexTerminalIdentifierValue> ::= <printablestring> 
              "$" <optstr> "$"  <optstr> "$" <optstr> 
              "$" <optstr> "$" <optstr>
<optstr> ::= <printablestring> | (null)
\end{verbatim}
Used to represent
\begin{quote}\begin{verbatim}
terminal $ graphic $ control $ page $ misc $ private
\end{verbatim}\end{quote}

\subsection{FacsimileTelephoneNumber}
\index{FacsimileTelephoneNumber}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	facsimileTelephoneNumber\\
\hline
\end{tabular}
\end{center}
\begin{verbatim}
<FacsimileTelephoneNumberValue> ::= <printablestring> 
                                    [ "$" <faxparameters> ]
<faxparameters> ::= <faxparm> | <faxparm> 
                    "$" <faxparameters>
<faxparm> ::= "twoDimensional" | "fineResolution" | 
              "unlimitedLength" | "b4Length" | 
              "a3Width" | "b4Width" | "uncompressed"
\end{verbatim}
For example \verb+123-4567 $ twoDimensional+


\subsection{DeliveryMethod}
\index{DeliveryMethod}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	preferredDeliveryMethod\\
\hline
\end{tabular}
\end{center}

\begin{center}
\begin{tabular}{|l|}\hline
MHS Attributes \\ \hline
	mhsPreferredDeliveryMethods\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<DeliveryValue> = <pdm_component> | <pdm_component> "$" <pdm>
pdm_component = "any" | "mhs" | "physical" | "telex" | 
                "teletex" | "g3fax" | "g4fax" | "ia5" | 
                "videotex" | "telephone"
\end{verbatim}
For example \verb+mhs $ telephone+.

\subsection{PresentationAddress}
\index{presentation addresses}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	presentationAddress\\
\hline
\end{tabular}
\end{center}
For more details see \volone/ of this manual and \cite{String.Addresses}.

\subsection{Password}
\index{Password}\index{user password attribute}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	userPassword\\
\hline
\end{tabular}
\end{center}
See Section~\ref{Passwords} for a discussion of this attribute.

\subsection{Certificate}
\index{Certificate}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	userCertificate\\
	cACertificate\\
\hline
\end{tabular}
\end{center}


\begin{verbatim}
<CertificateValue> ::= <Algorithm> "#" <EncryptedValue> "#"
           <Issuer> "#" <Subject> "#" <Algorithm> "#"
           <ProtocolVersion> "#" <Serial> "#" <Validity> "#"
           <Algorithm> "#" <EncryptedValue>
\end{verbatim}
% Give LaTeX a sporting chance of pagebreaking sensibly.
\begin{verbatim}
<Algorithm> ::= <OID> "#" <AlgorithmParameters>
<AlgorithmParameters> ::= | <IntegerValue> | 
                            "{ASN}" <HexString>
<Issuer> ::= <DN>
<Subject> ::= <DN>
<ProtocolVersion> ::= <IntegerValue>
<Serial> ::= <IntegerValue>
<Validity> ::= <UTCTime> "#" <UTCTime>
<EncryptedValue> ::= <HexString> | <HexString> "-" <Digit>
\end{verbatim}

\subsection{CertificatePair}
\index{CertificatePair}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	crossCertificatePair\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<CertificatePairValue> ::= [<CertificateValue>] "|" 
                           [<CertificateValue>]
\end{verbatim}
At least one certificate should be present, although QUIPU will not enforce
this.

\subsection{CertificateList}
\index{CertificateList}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	authorityRevocationList\\
	certificateRevocationList\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<CertificateListValue> ::= <AlgorithmValue> "#" <Issuer> "#" 
                <AlgorithmValue> "#" <EncryptedValue> "#"
                <UTCTime> ["#" <RevokedCertificates>]

<RevokedCertificates> ::= <AlgorithmValue> "#"
                 <EncryptedValue> 
                 [ "#" *(<RevokedCertificate> "#") ]

<RevokedCertificate> ::= <Subject> "#" <AlgorithmValue> "#"
                 <SerialNumber> "#" <UTCTime>

\end{verbatim}

\subsection{Guide}
\index{Guide}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	searchGuide\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<GuideValue>   ::= [<objectClass> "#"] <Criteria>
<Criteria>     ::= <CriteriaItem> | <CriteriaSet> | 
                   "!" <Criteria>
<CrtieriaSet>  ::= ["("] Criteria "@" CriteriaSet [")"] | 
                   ["("] Criteria "|" CriteriaSet [")"]
<CriteriaItem> ::= ["("] <attributetype> "$" <matchType> [")"]
<matchType>    ::= "EQ" | "SUBSTR" | "GE" | "LE" | "APPROX"
\end{verbatim}

Note the use of \verb+@+ for `and', as the \verb+&+ symbol has other meaning
here.

Some examples of Search Guide are:
\begin{quote}\begin{verbatim}
Person # commonName $ APPROX
( organization $ EQ ) @ (commonName $ SUBSTR)
( organization $ EQ ) @ ((commonName $ SUBSTR) | \
                        (commonName $ EQ))
\end{verbatim}\end{quote}

\subsection{UTCTime}
\index{UTCTime}
\begin{center}
\begin{tabular}{|l|}\hline
Standard Attributes \\ \hline
	lastModifiedTime\\
\hline
\end{tabular}
\end{center}
\begin{verbatim}
<UTCTimeValue> ::= <printablestring>
\end{verbatim}
The string should be formatted using the template \verb+yymmddhhmmssz+
where 
\verb+yy+ represents the year; 
\verb+mm+ represents the month; 
\verb+dd+ represents the day; 
\verb+hh+ represents hours; 
\verb+mm+ represents minutes; 
\verb+ss+ represents seconds; 
\verb+z+  represents the timezone.

For example the string \verb+890602093221Z+ is used to represent
09:32:21 at GMT, on June~$2^{\underline{\mbox{\scriptsize nd}}}$,
{\oldstyle 1989}.

\subsection{Boolean}
\index{Boolean}

No attributes use this syntax.

\begin{verbatim}
<BooleanValue> ::= <boolean>
<boolean>      ::= "TRUE" | "FALSE"
\end{verbatim}

\subsection{Integer}
\index{Integer}

\begin{center}
\begin{tabular}{|l|}\hline
MHS Attributes \\ \hline
	mhsDeliverableContentLength\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<IntegerValue> ::= <d>
\end{verbatim}


\section{QUIPU Attribute Syntaxes}

\subsection{ACL}
\label{acl_syntax}
\index{acl attribute}\
\begin{center}
\begin{tabular}{|l|}\hline
QUIPU Attributes \\ \hline
	accessControlList\\
\hline
\end{tabular}
\end{center}
\begin{verbatim}
<aclvalue>	::= <aclwho> "#" <aclwhat> "#" <acltype> ["#"]
<aclwho>	::= "self" | "others" | "group #" <namelist> | 
			"prefix #" <namelist>
<aclwhat>	::= "none" | "detect" | "compare" | 
                    "read" | "add" | "write"
<acltype>	::= "child" | "entry" | "default" | 
                    "attributes #" <oidlist>
<oidlist>	::= <oid> | <oidlist> "$" <oid>
\end{verbatim}
The use of ACL is discussed in Section~\ref{disc_acl}.

\subsection{Schema}
\label{tree_struct}
\index{Schema}\index{treeStructure attribute}
\begin{center}
\begin{tabular}{|l|}\hline
QUIPU Attributes \\ \hline
	treeStructure\\
\hline
\end{tabular}
\end{center}
Schema is currently represented by a single OID, and discussed fully in
Section~\ref{adding_data}.

\subsection{ProtectedPassword}
\index{ProtectedPassword}
\begin{center}
\begin{tabular}{|l|}\hline
QUIPU Attributes \\ \hline
	protectedPassword\\
\hline
\end{tabular}
\end{center}

\begin{verbatim}
<ProtectedPasswordValue> ::= <StringValue>
\end{verbatim}

The password encryption mechanism is encapsulated within the matching rules
for this attribute; two values are `equal' if they are identically equal or
if one is an encrypted representation of the other. 

Note that `equals' is not transitive for this attribute:
If $a = b$ and $b = c$, testing $a = c$ may give `incomparable' rather than
`true' as the result. The reason for this is that in some circumstances 
properly testing
this attribute for equality would consume an unacceptable amount of time. The
security of the encryption mechanism depends on this!

\subsection{SecurityPolicy}
\index{SecurityPolicy}
\begin{center}
\begin{tabular}{|l|}\hline
QUIPU Attributes \\ \hline
	entrySecurityPolicy\\
	dsaDefaultSecurityPolicy\\
	dsaPermittedSecurityPolicy\\
\hline
\end{tabular}
\end{center}

This attribute is currently handled as ``ASN'', see Section~\ref{ASN_syntax}.

\subsection{EdbInfo}
\index{edbInfo attribute}
\begin{center}
\begin{tabular}{|l|}\hline
QUIPU Attributes \\ \hline
	eDBinfo\\
\hline
\end{tabular}
\end{center}
\begin{verbatim}
<EdbInfoValue> ::= <name> "#" <name> "#" <namelist> ["#"]
\end{verbatim}
This attribute is discussed in Section~\ref{slave_update}.



\section{RARE Attribute Syntaxes}

These syntaxes are also described in \cite{thorn-na}.

\subsection{Mailbox}
\index{Mailbox}
\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	otherMailbox\\
\hline
\end{tabular}
\end{center}
\begin{verbatim}
<MailboxValue> ::= <printablestring> "$" <IA5String>
\end{verbatim}
For example \verb+internet $ quipu-support@cs.ucl.ac.uk+.

\subsection{CaseIgnoreIA5String}
\index{CaseIgnoreIA5String}
\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	rfc822Mailbox\\
	domainComponent\\
	nRSTextualDescription\\
	associatedDomain\\
\hline
\end{tabular}
\end{center}

These attributes are handled as IA5Strings, but use the matching rules
for the CaseIgnoreString syntax.


\subsection{Photo}
\index{Photo}\index{ASN}
\begin{center}
\begin{tabular}{|l|}\hline
RARE Attributes \\ \hline
	photo\\
\hline
\end{tabular}
\end{center}
Photos are a special case of ``ASN'' (see Section~\ref{ASN_syntax}), but the 
output format is different.
Your attention is drawn to Section~\ref{file_attr} which discusses storing
large attributes in a separate file.

The attribute should be encoded as a bitstring, in a G3FacsimilePage encoding
(as per Recommendation T.4).

\section{THORN System Attribute Syntaxes}

Syntaxes in this section are not recognised by Quipu,
and are thus handled as ASN --- see Section~\ref{ASN_syntax}.
However, Quipu compatible syntax handlers
for them are available as part of the
THORN\index{thorn}\cite{thorn} project.


\subsection{ThornACL}
\begin{center}
\begin{tabular}{|l|}\hline
THORN System Attributes \\ \hline
	thornACL\\
\hline
\end{tabular}
\end{center}

\subsection{RDType}
\begin{center}
\begin{tabular}{|l|}\hline
THORN System Attributes \\ \hline
	ruleDescription\\
\hline
\end{tabular}
\end{center}

\subsection{ODType}
\begin{center}
\begin{tabular}{|l|}\hline
THORN System Attributes \\ \hline
	objectDescription\\
\hline
\end{tabular}
\end{center}

\subsection{ADType}
\begin{center}
\begin{tabular}{|l|}\hline
THORN System Attributes \\ \hline
	attributeDescription\\
\hline
\end{tabular}
\end{center}

\subsection{KnowledgeReference}
\begin{center}
\begin{tabular}{|l|}\hline
THORN System Attributes \\ \hline
	knowledgeReference\\
\hline
\end{tabular}
\end{center}

\subsection{NRSInformation}
\begin{center}
\begin{tabular}{|l|}\hline
THORN System Attributes \\ \hline
	forwardOnlyInformation\\
	reverseOnlyInformation\\
	forwardAndReverseInformation\\
\hline
\end{tabular}
\end{center}
(There is not a syntax handler for this from THORN [yet!].)

\section{MHS Attribute Syntaxes}

Syntaxes in this section are not currently recognised by Quipu,
and are thus handled as raw ASN (see Section~\ref{ASN_syntax}).

\subsection{ORAddress}
\index{ORAddress}
\begin{center}
\begin{tabular}{|l|}\hline
MHS Attributes \\ \hline
	mhsORaddresses\\
\hline
\end{tabular}
\end{center}


\subsection{ORName}
\index{ORName}
\begin{center}
\begin{tabular}{|l|}\hline
MHS Attributes \\ \hline
	mhsDLMembers\\
\hline
\end{tabular}
\end{center}


\subsection{DLSubmitPermissions}
\index{DLSubmitPermissions}
\begin{center}
\begin{tabular}{|l|}\hline
MHS Attributes \\ \hline
	mhsDLSubmitPermissions\\
\hline
\end{tabular}
\end{center}


\section{ASN}
\label{ASN_syntax}
As the preceding Sections in this Chapter have mentioned, not all syntaxes
have a string representation defined by Quipu, so are represented by the raw
ASN.

An example would be:
\begin{verbatim}
photo= {ASN} 0308207b4001488001fd...
\end{verbatim}
where \verb+0308+\ldots is a hexadecimal representation (encoded using the
``Basic Encoding Rules'') of the ASN.1 defined attribute.

Attributes stored as ASN.1, will usually be matched correctly, with
the following exceptions:

\begin{itemize}
\item
There is an IMPLICIT Set in the ASN.1.  The DSA will not detect the
set, and so will not know to match components in arbitrary order.

\item
If special matching rules apply: for example, special rules to
determine equivalence of telephone numbers.  Such rules would need
to be represented by code in the DSA.
\end{itemize}

