RFC 2739

Calendar Attributes for vCard and LDAP

๐Ÿ“… published January 2000, from ietf

RFC 2739: Calendar Attributes for vCard and LDAP ๐ŸŽ€

Network Working Group ๐Ÿ’… Request for Comments: 2739 (that's this RFC's number, bestie) Authors: T. Small (XpertSite.Com), D. Hennessy (ISOCOR), and F. Dawson (Lotus) ๐Ÿซถ Category: Standards Track โœจ (so it's a real protocol spec, not just a chill note) Date: January 2000 ๐Ÿฆ‹ Obsoletes / Updates: the header doesn't list anything it obsoletes or updates ๐Ÿ™ˆ


Status of This Memo โœจ

Okay so this document is an Internet standards track protocol for the Internet community, and it's asking everyone for discussion and suggestions for improvements ๐Ÿ’–. For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1) ๐Ÿ“š. Distribution of this memo is unlimited ๐ŸŒˆ.

Copyright (C) The Internet Society (2000). All Rights Reserved.

Abstract ๐Ÿงš

When you're scheduling a calendar entity, like an event, you NEED the calendar address of every attendee you're inviting. That's just a prerequisite, no cap ๐Ÿ’…. Plus, being able to see an attendee's current "busy time" gives you an a priori indication of whether they'll be free to show up ๐ŸŒธ.

So a calendar user agent (CUA) needs a way to locate (URI) an individual user's calendar and free/busy time. Iconic behaviour, honestly ๐Ÿ‘‘.

This memo defines three mechanisms for getting a URI to a user's calendar and free/busy time:

  • Manual transfer of the information ๐Ÿ“;
  • Personal data exchange using the vCard format ๐Ÿ’Œ; and
  • Directory lookup using the LDAP protocol ๐Ÿ”.

Table of Contents ๐Ÿ“

1 CALENDARING AND SCHEDULING URIS...................................3
 1.1 FREE/BUSY URI (FBURL) .........................................3
 1.2 CALENDAR ACCESS URI (CAPURI) ..................................4
 1.3 CALENDAR URI (CALURI) .........................................4
 1.4 DEFAULT URIS ..................................................4
2 DISTRIBUTION......................................................4
 2.1 MANUAL TRANSFER ...............................................5
 2.2 PERSONAL DATA EXCHANGE USING A VCARD ..........................5
 2.3 VCARD SCHEMA EXTENSIONS .......................................5
  2.3.1 FBURL Property IANA Registration ...........................6
  2.3.2 CALADRURI Property IANA Registration .......................7
  2.3.3 CAPURI Property IANA Registration ......................... 8
  2.3.4 CALURI Property IANA Registration ......................... 8
 2.4 DIRECTORY LOOKUP USING THE LDAP V3 PROTOCOL .................. 9
  2.4.1 LDAP Schema Extensions .................................... 9
  2.4.2 Notation ..................................................10
  2.4.3 Object Definitions ........................................10
    2.4.3.1 calEntry ..............................................10
  2.4.4 Attribute Definitions .....................................10
    2.4.4.1 calCalURI .............................................10
    2.4.4.2 calFBURL ..............................................10
    2.4.4.3 calCAPURI .............................................11
    2.4.4.4 calCalAdrURI ..........................................11
    2.4.4.5 calOtherCalURIs .......................................11
    2.4.4.6 calOtherFBURLs ........................................11
    2.4.4.7 calOtherCAPURIs .......................................12
    2.4.4.8 calOtherCalAdrURIs ....................................12
3 IANA Considerations..............................................12
4 Security Considerations..........................................12
5 Acknowledgments..................................................13
6 Authors' Addresses...............................................13
7 Bibliography.....................................................15
8 Full Copyright Statement.........................................16

1. Calendaring and Scheduling URIs ๐Ÿ“…

This memo defines four classes of URIs. URIs are way more useful once you know what they point to, so here's a quick rundown ๐Ÿ’–.

1.1. Free/Busy URI (FBURL) โฐ

The free/busy URI is a transport independent location where a client can find out when a user is busy ๐Ÿฆ‹. Right now this URI only points to busy time data. Future revisions of this spec might add publishing of free time data too ๐Ÿ”ฎ.

If a calendaring and scheduling client (i.e., CUA) grabs data from this location over FTP or HTTP, it gets back an iCalendar object [4] containing one or more "VFREEBUSY" calendar components ๐ŸŽ€. If a MIME transport is in use, the response lives inside a "text/calendar" MIME body part, as the iCalendar specification [4] describes. Here's an example:

   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//hacksw/handcal//NONSGML v1.0//EN
   METHOD:PUBLISH
   BEGIN:VFREEBUSY
   ATTENDEE:MAILTO:jane_doe@host1.com
   DTSTART:19971013T050000Z
   DTEND:19971124T050000Z
   DTSTAMP:19970901T083000Z
   FREEBUSY:19971015T133000Z/19971015T180000Z
   FREEBUSY:19971015T190000Z/19971015T220000Z
   FBURL:http://www.host.com/calendar/busy/jdoe.ifb
   END:VFREEBUSY
   END:VCALENDAR

The amount of busy time data behind the FBURL is usually pre-determined, like one month's worth ๐Ÿ“†. As a guideline, it is recommended that the previous six weeks of busy time data get published at the location tied to the FBURL ๐ŸŒธ. If this URI points to a file resource, it is recommended that the file extension be "ifb", so it's easy to tell apart from an arbitrary iCalendar object (for example, one with the "ics" file extension) ๐Ÿ—‚๏ธ.

1.2. Calendar Access URI (CAPURI) ๐Ÿ”‘

The Calendar Access URI is a protocol independent location where a calendaring and scheduling client (i.e., CUA) can talk to a user's entire calendar ๐Ÿ’ฌ.

The semantics for using this URI as an access protocol locator haven't been defined yet. The IETF CALSCH Working Group is handling that, and it'll be covered in the "Calendar Access Protocol" specification ๐Ÿซถ.

1.3. Calendar URI (CALURI) ๐Ÿ“–

The Calendar URI is a protocol independent location where a calendaring and scheduling client (i.e. CUA) can grab a complete copy of a user's calendar โœจ. Retrieving data from this URI gets you a published "snapshot" of the user's calendar ๐Ÿ“ธ.

HTTP URI: if the URI is an HTTP URI, the content returned by a GET should be a "text/calendar" MIME body part containing one or more iCalendar objects ๐Ÿ’–.

FTP URI: if the URI is an FTP URI, the resource it points to should be a file with an "ics" file extension containing one or more iCalendar objects ๐Ÿ“.

1.4. Default URIs ๐Ÿ‘‘

Sometimes a user has more than one calendar. In that case, the user can have multiple URIs, each one pointing to a calendar or to free/busy data ๐ŸŒˆ.

To make life simpler for clients with multiple calendars, the concept of a "default" calendar is introduced ๐Ÿ’…. A "default" calendar is the one the user has marked as the calendar other users should look at when they access the user's calendar or retrieve the user's free/busy time ๐Ÿซถ.

The default calendar may actually include rolled-up information from all of the user's other calendars ๐Ÿงš. The other calendars might only exist for organizational purposes ๐Ÿ—‚๏ธ.

2. Distribution ๐Ÿ’Œ

These four URIs are super valuable pointers to calendaring and scheduling data, which other users need in order to know when to schedule meetings and stuff ๐Ÿ“…. There are a few ways users can pass these URIs along to each other, and the following section walks through how ๐Ÿฆ‹.

2.1. Manual Transfer ๐Ÿ“

The simplest way to get these URIs is for a user to share them through some out-of-band mechanism, like saying them out loud, sending them in an e-mail message, or printing them on a paper business card ๐Ÿ’ณ.

With this approach, the user gets the URIs through an out-of-band mechanism and then types them into their calendaring software by hand ๐Ÿ™ˆ.

2.2. Personal Data Exchange Using A vCard ๐Ÿ’–

A more sophisticated way to get these URIs is for users to publish vCards that contain them ๐ŸŽ€. A vCard object can be passed between users ๐Ÿ’Œ. Lots of e-mail clients let a user automatically attach a vCard to every message they send, so this is a simple, transparent way to share calendaring and scheduling URIs ๐ŸŒธ.

On the receiving end, an e-mail client with an integrated vCard database can offer a way to look up calendaring URIs for users whose vCards are stored locally ๐Ÿ”.

2.3. vCard Schema Extensions ๐Ÿงฉ

The vCard [3] specification doesn't say how to encode calendaring URIs in a vCard, so this section extends vCard and spells out how to do exactly that ๐Ÿ’….

Inside a vCard object, four new properties are defined: "CALURI", "CAPURI", "CALADRURI", and "FBURL", as defined above ๐ŸŒˆ.

Any vCard can have one or more of these properties, and each one represents a calendar or free/busy time associated with the user ๐Ÿ“….

You can mark one of these properties as the "default" by adding the "PREF" parameter โญ.

Here's a simple example of a vCard with an "FBURL" and a "CALURI" ๐Ÿ’Œ:

   BEGIN:VCARD
   VERSION:3.0
   N:Dun;Alec
   FN:Alec Dun
   ORG:Microsoft Corporation
   ADR;WORK;POSTAL;PARCEL:;;One Microsoft Way;
    Redmond;WA;98052-6399;USA
   TEL;WORK;MSG:+1-206-936-4544
   TEL;WORK;FAX:+1-206-936-7329
   EMAIL;INTERNET:user@host1.com
   CALADRURI;PREF:mailto:user@host1.com
   CALURI;PREF:http://cal.host1.com/user/cal.ics
   FBURL;PREF:http://cal.host1.com/user/fb.ifb
   CALURI:http://cal.company.com/projectA/pjtA.ics
   FBURL:http://cal.company.com/projectA/pjtAfb.ifb
   END:VCARD

2.3.1. FBURL Property IANA Registration ๐Ÿ“‹

Here's the registration form, with the fields kept exactly as written. ๐ŸŽ€

To: ietf-mime-directory@imc.org

Subject: Registration of FBURL type for text/directory MIME type vCard profile.

Type name: FBURL

Type purpose: To specify the URI for a user's busy time in a vCard object ๐Ÿฆ‹.

Type encoding: 8bit

Type value: A single URI value.

Type special notes: When there are multiple FBURL properties, the default FBURL property is marked with the PREF parameter ๐Ÿ’–. An FTP or HTTP URI points to an iCalendar object that holds a snapshot of the user's busy time data for the last six weeks ๐Ÿ“ธ. If the iCalendar object is stored as a file or document, its file type should be "ifb" ๐Ÿ—‚๏ธ.

Intended usage: Refer to section 1.1.

Type examples:

   FBURL;PREF:http://www.host1.com/busy/janedoe
   FBURL:FTP://ftp.host.com/busy/project-a.ifb

2.3.2. CALADRURI Property IANA Registration ๐Ÿ“ฌ

Next up is the CALADRURI registration, and it's giving very similar energy ๐Ÿ’….

To: ietf-mime-directory@imc.org

Subject: Registration of CALADRURI type for application/directory MIME type vCard profile.

Type name: CALADRURI

Type purpose: To specify the location where an event request should be sent for the user ๐Ÿงš.

Type encoding: 8bit

Type value: A single URI value.

Type special notes: When there are multiple CALADRURI properties, the default CALADRURI property is marked with the PREF parameter ๐ŸŒธ.

Intended usage: Refer to section 1.2.

Type examples:

   CALADRURI;PREF:mailto:janedoe@host.com

Part 1 is a wrap, but there's way more to come, so stay tuned, bestie ๐Ÿฆ‹๐Ÿ’œโœจ

2.3.3 CAPURI Property IANA Registration โœจ

Okay bestie, this one is the CAPURI registration ๐ŸŽ€ It's the template that goes to the MIME registration agent, so I'm keeping it exactly as written:

To: ietf-mime-directory@imc.org

Subject: Registration of CAPURI type for application/directory MIME
type vCard profile.

Type name: CAPURI

Type purpose: To specify a protocol independent location from which a
calendaring and scheduling client (i.e., CUA) can communicate with a
user's entire calendar.

Type encoding: 8bit

Type value: A single URI value.

Type special notes: Where multiple CAPURI properties are specified,
the default CAPURI property is indicated with the PREF parameter.

Intended usage: Refer to section 1.3.

2.3.4 CALURI Property IANA Registration ๐Ÿฆ‹

Next up is CALURI, and it's giving calendar-snapshot energy ๐Ÿ“… Same deal, here's the template verbatim:

To: ietf-mime-directory@imc.org

Subject: Registration of CALURI type for text/directory MIME type
vCard profile.

Type name: CALURI

Type purpose: To specify the URI for a user's calendar in a vCard
object.

Type encoding: 8bit

Type value type: A single URI value.

Type special notes: Where multiple CALURI properties are specified,
the default CALURI property is indicated with the PREF parameter. The
property should contain a URI pointing to an iCalendar object
associated with a snapshot of the user's calendar store. If the
iCalendar object is represented as a file or document, it's file type
should be "ics".

Intended usage: Refer to section 1.4.

Type examples:

   CALURI;PREF:http://cal.host1.com/calA
   CALURI:ftp://ftp.host1.com/calA.ics

2.4 Directory Lookup Using The LDAP v3 Protocol ๐Ÿ“‚

Okay so there's another way to grab these URIs, and it's literally just looking them up in a directory with LDAP [1] ๐Ÿงš No drama.

If you can find a user's URIs through directory lookup (you're searching for one of the LDAP schema extensions down below), they should, in general, be considered "more up-to-date" than the URIs sitting in any vCards stored locally ๐Ÿ’… Directory data is the fresh tea โ˜•

