Project

General

Profile

Readme 093 » History » Version 7

Jörg Ebeling, 09/15/2021 08:50 PM

1 1 Jörg Ebeling
# LDAP-2-CardDAV Phone Book Gateway (l2cpbg)
2
3
An LDAP to CardDav (1 way read) Phone Book Gateway.
4
5
## Use case
6
7
Most modern (business) voice phones have the capability to do
8
comfortable LDAP directory look-up like:
9
10
-   Directory search by alphabet letters
11
-   Reverse lookup for in- or out-bound calls
12
-   Reverse lookup by entering parts or the phone number
13
14
Unfortunately, most of the 'smaller' companies (i guess companies beyond
15
100 employee) don't have an 'enterprise' LDAP directory, much less than
16
private persons.
17
18
Most of such companies do have something like a cloud address book,
19
often based on WebDAV / CardDAV (i.e. Nextcloud, Ownlcoud, Baïkal,
20 6 Jörg Ebeling
Daylite, Synology Contacts, ...).
21 1 Jörg Ebeling
22
This is, where this Gateway might make your live easier.
23
24 6 Jörg Ebeling
If this program (daemon/service) get started on some kind of hardware (Windows, macOS or Linux), it will do the following:
25 1 Jörg Ebeling
26
1.  Synchronize your CardDAV Server, to a small local database cache
27 6 Jörg Ebeling
2.  Wait and answer for LDAP requests from your voice/desktop phone(s)
28 1 Jörg Ebeling
29
## Features
30
31 6 Jörg Ebeling
-   Query the contacts of your CardDAV address book(s) by entering
32
    the alphabetic letters (or parts of the telephone number) in your (LDAP capable) phone (and dial one of the matching numbers)
33 1 Jörg Ebeling
-   Reverse lookup inbound calls and display matching contact
34 6 Jörg Ebeling
    informations on the phone
35
-   Work with local formatted (non- E.164) entered phone numbers
36 1 Jörg Ebeling
    like: '040-123456' or '001 807 1234567' as well as '+49 (0)40
37 6 Jörg Ebeling
    1234567-8', so that there's no need to format the phone numbers of your CardDAV contacts in a special notation
