6The OpenChange Project aims to provide a portable Open Source
7implementation of Microsoft Exchange Server and Exchange
8protocols. Exchange is a groupware server designed to work with
9Microsoft Outlook, and providing features such as a messaging server,
10shared calendars, contact databases, public folders, notes and tasks.
12The OpenChange project has three goals:
13* To provide a library for interoperability with Exchange protocols, and
14to assist implementers to use this to create groupware that
15interoperates with both Exchange and other OpenChange-based software.
17* To provide an alternative to Microsoft Exchange Server which uses
18native Exchange protocols and provides exactly equivalent
19functionality when viewed from Microsoft Outlook clients.
21* To develop a body of knowledge about the most popular groupware
22protocols in use commercially today in order to promote development of
23a documented and unencumbered standard, with all the benefits that
30There are two sources of documentation - text files in the doc/
31directory, and API documentation generated from the source files using
32doxygen. You can create the API documentation yourself (using "make
33doxygen" at the top level) or you can refer to the copy on the
34OpenChange web site at
37doc/howto.txt contains instructions on how to install and set up
38client libraries, client utilities and the server / proxy parts of
40doc/man/ contains man(1) pages for several OpenChange utilities. Note
41that man pages for programming (i.e. the parts that would appear in
42man3) are generated by doxygen, and will be found in apidocs/ if you
43generate the documentation yourself.
44doc/doxygen/ provides static content used as part of the doxygen API
45documentation generation process.
46doc/examples/ provides programming examples for libmapi.
52- bin/ This directory is created during the build process. It
53contains the binaries (executable programs) that are compiled during
54the "make" step. The source for most of these is in the utils/
55directory, described below.
57- doc/ This directory contains documentation - see description above
58(in DOCUMENTATION) for the various contents of this directory.
60- gen_ndr/ This directory contains routines for handling the Network
61Data Representation (NDR) for various Exchange RPC calls. The contents
62of this directory are generated (using Samba's pidl IDL compiler) at
63build time. The main input file is exchange.idl (see top level
66- libexchange2ical This directory provides functionality for
67converting between Exchange calendar appointments and ICalendar (RFC2445 /
68RFC5545) format. Exchange -> ICalendar is fairly mature, ICalendar to
69Exchange is in work.
71- libmapi/ This directory contains the main client-side library,
72called libmapi. libmapi closely reflects the underlying protocol
73operations (Exchange RPC) being performed between the client and the
74server. For more information, consult the API documentation (either
75build yourself, or online at
78- libmapi++/ This directory contains C++ bindings for libmapi. It is
79not a replacement for libmapi, but is intended to provide easier
80access to many libmapi functions for C++ programmers. For more
81information, consult the API documentation (either build yourself, or
82online at http://apidocs.openchange.org/libmapi++/index.html)
84- libmapiadmin/ This directory contains client-side library functions
85for administering OpenChange or Exchange servers. For more
86information, consult the API documentation (either build yourself, or
87online at http://apidocs.openchange.org/libmapiadmin/index.html). If
88you are looking for a program you can run, instead of library
89functions to write your own program, "openchangepfadmin" might be of
92- libocpf/ This directory contains library functions for the
93OpenChange Property Files (OCPF). This allows building of mail
94messages, address book entries, appointments and similar objects from
95text files. For more information, consult the API documentation
96(either build yourself, or online at
99- mapiproxy/ This directory provides an Exchange RPC proxy. You can
100use this to provide transparent proxying, or to change / monitor
101connections between the client and server. For more information,
102consult the API documentation (either build yourself, or online at
105- python/ This directory contains python scripts used to set up
106("provision") the server side. They are not required for the client
109- qt/ This directory contains Qt4 bindings (lib/ subdirectory) and
110a sample application (demo/ subdirectory). The sample application
111is intended for research and development use, not as a complete
114- samba4/ This directory will be created during the build process if
115you call "make samba" or execute the ./script/installsamba4.sh
116script. It is used to build samba4, if required.
118- script/ This directory contains a range of scripts useful for
119development or use of OpenChange. [TODO: document the scripts -
120perhaps write script/README?]
122- setup/ This directory contains data for setting up ("provisioning")
125- testprogs/ This directory contains developer test tools
127- utils/ This directory contains the source code for a range of
128applications / utilities that can be used to interact with an exchange
129server. They include:
130 - utils/backup/ backup and restore tools
131 - utils/exchange2ical converts Exchange calendar into an ICal file
132 - utils/exchange2mbox two way conversion between Exchange mail and mbox
133 - utils/mapiprofile set up client side profiles (login information)
134 - utils/mapitest/ test tools for libmapi functionality
135 - utils/mapitrace/ test tool for tracing MAPI calls
136 - utils/openchangeclient command line client for Exchange RPC
137 - utils/openchangepfadmin Public Folders admin tools and
138 administration of Exchange users (add/del)
139 - utils/schemaIDGUID
140For more information on these tools, refer to the man(1) pages in doc/man/man1
1This file documents possible smb.conf configuration options for
2OpenChange server, components and modules.
4openchange server debugging
7- __dcerpc_mapiproxy:ndrdump = true|false__
9mapistore named properties backend
12- __mapistore:namedproperties = STRING__ This option specifies the
13 adapter to use to store and manage named properties. Possible value
14 for this parametric option are _mysql_ to use the MySQL backend or
15 _ldb_ to use the LDB one. If the option is not provided, LDB will be
16 used by default and storage path sets to default.
18- __namedproperties:ldb_url = STRING__ This option specifies the LDB
19 database URL of the LDB named properties backend.
21- __namedproperties:ldb_data = STRING__ This option specifies
22 the path where provisioning content is located.
24- __namedproperties:mysql_sock = STRING__ This option is mandatory
25 unless _namedproperties:mysql_host_ is specified. The option defines
26 the UNIX socket path of the MySQL named properties backend.
28- __namedproperties:mysql_user = STRING__ This option defines the
29 mysql username of the account to use for the MySQL named properties
32- __namedproperties:mysql_pass = STRING__ This option defines
33 the mysql password of the account to use for the MySQL named
34 properties backend.
36- __namedproperties:mysql_host = STRING__ This option is mandatory
37 unless _namedproperties:mysql_sock_ is specified. This option
38 defines the host to connect to for the MySQL named properties
41- __namedproperties:mysql_port = STRING__ This option specifies the
42 port on which server is available for the MySQL named properties
43 backend. The option is set to 3306 if not specified.
45- __namedproperties:mysql_db = STRING__ This option is
46 mandatory. It defines the database to use for the MySQL named
47 properties backend.
49- __namedproperties:mysql_data = STRING__ This option specifies
50 the path where MySQL schema file and provisioning content is
53mapistore indexing backend
56- __mapistore:indexing_backend = STRING__ This option specifies the
57 database URL to be used for indexing backend. If not present LDB
58 backend will be use. The URL must have a format like:
61- __mapistore:indexing_cache = STRING__ This option specifies the
62 connection string to use to connect to the memcached server used for
63 fmid caching. The format of the string must be compliant with
64 http://docs.libmemcached.org/libmemcached_configuration.html. For
65 example, `--SERVER=127.0.0.1:11211` would use memcached server
66 located on 127.0.0.1 and running on port 11211.
71- __mapistore:notification_cache = STRING__ This option specifies the
72 connection string to use to connect to the memcached server used for
73 transitory notification data storage between emsmdb/asyncemsmdb
74 endpoints. The format of the string must be compliant with
75 http://docs.libmemcached.org/libmemcached_configuration.html. For
76 example, `--SERVER=127.0.0.1:11211` would use memcached server
77 located on 127.0.0.1 and running on port 11211.
79mapiproxy openchangedb backend
82- __mapiproxy:openchangedb = STRING__ This option specifies the
83 database URL to be used for openchangedb backend. If not present LDB
84 backend will be used. The URL must have a format like:
87asyncemsmdb endpoint options
90- __asyncesmsmdb:listen = STRING__ This option specifies the ip
91 address on which the asyncemsmdb endpoint binds to receive external
92 notifications. If not present "127.0.0.1" will be used.