2.4.1 LDAP Schema Extensions ๐ŸŒธ

To encode the calendaring URIs in the directory, these are the things that get defined:

  • One object class:
    • calEntry
  • Eight attributes:
    • calCalURI
    • calFBURL
    • calCAPURI
    • calCalAdrURI
    • calOtherCalURIs
    • calOtherFBURLs
    • calOtherCAPURIs
    • calOtherCalAdrURIs

So, the vibes for each one: calCalURI holds the URI to a snapshot of the user's entire default calendar. calFBURL holds the URI to the user's default busy time data. calCAPURI holds a URI you can use to talk to the user's calendar. calCalAdrURI holds a URI pointing to where event requests should be sent for that user ๐Ÿ“ฌ

The multi-valued ones are the "other" crew ๐Ÿ‘ฏโ€โ™€๏ธ calOtherCalURIs has URIs to other calendar snapshots the user might have. calOtherFBURLs has URIs to other free/busy data. calOtherCAPURIs has URIs to other calendars the user might have. calOtherCalAdrURIs has URIs to other places the user might want event requests sent to.

There's no predetermined order to the values in either multi-valued property ๐ŸŽฒ Any order is valid, no cap.

2.4.2 Notation ๐Ÿ“

The notation in this memo is the same as the notation used in [2].

