Project

General

Profile

Readme 0100 » History » Version 1

Jörg Ebeling, 03/16/2025 08:29 PM

1 1 Jörg Ebeling
<a id="readme-top"></a>
2
3
# LDAP-2-CardDAV Phone Book Gateway (l2cpbg)
4
5
An LDAP to CardDav (1 way read) Phone Book Gateway.
6
![Functional L2CPBG Diagram](https://projects.shbe.net/attachments/download/163/L2CPBG%200.9.5%20Diagram.svg "Functional L2CPBG Diagram")
7
8
## Use case
9
10
Most modern (business) voice phones have the capability to do
11
comfortable LDAP directory look-up like:
12
13
-   Directory search by alphabet letters
14
-   Reverse lookup for in- or out-bound calls
15
-   Reverse lookup by entering parts or the phone number
16
17
Unfortunately, most of the 'smaller' companies (i guess companies beyond
18
100 employee) don't have an 'enterprise' LDAP directory, much less than
19
private persons.
20
21
Most of such companies do have something like a cloud address book,
22
often based on WebDAV / CardDAV (i.e. Nextcloud, Ownlcoud, Baïkal,
23
Daylite, Synology Contacts, ...).
24
25
This is, where this Gateway might make your live easier.
26
27
If this program (daemon/service) get started on some kind of hardware (Windows, macOS, Linux, Raspberry or the like), it will do the following:
28
29
1.  Synchronize your CardDAV Server(s), to a small local database cache
30
2.  Wait and answer for LDAP requests from your voice/desktop phone(s)
31
32
<p align="right">(<a href="#readme-top">back to top</a>)</p>
33
34
## Features
35
36
-   Query the contacts of your CardDAV address book(s) by entering
37
    the alphabetic letters (or parts of the telephone number) in your (LDAP capable) phone (and dial one of the matching numbers)
38
-   Reverse lookup inbound calls and display matching contact
39
    informations on the phone
40
-   Work with local formatted (non- E.164) entered phone numbers
41
    like: '040-123456' or '001 807 1234567' as well as '+49 (0)40
42
    1234567-8', so that there's no need to format the phone numbers of your CardDAV contacts in a special notation
43
-   Supports short internal extension phone numbers as well as Fritz!Box specific **\<extension> or *\<line> format
44
-   Support dial prefix for external line
45
-   Support selection of a specific address book per phone, via "ou=\<address book>, \<BaseDN>"
46
-   Support the merge of multiple address books from a single or multiple CardDAV Server(s) into a specified LDAP address book
47
48
<p align="right">(<a href="#readme-top">back to top</a>)</p>
49
50
## Usage
51
52
You need some kind of 24/7 machine where this gateway live. Windows PC,
53
Linux, macOS, Raspberry or the like.
54
55
By default it will look for a configuration file in the following places (in the
56
given order):
57
58
1.  ./l2cpbg.conf
59
2.  /etc/l2cpbg.conf
60
3.  /usr/local/etc/l2cpbg.conf
61
4.  \<exec directory\>/l2cpbg.conf
62
63
It will write to a small local database directory (defaults to 'os.TempDir()/l2cpbg.db').
64
65
At the moment there's no "Admin GUI". But for miminimal infos like "uptime", "license", "number of search requests", "number of sent result records", as well as immediate CardDAV-Server sync trigger, you might send the l2cpbg process a `SIGHUP` signal and check the logs afterwards.
66
67
You might be also interested in the output of `l2cpbg --help`.
68
69
<p align="right">(<a href="#readme-top">back to top</a>)</p>
70
71
## License
72
73
On-Premise, one-time fee
74
75
| Version | max. phones [^1] | Version blaming in Phone Display | max. LDAP requests/h | max. phonebook entries [^2] | Gold features [^3] | Price/€ [^4] |
76
|:----------|:---------:|:--:|:---------:|:---------:|:---:|-------:|
77
|Free       | 2         | ✓  | 12        | 100       | ✗   |   0,00 |
78
|Max3       | 3         | ✗  | unlimited | 500       | ✗   |  29,00 |
79
|Max5       | 5         | ✗  | unlimited | 1000      | ✗   |  49,00 |
80
|Max10      | 10        | ✗  | unlimited | 2000      | ✗   |  79,00 |
81
|Pro10      | 10        | ✗  | unlimited | unlimited | ✓   | 149,00 |
82
|Pro50      | 50        | ✗  | unlimited | unlimited | ✓   | 299,00 |
83
|Enterprise | unlimited | ✗  | unlimited | unlimited | ✓   | 499,00 |
84
85
[^1]: Every device/phone which successful login to L2CPBG, lock a phone-slot (via IP) for 8 hours
86
87
[^2]: In real, the number of imported CardDAV contacts get limited
88
89
[^3]: Gold features are: Multi-instance capability, Multi-CardDAV Servers (or accounts), Multi-AddressBook-Merge
90
91
[^4]: Inkl. German VAT
92
93
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 a 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.
94
95
<p align="right">(<a href="#readme-top">back to top</a>)</p>
96
97
## Installation
98
99
### Linux
100
101
#### Debian ".deb" packages
102
103
`dpkg -i l2cpbg_<version>_<architecture>.deb` to install the package.
104
105
- A sample configuration get places at `/etc/l2cpbg.conf`.  
106
- Initial startup will fail due to wrong/missing settings in config section `[dav]`!  
107
- Adapt at least `[ldap]`, `[ldap.bind]`, `[dav]` as well as `[location]` sections (in /etc/l2cpbg.conf) to your need.
108
- Once done, restart l2cpbg by `systemctrl restart l2cpbg` and check startup by `systemctrl status l2cpbg`.  
109
- The full log can be read by `journalctl -u l2cpbg`.  
110
- To watch the actual/live logging, use `journalctl -fu l2cpbg`.
111
112
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.
113
114
#### Linux binary "tar.gz" packages ("systemd" Systems)
115
116
1. Extract binary i.e. to /usr/local/bin: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /usr/local/bin/ l2cpbg`
117
2. Extract config file, i.e. to /etc: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /etc/ l2cpbg.conf`
118
3. Adapt config section `[ldap]`, `[ldap.bind]`, `[dav]` as well as `[location]` to your need.
119
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.
120
5. If terminal output is okay and everything work as expected. \<Ctrl-c\> to stop forground process.
121
6. Install L2CPBG as service/daemon via `sudo l2cpbg --service=install`. You should see a single "... 'install' succeed" message.
122
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.
123
8. The full log can be read by `journalctl -u l2cpbg`.  
124
9. To watch the actual/live logging, use `journalctl -fu l2cpbg`.
125
126
Adapt your phone(s) to point their "LDAP Directory" lookup requests to l2cpbg with the settings you defined in /etc/l2cpbg.conf.
127
128
Uninstalling the service/daemon is simply done by `sudo l2cpbg --service=uninstall`
129
130
#### Linux binary "tar.gz" packages ("SysV" Systems)
131
132
1. Extract binary i.e. to /usr/local/bin: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /usr/local/bin/ l2cpbg`
133
2. Extract config file, i.e. to /etc: `sudo tar xvf l2cpbg_0.9.2_linux-amd64.tgz -C /etc/ l2cpbg.conf`
134
3. Adapt config section `[ldap]`, `[ldap.bind]`, `[dav]` as well as `[location]` to your need.
135
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.
136
5. If terminal output is okay and everything work as expected. \<Ctrl-c\> to stop forground process.
137
6. Install L2CPBG as service/daemon via `sudo l2cpbg --service=install`. You should see a single "... 'install' succeed" message.
138
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.
139
140
Adapt your phone(s) to point their "LDAP Directory" lookup requests to l2cpbg with the settings you defined in /etc/l2cpbg.conf.
141
142
Uninstalling the service/daemon is simply done by `sudo l2cpbg --service=uninstall`
143
144
<p align="right">(<a href="#readme-top">back to top</a>)</p>
145
146
### macOS
147
148
#### Important macOS upgrade info:
149
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=install` and `l2cpbg --service=start`)
150
151
#### MacOS "pkg" package ("launchd" System)
152
153
The package (pkg) installer does the following:
154
155
- Extract the L2CPBG package to '/opt/l2cpbg'.
156
- 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.
157
- A sample l2cpbg configuration file get places in `/usr/local/etc/l2cpbg.conf`.
158
159
After installation, initial startup would fail due to wrong/missing settings in config section `[dav]`!
160
161
1. Change into installation directory via `cd /opt/l2cpbg`
162
2. Edit config by opening '/usr/local/etc/l2cpbg.conf' i.e. with TextEdit `open -a TextEdit /usr/local/etc/l2cpbg.conf`
163
3. Adapt at least `[ldap]`, `[ldap.bind]`, `[dav]` as well as your `[location]` sections to your need.  When done, don't forget to save!
164
4. 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.
165
5. If terminal output is okay and everything work as expected. \<Ctrl-c\> (abort l2cpbg) to stop forground process.
166
6. Install L2CPBG as service/daemon via `sudo l2cpbg --service=install`. You should see a single "... 'install' succeed" message.
167
7. 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 /var/log/l2cpbg.err.log.
168
169
Adapt your phone(s) to point their "LDAP Directory" lookup requests to l2cpbg with the settings you defined in /usr/local/etc/l2cpbg.conf.
170
171
Uninstalling the service/daemon is simply done by `sudo /opt/l2cpbg/l2cpbg --service=uninstall`
172
173
Uninstalling the whole package is done by `sudo /opt/l2cpbg/uninstall.sh`
174
175
<p align="right">(<a href="#readme-top">back to top</a>)</p>
176
177
### Windows
178
179
#### Binary "zip" packages
180
181
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)`!
182
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!
183
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.
184
4. If terminal output is okay and everything (your phones) work as expected. \<Ctrl-c\> to stop forground process.
185
5. Install L2CPBG as service/daemon via `l2cpbg.exe --service=install`. You should see a single "... 'install' succeed" message.
186
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.
187
188
Uninstalling the service/daemon is simply done by `l2cpbg.exe --service=uninstall`
189
190
<p align="right">(<a href="#readme-top">back to top</a>)</p>
191
192
## Configfile syntax
193
194
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!
195
196
Following a quick minimal sample:
197
```
198
# Comments get started with a hash character
199
200
#
201
# The Gateway will act as LDAP Server, listening
202
# for requests from your phone(s).
203
#
204
[ldap]
205
  host      = "0.0.0.0"
