3 # - [PP] Now version controlled in db.d.o git repository, also see debian/changelog - 2009
4 # - [PP] Now version controlled in db.d.o bzr repository - 2007-12-25
7 # - [HE] Add 'purpose', 'physicalHost' to debianServer - 2007-12-25
8 # - [zobel] Add 'VoIP' - 2008-05-10
9 # - [luk] Add 'subGroup' to group - 2008-11-22
12 # - Add 'gender' and 'birthDate' to debianDeveloper
13 # - Add 'mailDisableMessage' to debianAccount
14 # - Add 'mailDisableMessage', 'mailCallout', 'mailGreylisting', 'mailRBL',
15 # 'mailRHSBL', and 'mailWhitelist' to debianDeveloper and debianRoleAccount
18 # - Add 'access' as a MAY for debianServer objectclass.
19 # - Make activity-from a UTF-8 string rather than ASCII.
20 # - add new debianRoleAccount objectclass.
23 # - Add 'access' as a MAY for debianDeveloper objectclass.
24 # - Add 'gid' attribute.
25 # - Make homeDirectory a MAY not MUST for debianAccount.
26 # - drop userPassword and memberUID MAYs from debianGroup.
27 # - add SUP top STRUCTURAL to debianGroup.
30 # - add a UTF8-enabled 'gecos' attribute type, conflicts with RFC2307
31 # - add debianAccount, which is roughly equivalent to posixAccount but
32 # permits UTF8 gecos fields
33 # - add debianGroup, which is the same as above but for posixGroup
36 # - Remove labeledURI, jpegPhoto from the list of supported
37 # attributes; using inetOrgPerson instead of organizationalPerson as
38 # a structural objectclass gives us both of these, and several other
39 # attributes that may be useful.
40 # - Add echelon attributes for MIA work to the debiandeveloper
41 # objectclass. (accountcomment,accountstatus)
42 # - Add specification for debianServer objectclass, used for Debian
46 # - grammarfied 'allowedHosts' to 'allowedHost' as
47 # 1.3.6.1.4.1.9586.100.4.2.12.
48 # - add 'privateSub' as 1.3.6.1.4.1.9586.100.4.4.5.
49 # - add 'jabberJID' as 1.3.6.1.4.1.9586.100.4.2.13.
50 # - change 'icqUIN' to an integer type (see? I told you it wasn't
51 # approved for use yet! ;)
57 # Project: db.debian.org
58 # Contact: Debian directory administrators <admin@db.debian.org>
62 # enterprise.Debian.project.userdir / 1.3.6.1.4.1.9586.100.4
64 # .1 - public LDAP objectClasses
68 # .2 - public LDAP attributeTypes
77 # .9 - middlename (mn)
79 # .11 - supplementaryGid
100 # .32 - mailDisableMessage
106 # .38 - mailContentInspectionAction
107 # .39 - allowedGroups
108 # .40 - exportOptions
109 # .41 - sshdistAuthKeysHost
115 # .3 - experimental LDAP objectClasses
116 # .1 - debianDeveloper
118 # .3 - debianRoleAccount
120 # .4 - experimental LDAP attributeTypes
121 # .1 - allowedHosts - OBSOLETED
124 # .4 - keyFingerPrint
126 # .6 - accountComment
128 # .8 - perform callouts
129 # .9 - perform greylisting
134 # .15 - mailDefaultOptions
135 # .16 - mailPreserveSuffixSeparator
137 # Public attribute types
138 attributetype ( 1.3.6.1.4.1.9586.100.4.2.1
140 DESC 'textual form of an SSH public key compatible with authorized_keys'
141 EQUALITY caseIgnoreMatch
142 SUBSTR caseIgnoreSubstringsMatch
143 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
145 attributetype ( 1.3.6.1.4.1.9586.100.4.2.2
147 DESC 'last known activity from user email address'
148 EQUALITY caseExactMatch
149 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
151 attributetype ( 1.3.6.1.4.1.9586.100.4.2.3
153 DESC 'last known activity from user PGP key'
154 EQUALITY caseExactIA5Match
155 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
157 attributetype ( 1.3.6.1.4.1.9586.100.4.2.4
159 DESC 'user-editable comment'
160 EQUALITY caseExactIA5Match
161 SUBSTR caseIgnoreIA5SubstringsMatch
162 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
164 attributetype ( 1.3.6.1.4.1.9586.100.4.2.5
166 DESC 'UIN for ICQ instant messaging system'
167 EQUALITY integerMatch
168 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
170 attributetype ( 1.3.6.1.4.1.9586.100.4.2.6
172 DESC 'Internet Relay Chat nickname'
173 EQUALITY caseIgnoreIA5Match
174 SUBSTR caseIgnoreIA5SubstringsMatch
175 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
177 attributetype ( 1.3.6.1.4.1.9586.100.4.2.7
179 DESC 'latitude coordinate'
180 EQUALITY caseExactIA5Match
181 SUBSTR caseExactIA5SubstringsMatch
182 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
184 attributetype ( 1.3.6.1.4.1.9586.100.4.2.8
186 DESC 'longitude coordinate'
187 EQUALITY caseExactIA5Match
188 SUBSTR caseExactIA5SubstringsMatch
189 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
191 attributetype ( 1.3.6.1.4.1.9586.100.4.2.9
192 NAME ( 'mn' 'middlename' )
195 attributetype ( 1.3.6.1.4.1.9586.100.4.2.10
197 DESC 'vacation message'
198 EQUALITY caseIgnoreMatch
199 SUBSTR caseIgnoreSubstringsMatch
200 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
202 attributetype ( 1.3.6.1.4.1.9586.100.4.2.11
203 NAME 'supplementaryGid'
204 DESC 'additional Unix group id of user'
205 EQUALITY caseIgnoreMatch
206 SUBSTR caseIgnoreSubstringsMatch
207 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
209 attributetype ( 1.3.6.1.4.1.9586.100.4.2.12
211 DESC 'host name this account is allowed access to'
212 EQUALITY caseIgnoreIA5Match
213 SUBSTR caseIgnoreIA5SubstringsMatch
214 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
216 attributetype ( 1.3.6.1.4.1.9586.100.4.2.13
218 DESC 'JID for Jabber instant messaging protocol'
219 EQUALITY caseIgnoreIA5Match
220 SUBSTR caseIgnoreIA5SubstringsMatch
221 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
223 attributetype ( 1.3.6.1.4.1.9586.100.4.2.14
225 DESC 'nature of access allowed to server'
226 EQUALITY caseIgnoreMatch
227 SUBSTR caseIgnoreSubstringsMatch
228 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
230 attributetype ( 1.3.6.1.4.1.9586.100.4.2.15
232 DESC 'email address of server administrator'
233 EQUALITY caseIgnoreIA5Match
234 SUBSTR caseIgnoreIA5SubstringsMatch
235 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
237 attributetype ( 1.3.6.1.4.1.9586.100.4.2.16
239 DESC 'hardware architecture of server'
240 EQUALITY caseIgnoreIA5Match
241 SUBSTR caseIgnoreIA5SubstringsMatch
242 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE )
244 attributetype ( 1.3.6.1.4.1.9586.100.4.2.17
246 DESC 'type of network connection for server'
247 EQUALITY caseIgnoreMatch
248 SUBSTR caseIgnoreSubstringsMatch
249 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
251 attributetype ( 1.3.6.1.4.1.9586.100.4.2.18
253 DESC 'amount of disk space available to server'
254 EQUALITY caseIgnoreMatch
255 SUBSTR caseIgnoreSubstringsMatch
256 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{64} )
258 attributetype ( 1.3.6.1.4.1.9586.100.4.2.19
260 DESC 'host OS distribution'
261 EQUALITY caseIgnoreIA5Match
262 SUBSTR caseIgnoreIA5SubstringsMatch
263 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE )
265 #attributetype ( 1.3.6.1.4.1.9586.100.4.2.20
267 # DESC '(short) host name of server'
268 # EQUALITY caseIgnoreIA5Match
269 # SUBSTR caseIgnoreIA5SubstringsMatch
270 # SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SINGLE-VALUE )
272 attributetype ( 1.3.6.1.4.1.9586.100.4.2.21
274 DESC 'FQDN of the server'
275 EQUALITY caseIgnoreIA5Match
276 SUBSTR caseIgnoreIA5SubstringsMatch
277 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
279 attributetype ( 1.3.6.1.4.1.9586.100.4.2.22
281 DESC 'description of physical hardware'
282 EQUALITY caseIgnoreMatch
283 SUBSTR caseIgnoreSubstringsMatch
284 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} SINGLE-VALUE )
286 attributetype ( 1.3.6.1.4.1.9586.100.4.2.23
288 DESC 'amount of RAM available to server'
289 EQUALITY caseIgnoreMatch
290 SUBSTR caseIgnoreSubstringsMatch
291 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{64} )
293 attributetype ( 1.3.6.1.4.1.9586.100.4.2.24
295 DESC 'name of the sponsor of this server'
296 EQUALITY caseIgnoreMatch
297 SUBSTR caseIgnoreSubstringsMatch
298 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
300 attributetype ( 1.3.6.1.4.1.9586.100.4.2.25
302 DESC 'email address of sponsoring server administrator'
303 EQUALITY caseIgnoreIA5Match
304 SUBSTR caseIgnoreIA5SubstringsMatch
305 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
307 attributetype ( 1.3.6.1.4.1.9586.100.4.2.26
309 DESC 'textual form of an SSH public host key compatible with known_hosts'
310 EQUALITY caseIgnoreMatch
311 SUBSTR caseIgnoreSubstringsMatch
312 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
314 attributetype ( 1.3.6.1.4.1.9586.100.4.2.27
316 DESC 'administrative status of server'
317 EQUALITY caseIgnoreMatch
318 SUBSTR caseIgnoreSubstringsMatch
319 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
321 attributetype ( 1.3.6.1.4.1.9586.100.4.2.28
323 DESC 'The GECOS field; the common name'
324 EQUALITY caseIgnoreMatch
325 SUBSTR caseIgnoreSubstringsMatch
326 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
328 attributetype ( 1.3.6.1.4.1.9586.100.4.2.29
331 EQUALITY caseExactIA5Match
332 SUBSTR caseExactIA5SubstringsMatch
333 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
335 attributetype ( 1.3.6.1.4.1.9586.100.4.2.30
337 DESC 'ISO 5218 representation of human gender'
338 EQUALITY integerMatch
340 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27{1} )
342 attributetype ( 1.3.6.1.4.1.9586.100.4.2.31
344 DESC 'Date of birth in YYYYMMDD format'
345 EQUALITY numericStringMatch
347 SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{8} )
349 attributetype ( 1.3.6.1.4.1.9586.100.4.2.32
350 NAME 'mailDisableMessage'
351 DESC 'Message returned when all mail is disabled'
352 EQUALITY caseIgnoreIA5Match
353 SUBSTR caseIgnoreIA5SubstringsMatch
354 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
356 attributetype ( 1.3.6.1.4.1.9586.100.4.2.33
358 DESC 'purposes of this server'
359 EQUALITY caseIgnoreMatch
360 SUBSTR caseIgnoreSubstringsMatch
361 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
363 attributetype ( 1.3.6.1.4.1.9586.100.4.2.34
365 DESC 'FQDN of the physical host of this virtual server'
366 EQUALITY caseIgnoreIA5Match
367 SUBSTR caseIgnoreIA5SubstringsMatch
369 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
371 attributetype ( 1.3.6.1.4.1.9586.100.4.2.35
373 DESC 'VoIP URL to communicate with that person'
374 EQUALITY caseIgnoreIA5Match
375 SUBSTR caseIgnoreIA5SubstringsMatch
376 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
378 attributetype ( 1.3.6.1.4.1.9586.100.4.2.36
381 EQUALITY octetStringMatch
382 SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
384 attributetype ( 1.3.6.1.4.1.9586.100.4.2.37
386 DESC 'name of other group for which membership implied by memberschip to this group'
387 EQUALITY caseIgnoreIA5Match
388 SUBSTR caseIgnoreIA5SubstringsMatch
389 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
391 # more attributes below
392 attributetype ( 1.3.6.1.4.1.9586.100.4.2.39
394 DESC 'Groups that have access to a host'
395 EQUALITY caseExactIA5Match
396 SUBSTR caseExactIA5SubstringsMatch
397 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
399 attributetype ( 1.3.6.1.4.1.9586.100.4.2.40
401 DESC 'export options for servers'
402 EQUALITY caseIgnoreIA5Match
403 SUBSTR caseIgnoreIA5SubstringsMatch
404 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
406 attributetype ( 1.3.6.1.4.1.9586.100.4.2.43
408 DESC 'web password for SSO'
409 EQUALITY octetStringMatch
410 SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
412 attributetype ( 1.3.6.1.4.1.9586.100.4.2.44
414 DESC 'rtc password for SIP/XMPP'
415 EQUALITY octetStringMatch
416 SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
418 # Experimental attribute types
420 # There are existing schemas for doing DNS in LDAP; would one of
421 # these be better? c.f. draft-miller-dns-ldap-schema-00 (expired)
422 attributetype ( 1.3.6.1.4.1.9586.100.4.4.2
424 DESC 'DNS zone record for user'
425 EQUALITY octetStringMatch
426 SUBSTR caseIgnoreSubstringsMatch
427 SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
429 # rfc822mailbox (RFC1274) is recommended as a replacement for this in
431 attributetype ( 1.3.6.1.4.1.9586.100.4.4.3
433 DESC 'forwarding address for email sent to this account'
434 EQUALITY caseIgnoreIA5Match
435 SUBSTR caseIgnoreIA5SubstringsMatch
436 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)
438 # Network Associates also has a schema for PGP keys / key IDs which may
439 # or may not be applicable:
440 # http://www.openldap.org/lists/openldap-devel/200010/msg00071.html
441 attributetype ( 1.3.6.1.4.1.9586.100.4.4.4
442 NAME 'keyFingerPrint'
443 EQUALITY caseIgnoreMatch
444 SUBSTR caseIgnoreSubstringsMatch
445 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
447 # Rather Debian-specific, not useful to the public.
448 attributetype ( 1.3.6.1.4.1.9586.100.4.4.5
450 DESC 'email subscription address for debian-private mailing list'
451 EQUALITY caseIgnoreIA5Match
452 SUBSTR caseIgnoreIA5SubstringsMatch
453 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)
455 # Echelon attributes; re-evaluate later
456 attributetype ( 1.3.6.1.4.1.9586.100.4.4.6
457 NAME 'accountComment'
458 DESC 'additional comments regarding the account status'
459 EQUALITY caseIgnoreIA5Match
460 SUBSTR caseIgnoreIA5SubstringsMatch
461 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
463 attributetype ( 1.3.6.1.4.1.9586.100.4.4.7
465 DESC 'Debian developer account status'
466 EQUALITY caseIgnoreIA5Match
467 SUBSTR caseIgnoreIA5SubstringsMatch
468 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
470 # mail attributes; not public information
471 attributetype ( 1.3.6.1.4.1.9586.100.4.4.8
473 DESC 'Whether or not to require a successful callout attempt on email delivery'
474 EQUALITY booleanMatch
475 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
477 attributetype ( 1.3.6.1.4.1.9586.100.4.4.9
478 NAME 'mailGreylisting'
479 DESC 'Whether or not to perform greylisting on email delivery'
480 EQUALITY booleanMatch
481 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
483 attributetype ( 1.3.6.1.4.1.9586.100.4.4.11
485 DESC 'RBL sites to check at SMTP accept time'
486 EQUALITY caseIgnoreIA5Match
487 SUBSTR caseIgnoreIA5SubstringsMatch
488 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
490 attributetype ( 1.3.6.1.4.1.9586.100.4.4.12
492 DESC 'RHSBL sites to check at SMTP accept time'
493 EQUALITY caseIgnoreIA5Match
494 SUBSTR caseIgnoreIA5SubstringsMatch
495 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
497 attributetype ( 1.3.6.1.4.1.9586.100.4.4.13
499 DESC 'sites to whitelist from additional SMTP accept time checks'
500 EQUALITY caseIgnoreIA5Match
501 SUBSTR caseIgnoreIA5SubstringsMatch
502 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
504 attributetype ( 1.3.6.1.4.1.9586.100.4.4.14
506 DESC 'Token for BATV'
507 EQUALITY caseExactMatch
508 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
510 attributetype ( 1.3.6.1.4.1.9586.100.4.4.15
511 NAME 'mailDefaultOptions'
512 DESC 'Whether or not to use a default set of anti-spam options'
513 EQUALITY booleanMatch
514 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
516 attributetype ( 1.3.6.1.4.1.9586.100.4.4.16
517 NAME 'mailPreserveSuffixSeparator'
518 DESC 'suffix serparator'
519 EQUALITY caseIgnoreIA5Match
520 SUBSTR caseIgnoreIA5SubstringsMatch
521 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1} )
523 attributetype ( 1.3.6.1.4.1.9586.100.4.2.38
524 NAME 'mailContentInspectionAction'
525 DESC 'what to do on content inspection hits'
526 EQUALITY caseIgnoreIA5Match
527 SUBSTR caseIgnoreIA5SubstringsMatch
528 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE )
530 attributetype ( 1.3.6.1.4.1.9586.100.4.2.41
531 NAME ( 'sshdistAuthKeysHost' )
534 attributetype ( 1.3.6.1.4.1.9586.100.4.4.42
536 DESC 'DNS Time To Live value'
537 EQUALITY caseIgnoreIA5Match
538 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
540 attributetype ( 1.3.6.1.4.1.9586.100.4.4.45
542 DESC 'which procedure to use for rebooting this host'
543 EQUALITY caseIgnoreIA5Match
544 SUBSTR caseIgnoreIA5SubstringsMatch
545 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
547 # Public object classes
549 objectclass ( 1.3.6.1.4.1.9586.100.4.1.1
551 DESC 'Abstraction of an account with POSIX attributes and UTF8 support'
553 MUST ( cn $ uid $ uidNumber $ gidNumber )
554 MAY ( userPassword $ loginShell $ gecos $ homeDirectory $ description $ mailDisableMessage $ sudoPassword $ webPassword $ rtcPassword ) )
556 objectclass ( 1.3.6.1.4.1.9586.100.4.1.2
559 DESC 'attributes used for Debian groups'
560 MUST ( gid $ gidNumber )
561 MAY ( cn $ description $ subGroup $ accountStatus ) )
563 # Experimental objectclasses:
565 objectclass ( 1.3.6.1.4.1.9586.100.4.3.1
566 NAME 'debianDeveloper'
567 DESC 'additional account attributes used by Debian'
569 MUST ( uid $ cn $ sn )
570 MAY ( accountComment $ accountStatus $ activity-from $
571 activity-pgp $ allowedHost $ comment $ countryName $
572 dnsZoneEntry $ emailForward $ icqUin $ ircNick $
573 jabberJID $ keyFingerPrint $ latitude $ longitude $ mn $
574 onVacation $ privateSub $ sshRSAAuthKey $ supplementaryGid $
575 access $ gender $ birthDate $ mailCallout $ mailGreylisting $
576 mailRBL $ mailRHSBL $ mailWhitelist $ VoIP $ mailContentInspectionAction $
577 bATVToken $ mailDefaultOptions $ mailPreserveSuffixSeparator
580 objectclass ( 1.3.6.1.4.1.9586.100.4.3.2
582 DESC 'Internet-connected server associated with Debian'
584 MUST ( host $ hostname )
585 MAY ( c $ access $ admin $ architecture $ bandwidth $ description $ disk $
586 distribution $ l $ machine $ memory $ sponsor $
587 sponsor-admin $ status $ physicalHost $ ipHostNumber $ dnsTTL $
588 sshRSAHostKey $ purpose $ allowedGroups $ exportOptions $ MXRecord $
589 sshdistAuthKeysHost $ rebootPolicy
592 objectclass ( 1.3.6.1.4.1.9586.100.4.3.3
593 NAME 'debianRoleAccount'
594 DESC 'Abstraction of an account with POSIX attributes and UTF8 support'
595 SUP account STRUCTURAL
596 MAY ( emailForward $ supplementaryGid $ allowedHost $ labeledURI $
597 mailCallout $ mailGreylisting $ mailRBL $ mailRHSBL $
598 mailWhitelist $ dnsZoneEntry $ mailContentInspectionAction $
599 bATVToken $ mailDefaultOptions $ sshRSAAuthKey $ mailPreserveSuffixSeparator