The Google Calendar Connector Sync Service provides data flow from Google Calendar. The Sync Service periodically polls Google Calendar for free/busy data and appointment data, which includes the name, place, and attendees of events.
This document provides detailed instructions for installing and configuring the Google Calendar Connector Sync Service. Contents
# [#1_About_This_Document About This Document] # [#Audience Audience] # [#For_More_Information For More Information] # [#2_Before_You_Install Before You Install] # [#Prerequisites Prerequisites] # [#Google_Calendar_Account_Setup Google Calendar Account Setup] # [#Exchange_User_Mapping Exchange User Mapping] # [#Dedicated_Windows_Service_Accounts Dedicated Windows Service Accounts] # [#Installation_Checklist Installation Checklist] # [#3_Installing_the_Google_Calendar_Connector_Sync_Service Installing the Google Calendar Connector Sync Service] # [#MSI_Installation MSI Installation] # [#Multiple_Sync_Service_Instances Multiple Sync Service Instances] # [#4_Configuring_the_Google_Calendar_Connector_Sync_Service Configuring the Google Calendar Connector Sync Service] # [#Editing_the_Configuration_File Editing the Configuration File] # [#Encrypting_the_Configuration_File Encrypting the Configuration File] # [#HTTP_Proxy_Configuration_Optional HTTP Proxy Configuration Optional] # [#5_Installation_Success Installation Success] # [#Start_the_Google_Calendar_Connector_Sync_Service Start the Google Calendar Connector Sync Service] # [#6_Testing_and_Troubleshooting Testing and Troubleshooting] # [#Running_Diagnostics_Tests Running Diagnostics Tests] # [#Logging_Configuration Logging Configuration] # [#7_Known_Issues Known Issues] # [#8_Copyright_Notices Copyright Notices]
This section describes the audience for this document, the organization of the material, and some additional sources of information.
The Google Calendar Connector Kit is a set of server-installed tools that require knowledgeable installation and configuration, tailored to the particulars of a customer's environment. These tools are only the *technological part* of the integration experience.
Before proceeding to install the Google Calendar Connector Sync Service, please read and understand the important *Security Considerations* outlined in the Overview Guide.
This document is for systems administrators tasked with setting up and managing the Google Calendar Connector Sync Service. Users of this documentation need to be familiar with Google Calendar administration, Microsoft Exchange Server and Windows network administration.
It is important to note that this tool only represents part of a solution for free/busy interoperability.
This document is part of the Google Calendar Connector document set, which includes the following related documents:
* [http://code.google.com/p/google-calendar-connectors/wiki/Overview Overview Guide]. Describes the components, process flow, and security considerations for the connector.
* [http://code.google.com/p/google-calendar-connectors/wiki/WebServiceGuide Web Service Installation and Configuration Guide]. Provides instructions for installing and configuring the Web Service, which provides Exchange free/busy data flow to Google Calendar.
For background or general information on Google Apps, see the Google Apps for Administrators Help Center.
For background or general information on Windows administration, see Microsoft TechNet.
Before you install and configure the connector, make sure your Windows environment meets the prerequisites, and that your Google Calendar and Exchange accounts are prepared for sharing data.
* A Google Apps Premier or Education Edition domain
To support the Sync Service, your Windows environment must meet these prerequisites: * Microsoft Windows Server 2003 * Internet Information Services (IIS) 6.0 * Microsoft Exchange Server 2003 SP2 or Microsoft Exchange Server 2007 SP1 or SP2 * Exchange 2003 Native Mode or 2007/2003 Mix Mode Environment or 2007 Native mode with addition of public folders * ASP.NET 2.0 runtime
Create a dedicated Google Apps account and perform an initial login. The user name and password are required later when you populate the !GoogleApps.!AdminUser.Login and Password parameters in the configuration process. NOTE: This account does NOT need admin access to the Google Apps domain. If you use a non-admin account make sure you configure the SyncService.FreeBusy.DetailLevel to "BASIC" as the sync will fail for users who only share free/busy data if you don't use the "BASIC" feed option. Before this account can be used with the Sync service you must login to Google Apps account and accept the standard terms of service agreement for the user account.
If you are using a server OS using IIS 7 you will need to configure the /public website to accept double escaped content.
This needs to be performed on the server which is configured as the Free/Busy server. This server is by default defined by the setting Exchange.!ServerName or Exchange.!FreeBusyServerName value.
For details on how to allow double escaped content review this Microsoft Support KB article: http://support.microsoft.com/kb/942076/
Sync Service uses public folders to store free/busy information of Google Calendar users in Exchange. If Exchange 2007 doesn't already have public folders added and attached to mailbox databases, they should be added.
Run the following cmdlet in Exchange PowerShell to configure free/busy for Google Calendar users
* Indicate to Exchange 2007 that the free/busy information for all Google Calendar users should be queried from public folders {{{ Add-AvailabilityAddressSpace -ForestName domain.com -AccessMethod PublicFolder Example: Add-AvailabilityAddressSpace -ForestName pilot.domain.com -AccessMethod PublicFolder }}} If the free/busy information of other common calendar resources (like room resources) on Google Calendar need be provisioned on Exchange, the above cmdlet should be run with the _ForestName_ value set to the SMTP domain of the resource's email. Typically, this value would be _resource.calendar.google.com_. An additional Sync service instance also should be configured to publish these resources' free/busy on Exchange (see *Multiple Sync Service Instances* section below for details on how to configure multiple instances of Sync service).
NOTE: If there is no default public folder database in Exchange 2007 follow these instructions for how to create the public folder store: http://technet.microsoft.com/en-us/library/bb123687(EXCHG.80).aspx
Each Google Calendar user must have a corresponding mail-enabled Active Directory user, contact object or mailbox-enabled (Exchange 2003 only) user object.
See the Overview Guide for more information.
For instructions on how to create a mail-enabled users, see the Microsoft !TechNet article, How to Create a New Mail-Enabled User.
For instructions on how to create an Active Directory contact, see the Microsoft !TechNet article, How to Create a Contact in Active Directory.
The Sync Service requires dedicated Active Directory role accounts for performing LDAP queries against Active Directory and performing free/busy reads and writes against Exchange.
Create these service accounts as described in this section, and reference the user names and passwords when configuring the Sync Service.
The required service accounts are itemized below:
Create a dedicated user for performing Active Directory LDAP queries. The user name and password are required later when you populate the `ActiveDirectory.DomainUser.Login` and `Password` parameters in the Sync Service configuration file.
Create a dedicated user for the Sync Service to read and write free/busy against Exchange. The user name and password are required later when you populate `Exchange.GCalQueryAdmin.Login` and `Password` parameters in the Sync Service configuration file.
The *Exchange Query Admin* user needs permissions to be able to read and write to the free/busy Public folder store. To configure the permissions for the query admin user:
NOTE: In the past "Receive As" permission was required for a GCC feature that is now depreciated, and thus no longer necessary.
- Exchange 2003*
# Open Exchange System Manager # Browse to Folders | Public Folders # Right Click and select show View System Folders # Expand SCHEDULE+ FREE BUSY # Right Click on the EX:/o=First Organization/ou=First Administrative Group/ (This name may vary based on your setup) # Select the Permissions tab # Select Client Permissions # Click Add # Select the query admin user account you created # Select Roles: Owner # Click Ok # Click OK
- Exchange 2007*
The Exchange Information store caches permissions data. To flush the cache immediately after setting new permissions, dismount and remount the appropriate information store or restart the Information Store service. Otherwise the changes will not take effect until Exchange rebuilds the permissions cache.
To dismount and remount the public folder store:
# Open Exchange System Manager # In tree view, expand *Administrative Groups*, _{Your Administrative Group}_, *Servers*, _{Your local Exchange server}_, and _{Your Storage Group}_. # Right click on the *Public Folder Store*, select *Dismount Store* and click *Yes* to continue. # Right click on the *Public Folder Store*, select *Mount Store* and click *Yes* at the success message dialog.
To restart the service Microsoft Exchange Information Store:
# Open the *services.msc* # In right pane view, locate *Microsoft Exchange Information Store*, right click and select *Restart*
|| *Task* || *Completed?* || *Notes* || || Verify that Windows environment prerequisites are met || || || || Create contact objects for Google Apps users in Exchange. || || || ||Create dedicated Google Apps Sync Service user || ||User name and password: || ||Create dedicated Active Directory user|| ||User name and password: || ||Create dedicated Exchange Admin user|| ||User name and password: || ||Set Exchange permissions for Query and Admin users || || ||
The installer for the Sync Service is provided in the installation package file _!GoogleCalendarConnectorSyncService.msi_.
To install the Sync Service:
# Locate and open the file _!GoogleCalendarConnectorSyncService.msi_. # In the welcome dialog, click *Next*. # In the *Select Installation Folder* dialog, select the desired folder or accept the default value. # In the *Select Installation Folder* dialog use the radio buttons at the bottom of the dialog to determine whether to install the service only for yourself, or for all users, and click *Next*. # Click *Next* to begin the installation, and then Close when the dialog displays the message "Installation Complete".
If you need to sync more than one domain with the Google Calendar Sync Service you can use the following instructions for setting up multiple instances of the Google Calendar Sync Service on a single server.
# Install the Google Calendar Sync Service # Copy the default installation of the Google Calendar Sync Service to a new folder, for example "C:\Program Files\Google\Google Calendar Connector Sync Service - domain.com" # Run the sc command to create a new service entry for the new path and exe _NOTE: There is a single space after binpath= and start= _ {{{ %WINDIR%\System32\sc.exe create "Google Calendar Sync Service - domain.com" binpath= "C:\Program Files\Google\Google Calendar Connector Sync Service - domain.com\GoogleCalendarSyncService.exe" start= auto
}}}
# Create new logging folder paths {{{ mkdir C:\google\logs\Domain.com mkdir C:\google\data\Domain.com
}}}
# Configure new logging paths: Update the new config file for the new domain with the following in the !GoogleCalendarSyncService.exe.config adding the domain.com directory to each logging path {{{ <add key="GoogleApps.GCal.LogDirectory" value="C:\google\logs\domain.com\"/> <add key="SyncService.XmlStorageDirectory" value="C:\Google\data\domain.com\" /> <file value="C:\Google\logs\domain.com\SyncService.log" /> initializeData="c:\google\logs\domain.com\SyncNetTrace.log"
}}}
# Update the specific Google Apps Domain Values
Configuration settings for the Sync Service are stored in the configuration file _GoogleGCalExhangeSync.Service.exe.config_. You must edit this file and enter values appropriate to your setup.
The configuration file _GoogleGCalExhangeSync.Service.exe.config_ is located in the installation directory for the sync service, by default "_C:\Program Files\Google\Google Calendar Connector Sync Service_". The "appSettings" section of _GoogleGCalExhangeSync.Service.exe.config_ contains configuration keys for setting up the Sync Service.
- Note*: If you have already set up the Google Calendar Connector Web Service in your environment, the Sync Service should use most the same settings for the following subsections of appSettings:
* Active Directory * Exchange * Google Apps
|| Configuration Key || Description || Default Value || || !ActiveDirectory.!DomainController || Specify the fully qualified domain name of a domain controller for your Windows Active Directory domain. This server is used for LDAP queries to retrieve user login and Exchange user attributes. For queries directly against a domain controller, prefix the machine name with LDAP://. For queries against the Global Catalog, prefix the machine name with GC://. For example: `<add key="ActiveDirectory.DomainController" value="LDAP://HQAD1.corp.acme.com"></add>` || || || Exchange.!ServerName || The full qualified domain name of the Exchange server that hosts a copy of the Public Free/Busy Information Store. For example: `<add key="Exchange.ServerName" value="HQEXCH1.corp.acme.com"></add>` || || || !ActiveDirectory.!DomainUser.Login || The userPrincipalName for the user account used by the sync service to perform Active Directory lookups. [#Dedicated_Windows_Service_Accounts] for more information on this user account. For example: `<add key="ActiveDirectory.DomainUser.Login" value="ADDomainUser@corp.acme.com"></add>` || || || !ActiveDirectory.!DomainUser.Password || The password for the user account used by the sync service to perform Active Directory lookups. || || || Exchange.!ServerName || The full qualified domain name of the Exchange server that hosts a copy of the Public Free/Busy Information Store. For example: `<add key="Exchange.ServerName" value="HQEXCH1.corp.acme.com"></add>` || || || Exchange.GCalQueryAdmin.Login || The userPrincipalName of the user account used when writing data to the public folder free/busy store. See [#Dedicated_Windows_Service_Accounts] for more information on this user account. For example: `<add key="Exchange.GCalQueryAdmin" value="GCalQueryAdmin@corp.acme.com"></add>`|| || || Exchange.GCalQueryAdmin.Password || The password for the user account used to write free/busy data to the public folder store. || || || Exchange.MailboxURITrailingPath || This key changes the trailing URI when accessing an Exchange user's calendar. Typical URL for calendar web access looks like _http://[Exchange.ServerName]/exchange/[user's]/calendar/. However, when running localized versions of Exchange the trailing URI _calendar_ is specific to the localized language and the value must be customized to match the localized string. (Ex. _Calend%C3%A1rio_ on a Portuguese Exchange Server). Value of this key should be given the value of the trailing URI string (i.e. _Calend%C3%A1rio_). This key may need modification in only rare cases. || calendar || || Exchange.!FreeBusyServerName || This setting allows the definition of a specific Exchange server to use when reading and writing free/busy data. By default the value Exchange.!ServerName is used. Use this value if the default Exchange server does not host a replica of the Free/Busy Information Store. To enable this setting remove comments and define the fully qualified domain name of the server to use. For Example: `<<add key="Exchange.FreeBusyServerName" value="http://HQEXCH2.corp.acme.com"></add>` || DISABLED || || !GoogleApps.!DomainName || The domain name used by Google Apps. For example: `<add key="GoogleApps.DomainName" value="acme.com"></add>` || || || !GoogleApps.!AdminUser.Login || The Google Apps user account name used for querying Google Calendar. This account must be a dedicated account in Google Apps setup for use with the Google Calendar Connector. This account does NOT need admin access to the Google Apps domain. For example: `<add key="GoogleApps.AdminUser.Login" value="gcc_syncsvc"></add>` NOTE: If you use a non-admin account make sure you configure the SyncService.FreeBusy.DetailLevel to "BASIC" as the sync will fail for users who only share free/busy data if you don't use the "BASIC" feed option. || || || !GoogleApps.!AdminUser.Password || The password for the Google user account used for querying Google Apps and Google Calendar. || || || !GoogleApps.GCal.!EnableHttpCompression || This setting determines whether or not to enable GZip compression with the GDATA API calls to Google Apps. The default setting is true for optimum performance. `<add key="GoogleApps.GCal.EnableHttpCompression" value="true"></add>` || true || || !GoogleApps.GCal.!LogDirectory || This setting defines the directory to write debug output for the GDATA API feed for each user account queried from Google Apps. An individual file is written out per user request. The output contains the calendar feed data for the specific user. If no value is defined no output is written. For Example: `<add key="GoogleApps.GCal.LogDirectory" value="C:\Google\logs"></add>` || DISABLED || || !GoogleApps.GCal.!DomainMapping || This setting allows the definition of SMTP domain name mappings. Use this setting if your Exchange Primary SMTP address is different from the Google Apps SMTP domain name. When enabled the connector will properly map the external Google Apps SMTP domain name to the internal Exchange SMTP domain name. This setting by default is commented out in the config file. To enable this setting remove comments and define the External and Internal SMTP domain names. For example: `<add key="GoogleApps.GCal.DomainMapping" value="acme.com,exchange.acme.com"></add>` To configure multiple domain mappings use ";" as the delimiter between the domain mapping values. For Example: `<add key="GoogleApps.GCal.DomainMapping value=acme.com,exchange.acme.com;company.com,exchange.company.com"></add>` NOTE: This value is case sensitive. If the user's SMTP domain does not match the case it will not match the mapping value. || DISABLED || || Exchange.!DefaultDomain || This setting prevents Exchange !WebDav redirects to servers outside of the DNS domain defined. Enable this feature if the connector should not redirect Exchange server outside of this DNS domain. For example: `<add key="Exchange.DefaultDomain" value=".corp.acme.com"></add>` || DISABLED || || !SyncService.!ErrorCountThreshold || This setting specifies how many errors the service allows before aborting the current synchronization run. If the value is reached during a synchronization run it halts. Once the !SyncService.!RefreshTimeInMinutes has expired the counter is reset to 0 and a synchronization starts again. `<add key="SyncService.ErrorCountThreshold" value="20"></add>` || 20 || || !SyncService.LDAPUserFilter || This setting allows the option to define an LDAP filer which determines which users or contacts are included in the synchronizing of data from Google Calendar to Exchange. For example to include all members of an Active Directory Group: `<add key="SyncService.LDAPUserFilter" value="(memberof=CN=GCAL_Users,CN=Users,DC=corp,DC=acme,DC=com)"></add>` _NOTE: If left blank, all users in Active Directory are included in the sync process._ || || || !SyncService.!RefreshTimeInMinutes || This setting specifies the interval in minutes to sleep between each completed synchronization before starting again. `<add key="SyncService.RefreshTimeInMinutes" value="15"></add>` || 15 || || !SyncService.!ThreadCount || This setting specifies the number of threads to create when performing a synchronization from Google Calendar in to Exchange. The more threads the fast the sync will complete. NOTE: The more threads the more system and network resources the sync service will utilize. `<add key="SyncService.ThreadCount" value="10"></add>` || 1 || || !SyncService.!XmlStorageDirectory || This setting specifies where the service stores data cached as XML documents. _NOTE: The service needs write access to this directory._ `<add key="SyncService.XmlStorageDirectory" value="C:\Google\data"></add>` || C:\Google\data\ || || !SyncService.!DirectorySearch.!TimeoutInSeconds || This setting specifies the LDAP query timeout for Active Directory queries, in seconds. || 300 || || Configuration.!EncryptOnNextRun || If set to “true”, the configuration file is automatically encrypted the next time the application runs. See [#Encrypting_the_Configuration_File] for more information. || false || || !SyncService.!FreeBusy.!DetailLevel || If set to "Full", enables distinguishing between tentative and busy in the Free/Busy lookups. Setting it to "Basic" treats both tentative and busy as busy. || Full || || !SyncService.!PlaceHolderMessage || This setting allows for customization of the subject text placed in each calendar placeholder appointment when running the Sync service !SyncService.!FreeBusy.Writer in Appointment mode. For example: `<add key="SyncService.PlaceHolderMessage" value="GCal Free/Busy Placeholder"></add>` _NOTE: This property only applies to only new placeholder appointments being created. It will no go back and rewrite existing placeholder values._ || GCal Free/Busy Placeholder || || !SyncService.!FreeBusy.!DetailLevel || This setting defines the gdata feed type to use when retrieving free/busy data from Google Apps. The setting has two values Basic or Full. The basic feed only contains free and busy blocks. This means a meeting in GCal marked as "Maybe" will display as "Busy" when viewing the free/busy data. The full feed contains much more detail and includes the user's meeting response. Using this feed provides more verbose detail and reflects the free/busy status more accurately. If the value is set to full a meeting in GCal marked as "Maybe" will be displayed as "Tentative when viewing the free/busy data. For Example: `<add key="SyncService.FreeBusy.DetailLevel" value="Full"></add>`|| Full ||
To edit the configuration file:
# Using your preferred XML or text editor, open _GoogleGCalExhangeSync.Service.exe.config_. The default location is C:\Program Files\Google\Google Calendar Connector Sync Service\. # Scroll to the appSettings section and enter appropriate values for each of the required values shown in the table above. # Save the file. # Save or copy a backup copy of the file to a secure location.
Because some configuration keys contain user names and passwords in plain text, it is recommended that you encrypt these configuration parameters. To enable encryption, set the value of the `Config.EncryptOnNextRun` key to _true_. The next time the sync service starts, the _appSettings_ keys will be automatically encrypted. This encryption method will encrypt the entire appSettings node of the configuration file, rendering it unreadable. Once encrypted, the settings are no longer in plain text on the file system. However, settings can still be changed through the IIS Manager.
The Sync Service can optionally be configured to work with an HTTP proxy. This configuration may be required if all out-bound communication is routed through a proxy. Configuring the HTTP proxy parameters in _GoogleGCalExhangeSync.Service.exe.config_ would instruct the Sync Service to properly forward its communication through such a proxy.
Microsoft Support includes an overview of the same process and configuration in the following Knowledge Base article: http://support.microsoft.com/kb/307220.
The table below outlines the configuration parameters located under the `<system.net.defaultproxy></system.net.defaultproxy>` node of _GoogleGCalExhangeSync.Service.exe.config_: || * Configuration Key * || * Description * || Default Value || || bypasslist.address || Allows the Sync Service to bypass the proxy for additional, non-local addresses. As per Microsoft's instructions, this field can contain a host name, or a regular expression. || || || proxy.usesystemdefault || Instructs the .NET client to either use the default system profile for access, or to use a custom proxy defined in `proxy.proxyaddress`. |To override the system default and configure a custom web proxy for the Sync Service, this variable should be `FALSE` || True || || proxy.proxyaddress || The URL:PORT pair for your proxy server. For example: `http://proxyserver.internal.yourdomain.com:3128` || || || proxy.bypassonlocal || Allows the Sync Service to bypass the proxy for local addresses containing a ".". || True ||
_*Important Note: Please carefully consider whether your Microsoft Exchange server communication should be sent through a custom proxy. Including Microsoft Exchange servers in a custom proxy scheme could result in decreased performance and certain types of Windows authentication may fail*_.
# Open the Windows Services Management console. # Select the "Google Calendar Sync Service" and right-click for properties. # Click "Start" if the service is not already started. # Browse to log file path as defined by !GoogleApps.GCal.!LogDirectory (i.e. C:\google\logs) # Review the log file !SyncService.log and verify success messages
The Sync Service logs debugging information to a text log file, which is configurable through the log4net.config node in _GoogleGCalExhangeSync.Service.exe.config_. For more information, see [#Logging_Configuration].
Monitoring the debug output in the log files is the best way to troubleshoot issues with the sync service. It is recommended to use the freeware log file utility Baretail to monitor the file in real time.
Important Note: Please review [#Logging_Configuration] before beginning to test any of the functionality of the service.
The Google Calendar Connector Web Service contains a diagnostics page that can help diagnose issues. *Diagnostics.aspx*, located in the root of the Web Service virtual directory, contains the following diagnostic tests relevant to the Sync Service:
* *Verify free/busy data can be found in Google Calendar* This test attempts to retrieve free/busy information for a specific Google Calendar user. If the Sync Service and Google Apps are configured correctly, free/busy data should be returned.
* *Verify free/busy can be written to Exchange* The Sync Service is by default configured to write free/busy data directly into the Exchange public free/busy store. This test attempts to perform a free/busy write to the Exchange public store for the specified user.
To run diagnostic tests:
# Use a web browser to navigate to `/Diagnostics.aspx` in the root folder of the Web Service's virtual directory. # Select a test and enter any optional details in its text area. # Click "*Verify*" to run the diagnostic and view its results.
The Google Calendar Connector Sync Service includes a configuration node named _<log4net></log4net>_ in _GoogleGCalExchangeSync.Service.exe.config_ which controls the logging behavior of the Sync Service.
To use logging to troubleshoot Sync Service issues:
To change where the log file is stored, edit the node path _configuration/log4net/appender/file_ and change the value attribute of the file node to the new location. Include the file name in the value attribute. _NOTE: The SYSTEM account needs "*Modify*" access to the file system path_.
There are four logging levels, with DEBUG providing the most output and ERROR only logging severe events:
* DEBUG * INFO * WARN * ERROR
The Sync Service has many potential logging points for the DEBUG and ERROR levels. When logging is set to these levels, the size of the log file may grow very rapidly.
To set the Sync Service logging to a certain level, edit the node path `configuration/log4net/root/level` and change the value attribute to one of the four levels listed. Lower severity levels are inclusive of higher levels. For example if the Sync Service is set to INFO, it also logs WARN and ERROR but not DEBUG messages.
Verify that the following log file permissions have been set up properly:
In _GoogleGCalExchangeSync.Service.exe.config\appSettings\_:
* *`SYSTEM`* should have "*MODIFY*" privileges to the `GoogleApps.GCal.LogDirectory` directory. * *`SYSTEM`* should have "*MODIFY*" privileges to the `SyncService.XmlStorageDirectory` directory. * *`SYSTEM`* should have "*MODIFY*" privileges to the install directory or the file _GoogleGCalExchangeSync.Service.exe.config_.
In `GoogleGCalExchangeSync.Service.exe.config\configuration\log4net\appender\`:
* `SYSTEM` should have "MODIFY" privileges to path defined configuration `\log4net\appender\file`.
To grant "Modify" access to a directory do the following:
# Open Windows Explorer. # Navigate to the directory root folder (i.e. C:\Google\Data). # Right click on the folder and select *Properties*. # Select the *Security* tab and click *Add*, type SYSTEM and click *OK*. # With the *`SYSTEM`* user highlighted, check *Allow* for *Modify* privileges.
* See <a href="http://code.google.com/p/google-calendar-connectors/wiki" target="_blank">Google Code Project</a> for any known issues.
Library and license attributions are provided to conform with the Apache License, Version 2.0. A copy of the Apache License, Version 2.0 can be found here. The following licenses and libraries are used in the Google Calendar Connector Sync Service:
Google Data (GData) API .NET Client Library and its dependencies licensed under the *Apache License, Version 2.0.* (project, license) Apache log4net licensed under the *Apache License, Version 2.0*. (project, license) tz4net v3.0.2.0 licensed under the *GNU LGPL V2*. (project, license)
Portions Copyright (c) 2002 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright (c) 2000-2002 Philip A. Craig
_Google, Google Calendar, Google Calendar Connector, Google Calendar Connector Web Service, Google Calendar Connector Sync Service_ are trademarks of Google, Inc. All other company and product names may be trademarks of the respective companies with which they are associated.