206
  #port     = 1389
207
  base      = "dc=example, dc=com"
208
209
[ldap.bind]
210
  dn   = "cn=pbx"
211
  pass = "your-password"
212
213
#
214
# Your CardDAV server where this Gateway get the contacts from
215
#
216
[dav]
217
  server       = "https://cloudserver.example.com/remote.php/dav"
218
  user         = "cloud-login-name"
219
  pass         = "cloud-login-password"
220
  #pass         = "[AES256]encrypted-cloud-login-password" # Please see command line option '--encryptPassword'
221
222
[location]
223
  int           = 1     # Your international code. 1 = US, 49 = Germany, ...
224
  area          = 807   # Your local area code (without a leading 0)
225
  maxarealength = 7
226
  country       = "EN"
227
```
228
229
### Config file description (by section)
230
231
#### \[ldap\] = LDAP Server settings
232
233
`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.
234
235
`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.
236
237
`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'.
238
239
#### \[ldap.bind\] = LDAP bind/auth settings
240
241
`dn` : Distinguish name. Name, how the phone has to log into/authorize
242
to the gateway.
243
244
`pass` : Related 'dn' password, a phone has to use when logging in/authorize to the gateway.
245
246
#### \[dav\] or \[dav.xxx\]= WebDav/CardDav server settings
247
248
`server` : Your WebDAV/CardDAV server address/URL. Please see 'Limitations'!
249
250
`user` : WebDav username with read access to the relevant address book which shall be requested for phone book lookups. Might also be a 'shared' address book.
251
252
`pass` : Related user password. If you don't like to store your CardDAV-Server password in clear-text here, you've also the possibility to use the AES-256 encrypted variant of the password here. Please check l2cpbg's command line option `--encryptPassword` (see `l2cpbg --help`). If you already stored the encrypted password variant here, you can also check/validate it with command line option `--testDavPassword`.
253
254
`addressbooks` : Optional regular expression string of matchable address book(s)
255
used for phone book lookups. If unsure, enter something. l2cpbg will log
256
all found address books of the logged in CardDav user during startup and
257
log them as 'Non-matching' or 'Matching' address book(s).
258
259
`mergeas` : Optional multi CardDAV/account feature.<br>
260
Merge the configured CardDAV server section as 'ou=\<mergeas string\>' LDAP organization unit.<br>
261
With this option you've the possibility to merge multiple CardDAV server or accounts either into a single 'merged' LDAP address book, or in separate ones. However you like.<br>
262
When importing them into separate ones, you've the possibility to choose them within you phone's BaseDN option.<br>
263
By this you've i.e. the possibility to import a company wide phone book, as well as a (or multiple) private one(s).<br>
264
If this parameter is not given, LDAP attribute 'ou' get set to the name of the CardDAV address book.<br>
265
This feature is only useful when configuring multiple CardDAV server or accounts, which in turn requires a gold feature license (Pro or Enterprise).
266
267
`ldapattribute` give you the possibility to add one static LDAP 'attribute=value' pair, for each contact of the related address book (where this option is used).<br>
268
By this you've to possibility to give specific DAV server contacts, specific LDAP attributes with values like "headquarter", "houston", "baltimore", ... or even "finance", "sales", ...<br>
269
Later on, you can use this attribute within your phone's name-/number-filter to select only specific branches.
270
271
`syncinterval` : Interval of CardDav sync checks. Given as string with suffix 'm' for minutes, or 'h' as hours. Has to be greater than "2m".
272
273
`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.
274
275
`insecurecert` controls whether a client verifies the server's certificate
276
chain and host name. If insecurecert is true, crypto/tls accepts any
277
certificate presented by the server and any host name in that certificate.
278
In this mode, TLS is susceptible to machine-in-the-middle attacks unless
279
custom verification is used. This should be used only for testing or in
280
trusted environments. Defaults to *false*. This option was added in L2CPBG version 0.9.1.
281
282
#### \[location\] = Local area settings
283
284
`int` : International area code (1 = North America, ..., 44 = United
285
Kingdom, 49 = Germany, ...) of your location.
286
287
`area` : Local area code without leading 0 (20 = London (UK), 40 =
288
Hamburg (DE), ...).
289
290
`areaPrefix` : Dial prefix for national calls. Mostly "0". Defaults to "0".
291
ATTENTION: Has to be entered as string like "0". 
292
293
`maxarealength` : Longest possible length of a telephone number within
294
your local area. If a CardDAV or incoming number is shorter or equal, it's
295
identified as a number within your local area.
296
297
`country` : Two-letter [ISO 3166-1 alpha-2](https://wikipedia.org/wiki/ISO_3166-1_alpha-2) country code (i.e. US, GB, DE, ...).
298
299
`maxintlength` : Maximum length of internal phone numbers. These numbers
300
don't get harmonized or E.164 converted as well as they don't get a possibly configured extdialprefix
301
302
`prettifyNums` : By default phone numbers loaded from CardDAV get prettified in two ways:
303
At first, if a CardDAV number is stored in international format, but you live in the same country, the international part get removed.
304
At second, the number get formatted in (spaced or braced) number groups as it's common in your country.
305
You can disable this prettifying by setting the value to false.
306
307
`prettifyNoAreaInSameArea` : Strip local area code from destination number when located in same area. Boolean true|false, defaults to true.
308
309
`prettifyRemoveSpaces` : Boolean (true|false) which will remove all spaces from a prettified phone number. Defaults to false.
310
311
`extdialprefix` : Optional external dial prefix for getting an external line. Get prefixed before the phone number for outgoing number length \> `maxintlength`
312
313
#### [log] = Logging
314
315
`level` : Log level. Might be one of "trace", "debug", "info", "warn", "error" or "fatal". Defaults to "info".
316
317
The log levels are organized as follows:
318
319
`trace` : This is the most verbose log level. It logs simply everything.
320
Never use it in production environment as it might produce an awful amount of log entries!
321
When started as Windows-Service, 'trace' messages doesn't get send to windows event console.
322
323
`debug` : Logs a lot internal stuff, probably interesting when searching
324
a solution for an issue. Should not be used in production environment as
325
it produce also a lot log entries!
326
When started as Windows-Service, 'debug' messages doesn't get send to windows event console.
327
328
`info` : This is the most usual log level. Logs only stuff which is relevant.
329
330
`warn` : Logs stuff which doesn't behave as expected. Not critical (generic functionality should be okay) but should be noticed/checked.
331
332
`error` : Something essential/critical happened. Functionality is limited or aborted at all.
333
334
`fatal` : Game over.
335
336
#### [db] = Internal database
337
338
`directory` : An own directory where to store the internal database. Defaults to
339
'os.TempDir()/l2cpbg.db' which is not very useful on Linux based systems as it normally get cleaned after each reboot.
340
341
Choose yourself where to store the database.
342
If you've a small CardDAV server with <= 200 contacts, let the DB in the default location.
343
An initial sync of 200 contacts (after a reboot) will be quickly done.
344
Not much storage space is needed. An CardDAV server with approx. 4 thousand contacts, take about 10 MByte storage.
345
346
ATTENTION: If you use one of the .deb packages, the binary get started as user=l2cpbg.
347
Thus, the given directory, manually need to made owned by l2cpbg via
348
`chown -R l2cpbg:l2cpbg /your/db/directory`! Otherwise the DB process will fail on missing read/write permissions!
349
350
#### [ldap.map...] = LDAP/CardDav mapping
351
352
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:
353
354
First you need to define a separate block for the LDAP attribute in the following syntax: `[ldap.map.<ldap attribute name (case sensitive)>]`
355
Within such a LDAP mapping block you have to define:
356
357
`dav` : Corresponding CardDav field/attribute name.
358
359
and optional define the following settings:
360
361
`itypes` : Case insensitive regular expression (RE2 syntax) of including relevant CardDav types or *Apple address book label* (Apple Adressbook extension: X-ABLabel).
362
363
`etypes` : Case insensitive regular expression (RE2 syntax) of **excluding** relevant CardDav types or *Apple address book label* (Apple Adressbook extension: X-ABLabel).
364
365
`index` : Zero based index in the case of a multi-value CardDav field.
366
367
For an overview of the predefined/default LDAP/CardDav mappings, take a
368
look into 'l2cpbg.sample.conf' file.
369
370
<p align="right">(<a href="#readme-top">back to top</a>)</p>
371
372
## Phone configuration
373
374
### Gigaset
375
376
Here's a configuration sample of a Gigaset N510 IP PRO:
377
![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")
378
Take attention that 'Server Address' point to the machine where this gateway lives (as well as 'Serverport')
379
380
'BaseDN', 'Common User Name' and 'Common Password' get filled with the same values as defined in your L2CPG config file.
381
382
<p align="right">(<a href="#readme-top">back to top</a>)</p>
383
384
### Mitel (Aastra)
385
386
At first, you need to know that Mitel's LDAP implementation is a little bit different than the one from the other phones.
387
While the other phones always do a live request to the LDAP server when searching for a contact or phone number,
388
Mitel does 36 initial "give me all contacts" for "sn=0*, 1*, ..., a*, b*, ..., z*" once it boot, or during configured schedule (but not more often than once a day?!).
389
390
So, once Mitel loaded all contacts, it handles all searches internally. Also reverse-lookup searches for incoming calls get handled internally.
391
This in turn means, that most of L2CPBG's number prettyfying might disturb i.e. Mitels reverse lookup logic.
392
Because of this, you better should disable the relevant prettyfying via L2CPBG's config entries:
393
```shell
394
[location]
395
  prettifyNoAreaInSameArea = false