2.4.3 Object Definitions ๐Ÿง

2.4.3.1 calEntry ๐Ÿ“

The Calendar Entry is a class derived from "TOP" [2], and it's the one that holds the four calendaring attributes (plus the rest of the crew in its MAY list) ๐Ÿ’œ

(1.2.840.113556.1.5.87
  NAME 'calEntry'
  TOP
  AUXILIARY
  MAY (calCalURI calFBURL calOtherCalURIs calOtherFBURLs calCAPURI
  calOtherCAPURLs)
)

2.4.4 Attribute Definitions ๐ŸŽ€

2.4.4.1 calCalURI โœจ

(1.2.840.113556.1.4.478
  NAME 'calCalURI'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  USAGE userApplications
)

2.4.4.2 calFBURL โœจ

(1.2.840.113556.1.4.479
  NAME 'calFBURL'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  USAGE userApplications
)

2.4.4.3 calCAPURI โœจ

(1.2.840.113556.1.4.480
  NAME 'calCAPURI'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  USAGE userApplications
)

2.4.4.4 calCalAdrURI โœจ

(1.2.840.113556.1.4.481
  NAME 'calCalAdrURI'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  USAGE userApplications
)

2.4.4.5 calOtherCalURIs โœจ

(1.2.840.113556.1.4.482
  NAME 'calOtherCalURIs'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  MULTI-VALUE
  USAGE userApplications
)