38
-   Supports short internal (extension) phone numbers
39
-   Support dial prefix for external line
40
-   Support selection of a specific addressbook per phone, via "ou=\<addressbook>, \<BaseDN>"
41 1 Jörg Ebeling
42
## Usage
43
44
You need some kind of 24/7 machine where this gateway live. Windows PC,
45
Linux, macOS, Raspberry or the like.
46
47
By default it will look for a configuration file in the following places (in the
48
given order):
49
50
1.  ./l2cpbg.conf
51
2.  /etc/l2cpbg.conf
52
3.  /usr/local/etc/l2cpbg.conf
53
4.  \<exec directory\>/l2cpbg.conf
54
55
It will write to a small local database directory (defaults to 'os.TempDir()/l2cpbg.db').
56
57 6 Jörg Ebeling
At the moment there's no "Admin GUI". But for miminimal infos like "uptime", "license", "number of search requests" as well as "number of sent result records" you might send the l2cpbg process a `SIGHUP` signal and check the logs afterwards.
58 1 Jörg Ebeling
59 6 Jörg Ebeling
## License change
60
Now that L2CPBG become more and more usable, it got necessary to ensure that the free version get only used by private persons and not by companies or professionals. That's why I limited the "Free" version also to 2 phones (LDAP clients) as well as a max. of 100 contacts.
61
62
Luckily I also got convinced that it would be more approriate (in special for smaller companies) to have a more fair price-matrix instead of a "one for all fee".
63
64
If you get hit by the new limitations of the free version, think about selling a license (also to support further development). Here's the price matrix:
65
66
| Version | max. phones [^1] | Version blaming in Phone Display | max. LDAP requests/h | max. phonebook entries [^2] | Gold features [^3] | Price/€ [^4] |
67
|:----------|:---------:|:--:|:---------:|:---------:|:---:|-------:|
68
|Free       | 2         | ✓  | 12        | 100       | ✗   |   0,00 |
69
|Max3       | 3         | ✗  | unlimited | 500       | ✗   |  29,00 |
70
|Max5       | 5         | ✗  | unlimited | 1000      | ✗   |  49,00 |
71
|Max10      | 10        | ✗  | unlimited | 2000      | ✗   |  79,00 |
72
|Pro10      | 10        | ✗  | unlimited | unlimited | ✓   | 149,00 |
73
|Pro50      | 50        | ✗  | unlimited | unlimited | ✓   | 299,00 |
74
|Enterprise | unlimited | ✗  | unlimited | unlimited | ✓   | 499,00 |
75
76
[^1]: Every device/phone which successful login to L2CPBG, lock a phone-slot (via IP) for 8 hours
77
78
[^2]: In real, the number of imported CardDAV contacts get limited
79
80
[^3]: Gold features are: Multi-instance capability, Multi-CardDAV Server (planned, not yet implemented), Multi-AddressBook-Merge (planned, not yet implemented)
81
82
[^4]: Inkl. German VAT
83
84
Before deciding to buy a license, please ensure that L2CPBG work as expected with all your phones and your CardDAV server. If you can't test it because of the free limitations, or any other reason, don't hesitate to ask for a 60 day evaluation license. Simply drop me a mail to projects@shbe.net with your real name.
85
86 1 Jörg Ebeling
## Installation
87
88
### Linux Debian ".deb" packages
89
90
`dpkg -i l2cpbg_<version>_<architecture>.deb` to install the package.
91
92
- A sample configuration get places at `/etc/l2cpbg.conf`.  
93
- Initial startup will fail due to wrong/missing settings in config section `[dav]`!  
94
- Adapt at least `[ldap]`, `[ldap.bind]`, `[dav]` as well as `[location]` sections (in /etc/l2cpbg.conf) to your need.
95
- Once done, restart l2cpbg by `systemctrl restart l2cpbg` and check startup by `systemctrl status l2cpbg`.  
96
- The full log can be read by `journalctl -u l2cpbg`.  
97
- To watch the actual/live logging, use `journalctl -fu l2cpbg`.
98
99
If l2cpbg started up, adapt your phone(s) to point their "LDAP Directory" lookup requests to l2cpbg with the settings you defined in /etc/l2cpbg.conf.
100
101
### Linux binary "tar.gz" packages ("systemd" Systems)
102
103
1. Extract binary i.e. to /usr/local/bin: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /usr/local/bin/ l2cpbg`
104
2. Extract config file, i.e. to /etc: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /etc/ l2cpbg.conf`
105
3. Adapt config section `[ldap]`, `[ldap.bind]`, `[dav]` as well as `[location]` to your need.
106
4. Do a first foreground start via `l2cpbg` and check terminal output for any issues. \<Ctrl-c\>, edit config and start `l2cpbg` till terminal output is okay.
107
5. If terminal output is okay and everything work as expected. \<Ctrl-c\> to stop forground process.
108
6. Install L2CPBG as service/daemon via `sudo l2cpbg --service=install`. You should see a single "... 'install' succeed" message.
109
7. Now that L2CPBG got installed as a service/daemon you can use `sudo systemctrl start|stop|restart l2cpbg`. When booting next, L2CPBG should get started automatically and log output to systemd journal.
110
8. The full log can be read by `journalctl -u l2cpbg`.  
111
9. To watch the actual/live logging, use `journalctl -fu l2cpbg`.
112
113
Adapt your phone(s) to point their "LDAP Directory" lookup requests to l2cpbg with the settings you defined in /etc/l2cpbg.conf.
114
115
Uninstalling the service/daemon is simply done by `sudo l2cpbg --service=uninstall`
116
117
### Linux binary "tar.gz" packages ("SysV" Systems)
118
119
1. Extract binary i.e. to /usr/local/bin: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /usr/local/bin/ l2cpbg`
120
2. Extract config file, i.e. to /etc: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /etc/ l2cpbg.conf`
121
3. Adapt config section `[ldap]`, `[ldap.bind]`, `[dav]` as well as `[location]` to your need.
122
4. Do a first foreground start via `l2cpbg` and check terminal output for any issues. \<Ctrl-c\>, edit config and start `l2cpbg` till terminal output is okay.
123
5. If terminal output is okay and everything work as expected. \<Ctrl-c\> to stop forground process.
124
6. Install L2CPBG as service/daemon via `sudo l2cpbg --service=install`. You should see a single "... 'install' succeed" message.
125
7. Now that L2CPBG got installed as a service/daemon you can use `sudo service l2cpbg start|stop|restart`. When booting next time, L2CPBG should get started automatically and log output get send to /var/log/l2cpbg.err|log.
126
127
Adapt your phone(s) to point their "LDAP Directory" lookup requests to l2cpbg with the settings you defined in /etc/l2cpbg.conf.
128
129
Uninstalling the service/daemon is simply done by `sudo l2cpbg --service=uninstall`
130
131 6 Jörg Ebeling
### Important macOS upgrade info:
132
If you already have l2cpbg versiom 0.9.2 installed, you need to deactivate your old l2cpbg instance via `l2cpbg --service=stop` and `l2cpbg --service=uninstall`, **before** installing the new version. After installing the new version, activate it again (via `l2cpbg --service=uninstall` and `l2cpbg --service=start`)
133
134 1 Jörg Ebeling
### MacOS "pkg" package ("launchd" System)
135
136
The package (pkg) installer does the following:
137
138
- Extract the L2CPBG package to '/opt/l2cpbg'.
139
- Place a l2cpbg command symlink into '/usr/local/bin' (which is in PATH), so that you're able to call the gateway binary 'l2cpbg' independent of your working directory.
140
- A sample l2cpbg configuration file get places in `/usr/local/etc/l2cpbg.conf`.
141
142
After installation, initial startup would fail due to wrong/missing settings in config section `[dav]`!
143
144
1. Edit config by opening '/usr/local/etc/l2cpbg.conf' i.e. with TextEdit `open -a TextEdit /usr/local/etc/l2cpbg.conf`
145
2. Adapt at least `[ldap]`, `[ldap.bind]`, `[dav]` as well as your `[location]` sections to your need.  When done, don't forget to save!
146
3. Do a first foreground start via `l2cpbg` in Terminal, and check terminal output for any issues. \<Ctrl-c\> (abort l2cpbg), edit config and start `l2cpbg` again, till terminal output is okay.
147
4. If terminal output is okay and everything work as expected. \<Ctrl-c\> (abort l2cpbg) to stop forground process.
148
5. Install L2CPBG as service/daemon via `sudo l2cpbg --service=install`. You should see a single "... 'install' succeed" message.
149
6. Now that L2CPBG got installed as a service/daemon you can use `sudo l2cpbg --service=start|stop|restart`. When booting next time, L2CPBG should get started automatically and log output is send to /usr/local/var/log/l2cpbg.log.
150
151
Adapt your phone(s) to point their "LDAP Directory" lookup requests to l2cpbg with the settings you defined in /usr/local/etc/l2cpbg.conf.
152
153
Uninstalling the service/daemon is simply done by `sudo l2cpbg --service=uninstall`
154
155
Uninstalling the whole package is done by `sudo /opt/l2cpbg/uninstall.sh`
156
157
### Windows binary "zip" packages
158
159
1. Extract content of zip package to your preferred location, i.e. `C:\Program Files\LDAP2CardDAV-Gateway`. Take attention that the 32-bit version should be installted (by convention) somewhere under `C:\Program Files (x86)`!
160
2. Run "notepad" as Administrator, open `C:\Program Files\LDAP2CardDAV-Gateway\l2cpbg.conf` within Notepad, and adapt config section `[ldap]`, `[ldap.bind]`, `[dav]` as well as `[location]` to your need. When done, don't forget to save!
161
3. Now it's time to try a first start of the Gateway. Run a "Command" shell as Administrator and change to the installation directory, i.e. `cd C:\Program Files\LDAP2CardDAV-Gateway`, start it in foreground by `l2cpbg.exe` and check terminal output for any issues. \<Ctrl-c\>, edit config and start `l2cpbg.exe` till terminal output is okay.
162
4. If terminal output is okay and everything work as expected. \<Ctrl-c\> to stop forground process.
163
5. Install L2CPBG as service/daemon via `l2cpbg.exe --service=install`. You should see a single "... 'install' succeed" message.
164
7. Now that L2CPBG got installed as a service you can use `l2cpbg.exe --service=start|stop|restart`. After 'start'ed as service, log entries can be viewed by Windows Event Viewer (eventvwr). When booting next time, L2CPBG should get started automatically.
165
166
Uninstalling the service/daemon is simply done by `l2cpbg.exe --service=uninstall`
167
168
## Configfile syntax
169
170
Since version 0.9.0 the config file syntax has changed from 'ini' to 'toml'. Not a big deal, but you need to adapt some entries. Mainly strings have to be entered within quotes!
171
172
Following a quick minimal sample:
173
```
174
# Comments get started with a hash character
175
176
#
177
# The Gateway will act as LDAP Server, listening
178
# for requests from your phone(s).
179
#
180
[ldap]
181
  host      = "0.0.0.0"
182
  #port     = 1389
183
  base      = "dc=example, dc=com"
184
185
[ldap.bind]
186
  dn   = "cn=pbx"
187
  pass = "your-password"
188
189
#
190
# Your CardDAV server where this Gateway get the contacts from
191
#
192
[dav]
193
  server       = "https://cloudserver.example.com/remote.php/dav"
194
  user         = "cloud-login-name"
195
  pass         = "cloud-login-password"
196
197
[location]
198
  int           = 1     # Your international code. 1 = US, 49 = Germany, ...
199
  area          = 807   # Your local area code (without a leading 0)
200
  maxarealength = 7
201
  country       = "EN"
202
```
203
204
### Config file description (by section)
205
206
#### \[ldap\] = LDAP Server settings
207
208
`host` : Which IP to listen for LDAP requests. Defaults to "0.0.0.0" = 'Listen on all interfaces'. You've to point your LDAP phone settings to this machines IP/hostname.
209
210
`port` : Which port to listen for LDAP requests. Defaults to port 1389. The standard LDAP port is 389, so you need to change your phone to the port you configure here.
211
212
`base` : This LDAP's 'base DN'. Choose whatever you want, but use the same settings within your phone's LDAP settings. Defaults to 'dc=example, dc=com'.
213
214
#### \[ldap.bind\] = LDAP bind/auth settings
215
216
`dn` : Distinguish name. Name, how the phone has to log into/authorize
217
to the gateway.
218
219
`pass` : Related 'dn' password, a phone has to use when logging in/authorize to the gateway.
220
221
#### \[dav\] = WebDav/CardDav server settings
222
223
`server` : Your WebDAV/CardDAV server address/URL. Please see 'Limitations'!
224
225
`user` : WebDav username with read access to the relevant addressbook which shall be requested for phone book lookups. Might also be a 'shared' address book.
226
227
`pass` : Related user password.
228
229
`addressbooks` : Optional regular expression string of matchable addressbook(s)
230
used for phone book lookups. If unsure, enter something. l2cpbg will log
231
all found address books of the logged in CardDav user during startup and
232
log them as 'Non-matching' or 'Matching' address book(s).
233
234
`syncinterval` : Interval of CardDav sync checks. Given as string with suffix 'm' for minutes, or 'h' as hours. Has to be greater than "2m".
235
236
`chunksize` : If an address book get loaded the first time, it get loaded in "chunks of contacts" in this given size. You may increase this value for quicker initial load, but if your CardDAV server answer with an "507 Insufficient Storage" error or similar, you need to lower this value. Default to 200. This option was added in L2CPBG version 0.8.1.
237
238
`insecurecert` controls whether a client verifies the server's certificate
239
chain and host name. If insecurecert is true, crypto/tls accepts any
240
certificate presented by the server and any host name in that certificate.
241
In this mode, TLS is susceptible to machine-in-the-middle attacks unless
242
custom verification is used. This should be used only for testing or in
243
trusted environments. Defaults to *false*. This option was added in L2CPBG version 0.9.1.
244
245
#### \[dav.map\] = CardDav mapping
246
247
`tel` : CardDAV attribute which contain phone numbers. Normally (and
248
by default) 'TEL'. Don't change this, except your really know what you're doing.
249
250
#### \[location\] = Local area settings
251
252
`int` : International area code (1 = North America, ..., 44 = United
253
Kingdom, 49 = Germany, ...) of your location.
254
255
~~`intPrefix` : Dial prefix for international calls. Mostly "00". Defaults to "00".
256
ATTENTION: Has to be entered as string like "00".~~
257
258
`area` : Local area code without leading 0 (20 = London (UK), 40 =
259
Hamburg (DE), ...).
260
261
`areaPrefix` : Dial prefix for national calls. Mostly "0". Defaults to "0".
262
ATTENTION: Has to be entered as string like "0". 
263
264
`maxarealength` : Longest possible length of a telephone number within
265
your local area. If a CardDAV or incoming number is shorter or equal, it's
266
identified as a number within your local area.
267
268
`country` : Two-letter [ISO 3166-1 alpha-2](https://wikipedia.org/wiki/ISO_3166-1_alpha-2) country code (i.e. US, GB, DE, ...).
269
270
`maxintlength` : Maximum length of internal phone numbers. These numbers
271
don't get harmonized or E.164 converted.
272
273
`prettifyNums` : By default phone numbers loaded from CardDAV get prettified in two ways:
274
At first, if a CardDAV number is stored in international format, but you live in the same country, the international part get removed.
275
At second, the number get formatted in (spaced or braced) number groups as it's common in your country.
276
You can disable this prettifying by setting the value to false.
277
278 7 Jörg Ebeling
`prettifyNoAreaInSameArea` : Strip local area code from destination number when located in same area. Boolean true|false, defaults to true.
279
280
`prettifyRemoveSpaces` : Boolean (true|false) which will remove all spaces from a prettified phone number. Defaults to false.
281
282 1 Jörg Ebeling
`extdialprefix` : Optional external dial prefix for getting an external line. Get prefixed before the phone number if outgoing number length \> `maxintlength`
283
284
#### [log] = Logging
285
286
`level` : Log level. Might be one of "trace", "debug", "info", "warn", "error" or "fatal". Defaults to "info".
287
288
The log levels are organized as follows:
289
290
`trace` : This is the most verbose log level. It logs simply everything.
291
Never use it in production environment as it might produce an awful amount of log entries!
292
When started as Windows-Service, 'trace' messages doesn't get send to windows event console.
293
294
`debug` : Logs a lot internal stuff, probably interesting when searching
295
a solution for an issue. Should not be used in production environment as
296
it produce also a lot log entries!
297
When started as Windows-Service, 'debug' messages doesn't get send to windows event console.
298
299
`info` : This is the most usual log level. Logs only stuff which is relevant.
300
301
`warn` : Logs stuff which doesn't behave as expected. Not critical (generic functionality should be okay) but should be noticed/checked.
302
303
`error` : Something essential/critical happened. Functionality is limited or aborted at all.
304
305
`fatal` : Game over.
306
307
#### [db] = Internal database
308
309
`directory` : An own directory where to store the internal database. Defaults to
310
'os.TempDir()/l2cpbg.db' which is not very useful on Linux based systems as it normally get cleaned after each reboot.
311
312
Choose yourself where to store the database.
313
If you've a small CardDAV server with <= 200 contacts, let the DB in the default location.
314
An initial sync of 200 contacts (after a reboot) will be quickly done.
315
Not much storage space is needed. An CardDAV server with approx. 4 thousand contacts, take about 10 MByte storage.
316
317
ATTENTION: If you use one of the .deb packages, the binary get started as user=l2cpbg.
318
Thus, the given directory, manually need to made owned by l2cpbg via
319
`chown -R l2cpbg:l2cpbg /your/db/directory`! Otherwise the DB process will fail on missing read/write permissions!
320
321
#### [ldap.map...] = LDAP/CardDav mapping
322
323
Every LDAP attribute which is used within a phone(s) filter or response, need to have a corresponding CardDav mapping which get done as follows:
324
325
First you need to define a separate block for the LDAP attribute in the following syntax: `[ldap.map.<ldap attribute name (case sensitive)>]`
326
Within such a LDAP mapping block you have to define:
327
328
`dav` : Corresponding CardDav field/attribute name.
329
330
and optional define the following settings:
331
332
`itypes` : Regular expression (RE2 syntax) of including relevant CardDav types or *Apple addressbook label* (Apple Adressbook extension: X-ABLabel).
333
334
`etypes` : Regular expression (RE2 syntax) of **excluding** relevant CardDav types or *Apple addressbook label* (Apple Adressbook extension: X-ABLabel).
335
336
`index` : Zero based index in the case of a multi-value CardDav field.
337
338
For an overview of the predefined/default LDAP/CardDav mappings, take a
339
look into 'l2cpbg.sample.conf' file.
340
341
## Phone configuration
342
343
### Gigaset
344
345
Here's a configuration sample of a Gigaset N510 IP PRO:
346
![Gigaset N510 IP PRO settings sample for L2CPBG 0.7.0](https://projects.shbe.net/attachments/download/19/config_gigaset-n510-ip-pro_v070_de.jpg "Gigaset N510 IP PRO settings sample for L2CPBG 0.7.0")
347
Take attention that 'Server Address' point to the machine where this gateway lives (as well as 'Serverport')
348
349
'BaseDN', 'Common User Name' and 'Common Password' get filled with the same values as defined in your L2CPG config file.
350
351
### Yealink
352
353
Another configuration sample of a Yealink SIP-T52S:
354
![Yealink SIP-T52S settings sample for L2CPBG 0.7.0](https://projects.shbe.net/attachments/download/18/config_yealink-t52s_fw7084_v070_en.jpg "Yealink SIP-T52S settings sample for L2CPBG 0.7.0")
355
Take attention that 'Server Address' point to the machine where this gateway lives (as well as 'Port').
356
357
'Base', 'User Name' and 'Password' get filled with the same values as defined in your L2CPG config file.
358
359
### Snom
360
361
The LDAP configuration of Snom phones look similar to the ones of
362
Gigaset or Yealink.
363
But a user reported that entering `(|(cn=*%*)(sn=*%*)(givenName=*%*)(company=*%*))` within 'LDAP name filter' did the trick for working name searches.
364
365
## Special features
366
367 6 Jörg Ebeling
### Multi-Instances (currently Windows only, Pro (or Evaluation) license required)
368 5 Jörg Ebeling
369 1 Jörg Ebeling
There might be special configuration requirements like different CardDAV Server/Phonebook combinations/permissions, or multi-locations requirements which can't yet configured in L2CPBG.
370
371
For such special cases, you might start multiple L2CPBG instances. Each with his own configuration or even with the more comfortable merge/overlay configuration loading.
372
373
Imagine: You already have a standard instance running, like described within the [Installation](https://projects.shbe.net/projects/l2cpbg/wiki/Readme_093#Windows-binary-zip-packages) section. But now you've a special requirement like a office branch (which has access through your office VPN to your L2CPBG server) for which you need other [location] settings.
374
375 5 Jörg Ebeling
`--instance-suffix` functionality might solve this for you!
376 1 Jörg Ebeling
377
Do the following to configure and install a new instance:
378
379
1. We need to give the new instance some kind of meaningfull name. In the following we decide for 'foo'
380 5 Jörg Ebeling
2. Copy your l2cpbg.conf file (as described in [Installation](https://projects.shbe.net/projects/l2cpbg/wiki/Readme_093#Windows-binary-zip-packages)) to l2cpbg-foo.conf, and open it in notepad (or whichever editor your prefer
381 1 Jörg Ebeling
3. Change the [ldap] port to a free port. I.e. from 1389 to 1390
382
4. If you have configured a [db] directory, give the new instance a separate (and exclusive) db directoy. If you don't have a configured [db] directory entry, you can leave it as it is. By default the db get stored at OS.Tempdir()/l2cpbg-\<instance-suffix\>.db
383
5. Change the configuration stuff why you where interested in a separate instance.
384
6. Test your new configuration in foreground (the same way as you did during the normal instance installation see [Installation](https://projects.shbe.net/projects/l2cpbg/wiki/Readme_093#Windows-binary-zip-packages)
385
7. Once the configuration is good, you can call `l2cpbg.exe --instance-suffix=foo --service=start|stop|restart` like during normal install (except the additional parameter --instance-suffix=foo)
386
387
When dealing with the configuration of multi-instances, you will heavily benefit from L2CPBG's possibility to do merge/overlay config loading, which is not more than loading each subsequent config on top of the previous one. 
388
By this you'll have i.e. your main configuration in l2cpbg.conf whereas your l2cpbg-foo.conf contains only the two or three config changes you're interested in. Then, by adding `--config=<your config directory>/l2cpbg.conf,<your config directory>/l2cpbg-foo.conf` as l2cpbg command option, it's done.
389
390
## Compatibility
391
392 6 Jörg Ebeling
L2CPBG was tested with:
393 1 Jörg Ebeling
394
-   CardDAV Server:
395
    -   [Baïkal](https://sabre.io/baikal/) version 0.7.x
396
    -   [Daylite](https://www.marketcircle.com/)
397 6 Jörg Ebeling
    -   [Nextcloud](https://nextcloud.com/) version 13, 15, 16, 18, 20, 22
398 1 Jörg Ebeling
    -   [Synology Contacts](https://www.synology.com/dsm/packages/Contacts)
399
-   Desktop & Mobile Phones:
400
    -   [Gigaset](https://www.gigasetpro.com/) N510 IP PRO, 670 IP Pro
401
    -   [Grandstream](http://www.grandstream.com/) GXP2170
402
    -   [Snom](https://www.snom.com/) 300, D315, D335
403
    -   [Yealink](https://www.yealink.com/) SIP-T52S, SIP-T54S, SIP-T54W
404 6 Jörg Ebeling
    -   [Fanvil](https://fanvil.com/) X3U, X7C, X210
405 1 Jörg Ebeling
-   Gateway Host OS:
406
    -   [Debian](https://www.debian.org/) Stretch 9.x, Buster 10.x (running at amd64 as well as ARMv7)
407
    -   [Gentoo](https://www.gentoo.org) amd64
408 6 Jörg Ebeling
    -   [macOS](https://www.apple.com/macos/) ™ Sierra 10.12.6, Catalina 10.15.7
409 1 Jörg Ebeling
    -   [Ubuntu](https://ubuntu.com/) 20.04 (Focal Fossa)
410 6 Jörg Ebeling
    -   [Windows](https://www.microsoft.com/windows) 10, Server 2016ma
411 1 Jörg Ebeling
412
## Limitations and Known Issues
413
414
-   The internal LDAP Server doesn't support LDAPS (encrypted LDAP
415
    communication) at the moment. Therefore 
416
    **it should not be used in an untrusted network!**
417
    If you're interested to run it in an untrusted network,
418
    please drop me a short note.
419
420
## Support & getting help
421
422
For getting help or discussing l2cpbg, please browse the [L2CPBG
423
Forum](https://projects.shbe.net/projects/l2cpbg/boards) or check/open
424
the [Tickets](https://projects.shbe.net/projects/l2cpbg/issues) area.
Go to top