396
  prettifyRemoveSpaces = true
397
```
398
This will result in more ugly phone numbers within the directory, but probably give better results for Mitel-internal reverse lookup searches.
399
400
Next:
401
402
Mitel's LDAP directory configuration can't be done within the Phone's or Web GUI. 
403
Instead of, it need to be done within the provisioning file(s) startup.cfg, \<model\>.cfg and/or \<MAC\>.cfg (please check your Mitel documentation how to provision).
404
405
Following the required Mitel provisioning entries, based on L2CPBG's default config.
406
Don't forget to adapt if you changed these within your L2CPBG's config:
407
408
```shell
409
# General LDAP Settings:
410
ldap enabled: 1
411
ldap name: CardDAV
412
ldap server: cn=phone:your-password@<L2CPBG's IP>:1389
413
ldap base dn: dc=example, dc=com
414
ldap search scope: subtree
415
416
# Reverse Lookup:
417
# For best results, use num of local phone number digit + number of area code digits, but not higher than 9
418
# Example:
419
#   You complete local phone number is: +49 8421 12345
420
#   Your local phone number is 5 nums long + area code length is 4 = 9
421
directory digits match: 9
422
423
# LDAP Attribute definitions
424
# (required because they seem to have no defaults)
425
ldap cn attribute: cn
426
ldap first name attribute list: givenName
427
ldap last name attribute list: sn
428
ldap company attribute list: company
429
ldap job title attribute list: title
430
ldap business street attribute list: street
431
ldap business city attribute list: l
432
ldap business state attribute list: st
433
ldap business postal code attribute list: postalCode
434
ldap business country attribute list: c
435
ldap home street attribute list: homeStreet
436
ldap home city attribute list: homeCity
437
ldap home state attribute list: homeState
438
ldap home postal code attribute list: homePostalCode
439
ldap home country attribute list: homeCountry
440
ldap business phone 1 attribute list: telephoneNumber
441
ldap home phone 1 attribute list: homePhone
442
ldap mobile phone attribute list: mobile
443
ldap business fax attribute list: facsimileTelephoneNumber
444
ldap email 1 attribute list: mail
445
ldap email 2 attribute list: homeMail
446
```
447
Reboot your phone and when it seem to be ready, wait further 2 to 3 minutes till it start to request all LDAP Addresses from L2CPBG's LDAP Server (see L2CPBG's log, journal or event messaages).
448
449
Go to the phone's web GUI and define a 'Directory' key (Left menue: Operation / Softkeys and XML)
450
451
<p align="right">(<a href="#readme-top">back to top</a>)</p>
452
453
### Snom
454
455
Contributed by Fredy:
456
457
```
458
==== Konfiguration Snom Telefonapparate D315, D335 ====
459
460
=== Advanced / Network - Abschnitt LDAP ===
461
462
^ Option                          ^ Einstellung                                                                 ^
463
464
| LDAP Name Filter                | (&(|(telephoneNumber=*)(mobile=*))(|(sn=*%*)(givenName=*%*)(company=*%*)))  |
465
| LDAP Number Filter              | (|(telephoneNumber=%)(mobile=%)(homePhone=%))                               |
466
| LDAP Name Filter During Call    | (&(|(telephoneNumber=*)(mobile=*))(|(sn=*%*)(givenName=*%*)(company=*%*)))  |
467
| LDAP Number Filter During Call  | (|(telephoneNumber=%)(mobile=%)(homePhone=%))                               |
468
| Server Address                  | <Hostname or IP of your L2CPBG>                                             |
469
| Port                            | 1389                                                                        |
470
| Base                            | dc=example, dc=com                                                          |
471
| Username                        | cn=pbx                                                                      |
472
| Password                        | <same as in config>                                                         |
473
| LDAP Name Attributes            | cn sn givenName company                                                     |
474
| LDAP Number Attributes          | telephoneNumber mobile homePhone                                            |
475
| LDAP Display Name               | %givenName %company                                                         |
476
| Country Code                    | (leave empty)                                                               |
477
| Area code                       | (leave empty)                                                               |
478
| LDAP over TLS                   | off                                                                         |
479
| Initial Query                   | on                                                                          |
480
| LDAP Sort Mode                  | None                                                                        |
481
| LDAP Sort Parameters            | (leave empty)                                                               |
482
483
=== Advanced / Behaviour - Abschnitt Phone Behavior ===
484
485
^ Option                   ^ Einstellung            ^
486
487
| Prioritise Asserted      | off                    |
488
| Contact Source Priority  | Ldap Tbook Sip Memory  |
489
```
490
491
<p align="right">(<a href="#readme-top">back to top</a>)</p>
492
493
### Yealink
494
495
Another configuration sample of a Yealink SIP-T52S:
496
![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")
497
Take attention that 'Server Address' point to the machine where this gateway lives (as well as 'Port').
498
499
'Base', 'User Name' and 'Password' get filled with the same values as defined in your L2CPG config file.
500
501
<p align="right">(<a href="#readme-top">back to top</a>)</p>
502
503
## Special / Gold features
504
505
### Multi-Instances (Pro or Evaluation license required)
506
507
There might be special configuration requirements like different CardDAV Server/Phonebook combinations/permissions, or multi-locations requirements which can't yet configured in L2CPBG.
508
509
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.
510
511
Imagine: You already have a standard instance running, like described within the [Installation](https://projects.shbe.net/projects/l2cpbg/wiki/Readme_093#Installation) 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.
512
513
`--instance-suffix` functionality might solve this for you!
514
515
Do the following to configure and install a new instance:
516
517
1. We need to give the new instance some kind of meaningfull name. In the following we decide for 'foo'
518
2. Copy your l2cpbg.conf file (as described in [Installation](https://projects.shbe.net/projects/l2cpbg/wiki/Readme_093#Installation)) to l2cpbg-foo.conf, and open it in notepad (or whichever editor your prefer
519
3. Change the [ldap] port to a free port. I.e. from 1389 to 1390
520
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
521
5. Change the configuration stuff why you where interested in a separate instance.
522
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#Installation), but with '--config' option pointing to your new instance configuration.
523
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)
524
525
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. 
526
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.
527
528
<p align="right">(<a href="#readme-top">back to top</a>)</p>
529
530
## Compatibility
531
532
L2CPBG got tested (or reported to work) with :
533
534
-   CardDAV Server:
535
    -   [Baïkal](https://sabre.io/baikal/) version 0.7.x
536
    -   [Daylite](https://www.marketcircle.com/)
537
    -   [Nextcloud](https://nextcloud.com/) version 13, 15, 16, 18, 20, 22, 25, 26, 27, 31
538
    -   [Synology Contacts](https://www.synology.com/dsm/packages/Contacts)
539
-   Desktop & Mobile Phones:
540
    -   [Gigaset](https://www.gigasetpro.com/) N510 IP PRO, N670 IP Pro
541
    -   [Grandstream](http://www.grandstream.com/) GXP2170, GRP2614, WP820, WP825
542
    -   [Mitel 6800](https://www.mitel.com/products/6800-sip-phones-business) and [6900](https://www.mitel.com/de-de/produkte/telefone-und-zubehoer/ip-telefone-und-peripherie/6900-ip-series) Series
543
    -   [Snom](https://www.snom.com/) 300, D315, D335
544
    -   [Yealink](https://www.yealink.com/) SIP-T52S, SIP-T54S, SIP-T54W, SIP-T57W, SIP-T58 (Android)
545
    -   [Fanvil](https://fanvil.com/) X3U, X7C, X210
546
-   Soft-Phones & Tools:
547
    - [PhoneSuite CTI](https://phonesuite.de)
548
-   Gateway Host OS:
549
    -   [Debian](https://www.debian.org/) 9.x-12.x (i386, amd64, arm64, armhf)
550
    -   [Gentoo](https://www.gentoo.org) amd64
551
    -   [Alpine Linux](https://www.alpinelinux.org/) x86_64 v3.x
552
    -   [macOS](https://www.apple.com/macos/) ™ Sierra 10.12.6, Catalina 10.15.7, Big Sur 11.6<!--, Ventura 13.1 -->
553
    -   [Ubuntu](https://ubuntu.com/) 20.04, 22.04
554
    -   [Windows](https://www.microsoft.com/windows) 10, Server 2016
555
556
<p align="right">(<a href="#readme-top">back to top</a>)</p>
557
558
## Limitations and Known Issues
559
560
- The internal LDAP Server doesn't support LDAPS (encrypted LDAP communication) at the moment. Therefore **it should not be used in an untrusted network!**<br>
561
  If you're interested to run it in an untrusted network, please drop me a short note.
562
563
## Support & getting help
564
565
For getting help or discussing l2cpbg, please browse the [L2CPBG Forum](https://projects.shbe.net/projects/l2cpbg/boards) or check/open the [Tickets](https://projects.shbe.net/projects/l2cpbg/issues) area.
566
567
## Footnotes