2.4.4.6 calOtherFBURLs โœจ

(1.2.840.113556.1.4.483
  NAME 'calOtherFBURLs'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  MULTI-VALUE
  USAGE userApplications
)

2.4.4.7 calOtherCAPURIs โœจ

(1.2.840.113556.1.4.484
  NAME 'calOtherCAPURIs'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  MULTI-VALUE
  USAGE userApplications
)

2.4.4.8 calOtherCalAdrURIs โœจ

(1.2.840.113556.1.4.485
  NAME 'calOtherCalAdrURIs'
  EQUALITY caseIgnoreMatch
  SUBSTRING caseIgnoreMatch
  SYNTAX 'IA5String'
  MULTI-VALUE
  USAGE userApplications
)

3. IANA Considerations ๐ŸŒˆ

This memo defines IANA registered extensions to the attributes defined by LDAP [1] and vCard [3].

IANA registration proposals for vCard are to be emailed to the registration agent for the "text/directory" MIME content-type, <MAILTO: ietf-mime-directory@imc.org>, using the format defined in [3] ๐Ÿ“ง

4. Security Considerations ๐Ÿšจ

Okay, this section is serious business, so please read it carefully bestie ๐Ÿ™ˆ

Standard vCard and LDAP security rules and support apply for the extensions described in this document, and there are no special security issues for these extensions.

