August: A Secure Distributed Calendar Program

In August, each user has a calendar and can specify a policy. The policy determines who is allowed to view each part of the user's calendar and who is allowed to add an activity of a certain kind at a certain time. In effect, August is a simple distributed database, where the data is in a special format used for scheduling information.

Each August user declares different roles or groups (e.g., friends, family members, colleagues, etc.) and defines the members of these roles. Users may use delegation in defining role members. For example, a user may specify that "my family members' friends are also friends." This adds many users to a rule, using a single policy statement.

Each calendar consists of activities. Each activity has a category, a time period, an importance level, and a creator, in addition to other information about the specific activity. A user can define calendar categories and the time periods in which activity of each category can be scheduled. The time periods need not be mutually exclusive - a user could specify that either work or meetings may be scheduled between 1PM and 4PM.

A user can assign read and write permissions to roles. A read permission is parameterized by a category. A write permission is parameterized by a category and an importance level, which limits the maximum important level that someone who possesses this permission can schedule. An activity may override an existing one provided that the new activity's importance level is at least two levels higher than the existing activity.

August can be used as a single-user calendar program or a distributed calendar program for a group of users. It is written in Java using Swing and RMI.

August needs JDK (or JRE) 1.3 (or higher) to run.

  1. Download JDK or JRE 1.3 or higher from http://java.sun.com/j2se and then install it.
  2. Download August05.zip and unzip the file.
  3. Change to the August05 directory just created.

If you are running Windows:

  1. To use this as a single-user calendar, execute  runlocal.bat
  2. To run a server for the distributed calendar, first execute runrmi.bat, then execute runhost.bat
  3. To run a client for the distributed calendar, execute  runclient.bat.  

If you are running Unix:

  1. To use this as a single-user calendar, execute  ./runlocal.sh
  2. To run a server for the distributed calendar, first execute ./runrmi.sh, then execute ./runhost.sh
  3. To run a client for the distributed calendar, execute  ./runclient.sh. 

When a client starts, the user needs to enter the host address during the registration or login process.  The host address could be empty if the server is on the same computer.  To use a server on another computer, the host address should have the form "//hostname.domainname".

When the server first starts, it automatically populates with users from Sopranos, including Tony, Carmela, Jennifer Melfi, Livia, Junior, Chris Moltisanti, Meadow, Anthony Jr., Paulie Walnuts, and Jackie Aprile.  For each user, the password is the same as the user name. (Not so secure, obviously.)

Please send any comments or questions about August or these instructions to Ninghui Li.