Please note, though, that LDAP servers may permit anonymous clients to refresh entries which they did not create. Servers are also permitted to control a refresh access to an entry by requiring clients to bind before issuing a RefreshRequest. This will have implications on the server performance and scalability.

Please also note, though, that vCard objects may have been created by an entity other than that represented by the vCard. Recipients should be certain of the source that generated the vCard.

Also, care should be taken in making use of information obtained from directory servers that has been supplied by client, as it may now be out of date. In many networks, for example, IP addresses are automatically assigned when a host connects to the network, and may be reassigned if that host later disconnects. An IP address obtained from the directory may no longer be assigned to the host that placed the address in the directory. This issue is not specific to LDAP or dynamic directories.

5. Acknowledgments ๐Ÿซถ

The authors wish to acknowledge the work of Alec Dun, who acted as an author for the early drafts of this memo. In addition, this document received input from the various participants in the IETF CALSCH Working Group discussions.

6. Authors' Addresses ๐Ÿ’Œ

The following address information is provided in a vCard v3.0 [3], Electronic Business Card, format.

BEGIN:VCARD
VERSION:3.0
N:Small;Tony
FN:Tony Small
ORG:XpertSite.Com
ADR;TYPE=WORK,POSTAL,PARCEL:;;4700 42nd Ave. SW, Suite 440;
 Seattle;WA;98116;USA
TEL;TYPE=WORK,MSG:+1-206-937-9972
TEL;TYPE=WORK,FAX:+1-206-936-7329
EMAIL;TYPE=INTERNET:tony@xpertsite.com
CALADRURI:MAILTO:tony@xpertsite.com
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:Hennessy;Denis
FN:Denis Hennessy
ORG:ISOCOR
ADR;TYPE=WORK,POSTAL,PARCEL:;;42-47 Lower Mount St;
 Dublin 2;Ireland
TEL;TYPE=WORK,MSG:+353-1-676-0366
TEL;TYPE=WORK,FAX:+353-1-676-0856
EMAIL;TYPE=INTERNET:denis.hennessy@isocor.com
CALADRURI:MAILTO:denis.hennessy@isocor.com
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:Dawson;Frank
FN:Frank Dawson
ORG:Lotus Development Corporation
ADR;TYPE=WORK,POSTAL,PARCEL:;;6544 Battleford Drive;
 Raleigh;NC;27613-3502;USA
TEL;TYPE=WORK,PREF:+1-617-693-8728
TEL;TYPE=WORK,MSG:+1-919-676-9515
TEL;TYPE=FAX:+1-617-693-8728
EMAIL;TYPE=INTERNET,PREF:Frank_Dawson@Lotus.com
EMAIL;TYPE=INTERNET:fdawson@earthlink.net
CALADRURI;TYPE=PREF:MAILTO:Frank_Dawson@Lotus.com
CALADRURI:MAILTO:fdawson@earthlink.net
URL:http://home.earthlink.net/~fdawson
END:VCARD

This memo is a result of the work of the Internet Engineering Task Force Calendaring and scheduling Working Group. The chairman of that working group is:

BEGIN:VCARD
VERSION:3.0
N:Egen;Pat
FN:Pat Egen
ORG:Engan Consulting
ADR;TYPE=WORK:;;803 Creek Overlook;Chattanooga;TN;37415;USA
TEL;TYPE=WORK,VOICE:423.875.2652
TEL;TYPE=WORK,FAX:423.875.2017
EMAIL:pregen@egenconsulting.com
URL:http://www.egenconsulting.com
CALADRURI:MAILTO:pregen@egenconsulting.com
END:VCARD

7. Bibliography ๐Ÿ“š

[1] Wahl, M., Howes, T. and S. Kille, "Lightweight Directory Access Protocol (v3)", RFC 2251, December 1997.

[2] Wahl, M., Coulbeck, A., Howes, T. and S. Kille, "Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions", RFC 2252, December 1997.

[3] Dawson, F. and T. Howes, "vCard MIME Directory Profile", RFC 2426, September 1998.

[4] Dawson, F. and D. Stenerson, "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", RFC 2445, November 1997.

[5] Dawson, F. and S. Mansour, "iCalendar Message-Based Interopability Protocal (iMIP)", RFC 2447, November 1997.


Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement ๐ŸŒท

Funding for the RFC Editor function is currently provided by the Internet Society ๐Ÿ’–

๐Ÿ“ฆ where this page comes from