1 /* spmfilter - mail filtering framework
2  * Copyright (C) 2009-2012 Axel Steiner and SpaceNet AG
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 3 of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 /*!
19  * @file smf_settings.h
20  * @brief Defines SMFSettings_T and config file parsing functions
21  * @details All config settings, defined in spmfilter.conf, are stored
22  *          in a SMFSettings_T object and can be accessed via the
23  *          corresponding function.
24  */
25 
26 #ifndef _SMF_SETTINGS_H
27 #define _SMF_SETTINGS_H
28 
29 #include "spmfilter_config.h"
30 #include "smf_dict.h"
31 #include "smf_list.h"
32 
33 /*!
34  * @enum SMFTlsOption_T
35  * @brief Possible types of TLS configuration
36  */
37 typedef enum {
38     SMF_TLS_DISABLED, /**< TLS is disabled */
39     SMF_TLS_ENABLED, /**< TLS is enabled */
40     SMF_TLS_REQUIRED /**< TLS is enabled and required */
41 } SMFTlsOption_T;
42 
43 /*!
44  * @enum SMFConnectionType_T
45  * @brief Possible backend connection types
46  */
47 typedef enum {
48     SMF_SQL_CONN, /**< SQL connection */
49     SMF_LDAP_CONN /**< LDAP connection */
50 } SMFConnectionType_T;
51 
52 /*!
53  * @struct SMFSettings_T smf_settings.h
54  * @brief Holds spmfilter runtime configuration
55  */
56 typedef struct {
57     int debug; /**< debug flag */
58     char *config_file; /**< path to config file */
59     char *queue_dir; /**< path to spool directory */
60     char *engine; /**< configured engine */
61     SMFList_T *modules; /**< all configured modules */
62     int module_fail; /**< module fail behavior */
63     char *nexthop; /**< next smtp hop */
64     int nexthop_fail_code; /**< smtp code, when delivery to nexthop fails */
65     char *nexthop_fail_msg; /**< smtp return message, when delivery to nexthop fails */
66     char *backend; /**< configured lookup backend */
67     char *backend_connection; /**<
68                                * if multiple backend hosts are defined,
69                                * it's possible to balance connections
70                                * between all, or do failover connections.
71                                * possible keys are:
72                                * - balance
73                                *   load-balance connections among all hosts listed
74                                * - failover
75                                *   failover connections in the order listed
76                                */
77     int add_header; /**< add spmfilter processing header */
78     unsigned long max_size; /**< maximal message size in bytes */
79     SMFTlsOption_T tls; /**< enable/disable TLS */
80     char *lib_dir; /**< user defined directory path for shared libraries */
81     char *pid_file; /**< path to pid file */
82     char *bind_ip; /**< ip to bind daemon */
83     int bind_port; /**< port to bind daemon (default 10025) */
84     int listen_backlog; /**< listen queue backlog (default 511) */
85     int foreground; /**< run daemon in foreground */
86     char *user; /**< run daemon as user */
87     char *group; /**< run daemon as group */
88     int max_childs; /**< maximum number of allowed processes (default 10) */
89     int spare_childs; /**< number of spare childs (default 2) */
90     int syslog_facility; /**< syslog facility **/
91 
92     SMFDict_T *smtp_codes; /**< user defined smtp return codes */
93     int smtpd_timeout; /**< time limit for receiving a remote SMTP client request (default 300s) */
94 
95     char *sql_driver; /**< sql driver name */
96     char *sql_name; /**< sql database name */
97     SMFList_T *sql_host; /**< list with sql database hosts */
98     int sql_port; /**< sql database port */
99     char *sql_user; /**< sql database username */
100     char *sql_pass; /**< sql database password */
101     char *sql_user_query; /**< sql user query */
102     char *sql_encoding; /**< sql encoding */
103     int sql_max_connections; /**< max. number of sql conncetions */
104 
105     char *ldap_uri; /**< ldap uri */
106     SMFList_T *ldap_host; /**< list with ldap hosts */
107     int ldap_port; /**< ldap port */
108     char *ldap_binddn; /**< ldap bind dn */
109     char *ldap_bindpw; /**< ldap bind password */
110     char *ldap_base; /**< ldap search base */
111     int ldap_referrals; /**< ldap referrals flag */
112     char *ldap_scope; /**< ldap search scope */
113     char *ldap_user_query; /**< ldap user query */
114     SMFList_T *ldap_result_attributes; /**< list with ldap result attributes */
115 
116     SMFConnectionType_T lookup_connection_type; /**< lookup connection type */
117     int lookup_persistent; /**< is the lookup connection persistent? */
118     void *lookup_connection; /**< ldap or sql connection */
119 
120     SMFDict_T *groups; /**< custom setting groups */
121 } SMFSettings_T;
122 
123 
124 /*!
125  * @fn int smf_settings_set_debug(SMFSettings_T *settings, int debug)
126  * @brief Set debug setting
127  * @param settings a SMFSettings_T object
128  * @param debug debug setting  either 0 (false) or 1 (true)
129  * @returns 0 on success or -1 in case of error
130  */
131 int smf_settings_set_debug(SMFSettings_T *settings, int debug);
132 
133 /*!
134  * @fn int smf_settings_get_debug(SMFSettings_T *settings)
135  * @brief Get debug setting
136  * @param settings a SMFSettings_T object
137  * @returns debug setting
138  */
139 int smf_settings_get_debug(SMFSettings_T *settings);
140 
141 /*!
142  * @fn int smf_settings_set_config_file(SMFSettings_T *settings, char *cf)
143  * @brief Set path to config file
144  * @param settings a SMFSettings_T object
145  * @param cf config file
146  * @returns 0 on success or -1 in case of error
147  */
148 int smf_settings_set_config_file(SMFSettings_T *settings, char *cf);
149 
150 /*!
151  * @fn char *smf_settings_get_config_file(SMFSettings_T *settings)
152  * @brief Get config file path
153  * @param settings a SMFSettings_T object
154  * @returns config file path
155  */
156 char *smf_settings_get_config_file(SMFSettings_T *settings);
157 
158 /*!
159  * @fn int smf_settings_set_queue_dir(SMFSettings_T *settings, char *qd)
160  * @brief Set path to queue directory
161  * @param settings a SMFSettings_T object
162  * @param qd queue directory path
163  * @returns 0 on success or -1 in case of error
164  */
165 int smf_settings_set_queue_dir(SMFSettings_T *settings, char *qd);
166 
167 /*!
168  * @fn char *smf_settings_get_queue_dir(SMFSettings_T *settings)
169  * @brief Get queue directory path
170  * @param settings a SMFSettings_T object
171  * @returns queue directory
172  */
173 char *smf_settings_get_queue_dir(SMFSettings_T *settings);
174 
175 /*!
176  * @fn void smf_settings_set_engine(SMFSettings_T *settings, char *engine)
177  * @brief Set engine which should be used
178  * @param settings a SMFSettings_T object
179  * @param engine engine
180  */
181 void smf_settings_set_engine(SMFSettings_T *settings, char *engine);
182 
183 /*!
184  * @fn char *smf_settings_get_engine(SMFSettings_T *settings)
185  * @brief Get configured engine
186  * @param settings a SMFSettings_T object
187  * @returns engine
188  */
189 char *smf_settings_get_engine(SMFSettings_T *settings);
190 
191 /*!
192  * @fn void smf_settings_add_module(SMFSettings_T *settings, char *module)
193  * @brief Add available module to module list, which will be loaded at runtime.
194  * @param settings a SMFSettings_T object
195  * @param module module name
196  * @returns 0 on success or -1 in case of error
197  */
198 int smf_settings_add_module(SMFSettings_T *settings, char *module);
199 
200 /*!
201  * @fn SMFList_T *smf_settings_get_modules(SMFSettings_T *settings)
202  * @brief Get available modules
203  * @param settings a SMFSettings_T object
204  * @returns modules list
205  */
206 SMFList_T *smf_settings_get_modules(SMFSettings_T *settings);
207 
208 /*!
209  * @fn void smf_settings_set_module_fail(SMFSettings_T *settings, int i)
210  * @brief Set module_fail setting
211  *  1 = proceed and ignore
212  *  2 = cancel further processing and return permanet error
213  *  3 = cancel further processing and return temporary error (default)
214  * @param settings a SMFSettings_T object
215  * @param i module_fail value
216  */
217 void smf_settings_set_module_fail(SMFSettings_T *settings, int i);
218 
219 /*!
220  * @fn int smf_settings_get_module_fail(SMFSettings_T *settings);
221  * @brief Get module_fail setting
222  * @param settings a SMFSettings_T object
223  * @returns module_fail setting
224  */
225 int smf_settings_get_module_fail(SMFSettings_T *settings);
226 
227 /*!
228  * @fn void smf_settings_set_nexthop(SMFSettings_T *settings, char *nexthop)
229  * @brief Set nexthop setting.
230  *  This parameter specifies the final destination,
231  *  after a mail is processed by spmfilter.
232  * @param settings a SMFSettings_T object
233  * @param nexthop nexthtop string
234  */
235 void smf_settings_set_nexthop(SMFSettings_T *settings, char *nexthop);
236 
237 /*!
238  * @fn char *smf_settings_get_nexthop(SMFSettings_T *settings)
239  * @brief Get configured nexthop setting
240  * @param settings a SMFSettings_T object
241  * @returns nexthop
242  */
243 char *smf_settings_get_nexthop(SMFSettings_T *settings);
244 
245 /*!
246  * @fn void smf_settings_set_nexthop_fail_code(SMFSettings_T *settings, int i)
247  * @brief Set nexthop_fail_code setting
248  *  If the delivery to the final destination fails
249  *  for any reason, this code is used as response to
250  *  the sending  MTA (default 451).
251  * @param settings a SMFSettings_T object
252  * @param i nexthop_fail_code value
253  */
254 void smf_settings_set_nexthop_fail_code(SMFSettings_T *settings, int i);
255 
256 /*!
257  * @fn int smf_settings_get_nexthop_fail_code(SMFSettings_T *settings)
258  * @brief Get nexthop_fail_code setting
259  * @param settings a SMFSettings_T object
260  * @returns nexthop_fail_code
261  */
262 int smf_settings_get_nexthop_fail_code(SMFSettings_T *settings);
263 
264 /*!
265  * @fn void smf_settings_set_nexthop_fail_msg(SMFSettings_T *settings, char *msg)
266  * @brief Set nexthop_fail_msg setting.
267  *  If the delivery to the final destination fails for any
268  *  reason, this message is used as reponse for the sending
269  *  MTA. (default "Requested action aborted: local error in processing").
270  * @param settings a SMFSettings_T object
271  * @param msg nexthop fail message
272  */
273 void smf_settings_set_nexthop_fail_msg(SMFSettings_T *settings, char *msg);
274 
275 /*!
276  * @fn char *smf_settings_get_nexthop_fail_msg(SMFSettings_T *settings)
277  * @brief Get nexthop_fail_msg setting
278  * @param settings a SMFSettings_T object
279  * @returns nexthop fail message
280  */
281 char *smf_settings_get_nexthop_fail_msg(SMFSettings_T *settings);
282 
283 /*!
284  * @fn void smf_settings_set_backend(SMFSettings_T *settings, char *backend)
285  * @brief Set lookup backend.
286  * @param settings a SMFSettings_T object
287  * @param backend backend setting list
288  */
289 void smf_settings_set_backend(SMFSettings_T *settings, char *backend);
290 
291 /*!
292  * @fn char *smf_settings_get_backend(SMFSettings_T *settings)
293  * @brief Get backend setting
294  * @param settings a SMFSettings_T object
295  * @returns backend setting
296  */
297 char *smf_settings_get_backend(SMFSettings_T *settings);
298 
299 /*!
300  * @fn void smf_settings_set_backend_connection(SMFSettings_T *settings, char *conn)
301  * @brief Set backend_connection setting.
302  *  If there are multiple server configured in the specified backend,
303  *  it's possible to define a failover or load-balancing behaviour.
304  *  Possible values are:
305  *    balance  = when you configure the backend profile for load
306  *               balancing, spmfilter distributes connections across
307  *               the list of hosts. If the actual host is not reachable,
308  *               spmfilter switches back to failover configuration.
309  *    failover = when you configure the backend profile for
310  *               failover, spmfilter fails over to the next host in
311  *               the list if it cannot connect to the first host.
312  * @param settings a SMFSettings_T object
313  * @param conn backend connection
314  */
315 void smf_settings_set_backend_connection(SMFSettings_T *settings, char *conn);
316 
317 /*!
318  * @fn char *smf_settings_get_backend_connection(SMFSettings_T *settings)
319  * @brief Get backend connection setting
320  * @param settings a SMFSettings_T object
321  * @returns backend connection
322  */
323 char *smf_settings_get_backend_connection(SMFSettings_T *settings);
324 
325 /*!
326  * @fn void smf_settings_set_add_header(SMFSettings_T *settings, int i)
327  * @brief Define if spmfilter should add it's own header
328  * @param settings a SMFSettings_T object
329  * @param i add_header value, either 1 (true) or 0 (false)
330  */
331 void smf_settings_set_add_header(SMFSettings_T *settings, int i);
332 
333 /*!
334  * @fn int smf_settings_get_add_header(SMFSettings_T *settings)
335  * @brief Get add_header setting
336  * @param settings a SMFSettings_T object
337  * @returns add_header value
338  */
339 int smf_settings_get_add_header(SMFSettings_T *settings);
340 
341 /*!
342  * @fn void smf_settings_set_max_size(SMFSettings_T *settings, unsigned long size)
343  * @brief Set max. allowed message size in byte
344  * @param settings a SMFSettings_T object
345  * @param size max_size setting
346  */
347 void smf_settings_set_max_size(SMFSettings_T *settings, unsigned long size);
348 
349 /*!
350  * @fn unsigned long smf_settings_get_max_size(SMFSettings_T *settings)
351  * @brief Get max_size setting in bytes
352  * @param settings a SMFSettings_T object
353  * @returns max_size value
354  */
355 unsigned long smf_settings_get_max_size(SMFSettings_T *settings);
356 
357 /*!
358  * @fn void smf_settings_set_tls(SMFSettings_T *settings, SMFTlsOption_T t)
359  * @brief Set tls setting
360  * @param settings a SMFSettings_T object
361  * @param t a SMFTlsOption_T value
362  */
363 void smf_settings_set_tls(SMFSettings_T *settings, SMFTlsOption_T t);
364 
365 /*!
366  * @fn SMFTlsOption_T smf_settings_get_tls(SMFSettings_T *settings)
367  * @brief Get tls setting
368  * @param settings a SMFSettings_T object
369  * @returns a SMFTlsOption_T value
370  */
371 SMFTlsOption_T smf_settings_get_tls(SMFSettings_T *settings);
372 
373 /*!
374  * @fn void smf_settings_set_lib_dir(SMFSettings_T *settings, char *lib_dir)
375  * @brief Set path to shared libraries, if needed.
376  * @param settings a SMFSettings_T object
377  * @param lib_dir path to shared libraries folder
378  */
379 void smf_settings_set_lib_dir(SMFSettings_T *settings, char *lib_dir);
380 
381 /*!
382  * @fn char *smf_settings_get_lib_dir(SMFSettings_T *settings)
383  * @brief Get shared library folder
384  * @param settings a SMFSettings_T object
385  * @returns shared library folder
386  */
387 char *smf_settings_get_lib_dir(SMFSettings_T *settings);
388 
389 /*!
390  * @fn void smf_settings_set_pid_file(SMFSettings_T *settings, char *pid_file)
391  * @brief Set pid file
392  * @param settings a SMFSettings_T object
393  * @param pid_file char pointer with pid file path
394  */
395 void smf_settings_set_pid_file(SMFSettings_T *settings, char *pid_file);
396 
397 /*!
398  * @fn char *smf_settings_get_pid_file(SMFSettings_T *settings)
399  * @brief Get current pid file
400  * @param settings a SMFSettings_T object
401  * @returns char pointer with pid file path
402  */
403 char *smf_settings_get_pid_file(SMFSettings_T *settings);
404 
405 /*!
406  * @fn void smf_settings_set_bind_ip(SMFSettings_T *settings, char *ip)
407  * @brief Set bind ip
408  * @param settings a SMFSettings_T object
409  * @param ip char pointer with ip
410  */
411 void smf_settings_set_bind_ip(SMFSettings_T *settings, char *ip);
412 
413 /*!
414  * @fn char *smf_settings_get_bind_ip(SMFSettings_T *settings)
415  * @brief Get current bind ip
416  * @param settings a SMFSettings_T object
417  * @returns char pointer with ip
418  */
419 char *smf_settings_get_bind_ip(SMFSettings_T *settings);
420 
421 /*!
422  * @fn void smf_settings_set_bind_port(SMFSettings_T *settings, int port)
423  * @brief Set bind port
424  * @param settings a SMFSettings_T object
425  * @param port port number
426  */
427 void smf_settings_set_bind_port(SMFSettings_T *settings, int port);
428 
429 /*!
430  * @fn int smf_settings_get_bind_port(SMFSettings_T *settings)
431  * @brief Get current bind port
432  * @param settings a SMFSettings_T object
433  * @returns port number
434  */
435 int smf_settings_get_bind_port(SMFSettings_T *settings);
436 
437 /*!
438  * @fn void smf_settings_set_listen_backlog(SMFSettings_T *settings, int backlog)
439  * @brief Set listen backlog
440  * @param settings a SMFSettings_T object
441  * @param backlog max. number of listen backlog queue
442  */
443 void smf_settings_set_listen_backlog(SMFSettings_T *settings, int backlog);
444 
445 /*!
446  * @fn int smf_settings_get_listen_backlog(SMFSettings_T *settings)
447  * @brief Get listen backlog number
448  * @param settings a SMFSettings_T object
449  * @returns listen backlog number
450  */
451 int smf_settings_get_listen_backlog(SMFSettings_T *settings);
452 
453 /*!
454  * @fn void smf_settings_set_foreground(SMFSettings_T *settings, int foreground)
455  * @brief Set foreground config option
456  * @param settings a SMFSettings_T object
457  * @param foreground foreground config options (1 = true, 0 = false)
458  */
459 void smf_settings_set_foreground(SMFSettings_T *settings, int foreground);
460 
461 /*!
462  * @fn int smf_settings_get_foreground(SMFSettings_T *settings)
463  * @brief Get foreground setting
464  * @param settings a SMFSettings_T object
465  * @returns foreground setting
466  */
467 int smf_settings_get_foreground(SMFSettings_T *settings);
468 
469 /*!
470  * @fn void smf_settings_set_user(SMFSettings_T *settings, char *user)
471  * @brief Set effective user
472  * @param settings a SMFSettings_T object
473  * @param user effective username
474  */
475 void smf_settings_set_user(SMFSettings_T *settings, char *user);
476 
477 /*!
478  * @fn char *smf_settings_get_user(SMFSettings_T *settings)
479  * @brief Get effective user
480  * @param settings a SMFSettings_T object
481  * @returns char pointer with username
482  */
483 char *smf_settings_get_user(SMFSettings_T *settings);
484 
485 /*!
486  * @fn void smf_settings_set_group(SMFSettings_T *settings, char *group)
487  * @brief Set effective group
488  * @param settings a SMFSettings_T object
489  * @param group effective groupname
490  */
491 void smf_settings_set_group(SMFSettings_T *settings, char *group);
492 
493 /*!
494  * @fn char *smf_settings_get_group(SMFSettings_T *settings)
495  * @brief Get effective group
496  * @param settings a SMFSettings_T object
497  * @returns char pointer with groupname
498  */
499 char *smf_settings_get_group(SMFSettings_T *settings);
500 
501 /*!
502  * @fn void smf_settings_set_max_childs(SMFSettings_T *settings, int max_childs)
503  * @brief Set the number of maximal allowed processes
504  * @param settings a SMFSettings_T object
505  * @param max_childs number of processes
506  */
507 void smf_settings_set_max_childs(SMFSettings_T *settings, int max_childs);
508 
509 /*!
510  * @fn int smf_settings_get_max_childs(SMFSettings_T *settings)
511  * @brief Get number of maxmimal allowed processes
512  * @param settings a SMFSettings_T object
513  * @returns number of processes
514  */
515 int smf_settings_get_max_childs(SMFSettings_T *settings);
516 
517 /*!
518  * @fn void smf_settings_set_spare_childs(SMFSettings_T *settings, int spare_childs)
519  * @brief Set the number of spare child processes
520  * @param settings a SMFSettings_T object
521  * @param spare_childs number of spare processes
522  */
523 void smf_settings_set_spare_childs(SMFSettings_T *settings, int spare_childs);
524 
525 /*!
526  * @fn int smf_settings_get_spare_childs(SMFSettings_T *settings)
527  * @brief Get number of spare processes
528  * @param settings a SMFSettings_T object
529  * @returns number of spare processes
530  */
531 int smf_settings_get_spare_childs(SMFSettings_T *settings);
532 
533 /*!
534  * @fn void smf_settings_set_syslog_facility(SMFSettings_T *settings, char *facility)
535  * @brief Set syslog facility
536  * @param settings a SMFSettings_T object
537  * @param facility syslog facility
538  */
539 void smf_settings_set_syslog_facility(SMFSettings_T *settings, char *facility);
540 
541 /*!
542  * @fn int smf_settings_get_syslog_facility(SMFSettings_T *settings)
543  * @brief Get syslog facility
544  * @param settings a SMFSettings_T object
545  * @returns syslog facility
546  */
547 int smf_settings_get_syslog_facility(SMFSettings_T *settings);
548 
549 /*!
550  * @fn int smf_settings_set_smtp_code(SMFSettings_T *settings, int code, char *msg)
551  * @brief Add smtp return code to list
552  * @param settings a SMFSettings_T object
553  * @param code smtp code
554  * @param msg smtp return message
555  * @returns 0 on success or -1 in case of error
556  */
557 int smf_settings_set_smtp_code(SMFSettings_T *settings, int code, char *msg);
558 
559 /*!
560  * @fn char *smf_settings_get_smtp_code(SMFSettings_T *settings, int code)
561  * @brief Get smtp return code message of given code
562  * @param settings a SMFSettings_T object
563  * @param code to look for
564  * @returns smtp return message for given code
565  */
566 char *smf_settings_get_smtp_code(SMFSettings_T *settings, int code);
567 
568 /*!
569  * @fn void smf_settings_set_smtpd_timeout(SMFSettings_T *settings, int timeout)
570  * @brief Set time limit for receiving a remote SMTP client request
571  * @param settings a SMFSettings_T object
572  * @param timeout timeout limit in seconds
573  */
574 void smf_settings_set_smtpd_timeout(SMFSettings_T *settings, int timeout);
575 
576 /*!
577  * @fn int smf_settings_get_smtpd_timeout(SMFSettings_T *settings)
578  * @brief Get time limit for receiving a remote SMTP client request
579  * @param settings a SMFSettings_T object
580  * @returns timeout smtpd timeout in seconds
581  */
582 int smf_settings_get_smtpd_timeout(SMFSettings_T *settings);
583 
584 /*!
585  * @fn void smf_settings_set_sql_driver(SMFSettings_T *settings, char *driver)
586  * @brief Set SQL driver, which should be used.
587  *  Possible values are:
588  *  - mysql
589  *  - postgresql
590  *  - sqlite
591  * @param settings a SMFSettings_T object
592  * @param driver sql_driver value
593  */
594 void smf_settings_set_sql_driver(SMFSettings_T *settings, char *driver);
595 
596 /*!
597  * @fn char *smf_settings_get_sql_driver(SMFSettings_T *settings)
598  * @brief Get sql_driver setting
599  * @param settings a SMFSettings_T object
600  * @returns sql_driver value
601  */
602 char *smf_settings_get_sql_driver(SMFSettings_T *settings);
603 
604 /*!
605  * @fn void smf_settings_set_sql_name(SMFSettings_T *settings, char *name)
606  * @brief Set SQL database name
607  * @param settings a SMFSettings_T object
608  * @param name database name
609  */
610 void smf_settings_set_sql_name(SMFSettings_T *settings, char *name);
611 
612 /*!
613  * @fn char *smf_settings_get_sql_name(SMFSettings_T *settings)
614  * @brief Get SQL database name
615  * @param settings a SMFSettings_T object
616  * @returns sql_name value
617  */
618 char *smf_settings_get_sql_name(SMFSettings_T *settings);
619 
620 /*!
621  * @fn int smf_settings_add_sql_host(SMFSettings_T *settings, char *host)
622  * @brief Set SQL host(s)
623  * @param settings a SMFSettings_T object
624  * @param host sql_host list
625  * @returns 0 on success or -1 in case of error
626  */
627 int smf_settings_add_sql_host(SMFSettings_T *settings, char *host);
628 
629 /*!
630  * @fn SMFList_T *smf_settings_get_sql_hosts(SMFSettings_T *settings)
631  * @brief Get SQL host(s)
632  * @param settings a SMFSettings_T object
633  * @returns sql_host list
634  */
635 SMFList_T *smf_settings_get_sql_hosts(SMFSettings_T *settings);
636 
637 /*!
638  * @fn void smf_settings_set_sql_port(SMFSettings_T *settings, int port)
639  * @brief Set SQL port
640  * @param settings a SMFSettings_T object
641  * @param port sql port
642  */
643 void smf_settings_set_sql_port(SMFSettings_T *settings, int port);
644 
645 /*!
646  * @fn int smf_settings_get_sql_port(SMFSettings_T *settings)
647  * @brief Get SQL port
648  * @param settings a SMFSettings_T object
649  * @returns sql_port value
650  */
651 int smf_settings_get_sql_port(SMFSettings_T *settings);
652 
653 /*!
654  * @fn void smf_settings_set_sql_user(SMFSettings_T *settings, char *user)
655  * @brief Set SQL username
656  * @param settings a SMFSettings_T object
657  * @param user sql user value
658  */
659 void smf_settings_set_sql_user(SMFSettings_T *settings, char *user);
660 
661 /*!
662  * @fn char *smf_settings_get_sql_user(SMFSettings_T *settings)
663  * @brief Get SQL username
664  * @param settings a SMFSettings_T object
665  * @returns sql_user value
666  */
667 char *smf_settings_get_sql_user(SMFSettings_T *settings);
668 
669 /*!
670  * @fn void smf_settings_set_sql_pass(SMFSettings_T *settings, char *pass)
671  * @brief Set SQL password
672  * @param settings a SMFSettings_T object
673  * @param pass sql_pass value
674  */
675 void smf_settings_set_sql_pass(SMFSettings_T *settings, char *pass);
676 
677 /*!
678  * @fn char *smf_settings_get_sql_pass(SMFSettings_T *settings)
679  * @brief Get SQL password
680  * @param settings a SMFSettings_T object
681  * @returns sql_pass value
682  */
683 char *smf_settings_get_sql_pass(SMFSettings_T *settings);
684 
685 /*!
686  * @fn void smf_settings_set_sql_user_query(SMFSettings_T *settings, char *query)
687  * @brief Set sql_user_query setting
688  * @param settings a SMFSettings_T object
689  * @param query sql user query value
690  */
691 void smf_settings_set_sql_user_query(SMFSettings_T *settings, char *query);
692 
693 /*!
694  * @fn char *smf_settings_get_sql_user_query(SMFSettings_T *settings)
695  * @brief Get sql_user_query setting
696  * @param settings a SMFSettings_T object
697  * @returns sql user query value
698  */
699 char *smf_settings_get_sql_user_query(SMFSettings_T *settings);
700 
701 /*!
702  * @fn void smf_settings_set_sql_encoding(SMFSettings_T *settings, char *encoding)
703  * @brief Set SQL encoding
704  * @param settings a SMFSettings_T object
705  * @param encoding sql encoding
706  */
707 void smf_settings_set_sql_encoding(SMFSettings_T *settings, char *encoding);
708 
709 /*!
710  * @fn char *smf_settings_get_sql_encoding(SMFSettings_T *settings)
711  * @brief Get SQL encoding
712  * @param settings a SMFSettings_T object
713  * @returns sql encoding
714  */
715 char *smf_settings_get_sql_encoding(SMFSettings_T *settings);
716 
717 /*!
718  * @fn void smf_settings_set_sql_max_connections(SMFSettings_T *settings, int i)
719  * @brief Set max. number of SQL connections
720  * @param settings a SMFSettings_T object
721  * @param i number of max allowed connections
722  */
723 void smf_settings_set_sql_max_connections(SMFSettings_T *settings, int i);
724 
725 /*!
726  * @fn int smf_settings_get_sql_max_connections(SMFSettings_T *settings)
727  * @brief Get max. number of SQL connections
728  * @param settings a SMFSettings_T object
729  * @returns number of max. connections
730  */
731 int smf_settings_get_sql_max_connections(SMFSettings_T *settings);
732 
733 /*!
734  * @fn void smf_settings_set_ldap_uri(SMFSettings_T *settings, char *uri)
735  * @brief Set LDAP uri
736  * @param settings a SMFSettings_T object
737  * @param uri ldap uri value
738  */
739 void smf_settings_set_ldap_uri(SMFSettings_T *settings, char *uri);
740 
741 /*!
742  * @fn char *smf_settings_get_ldap_uri(SMFSettings_T *settings)
743  * @brief Get LDAP uri
744  * @param settings a SMFSettings_T object
745  * @returns ldap uri value
746  */
747 char *smf_settings_get_ldap_uri(SMFSettings_T *settings);
748 
749 /*!
750  * @fn int smf_settings_add_ldap_host(SMFSettings_T *settings, char *host)
751  * @brief Set LDAP host(s)
752  * @param settings a SMFSettings_T object
753  * @param host ldap host list
754  * @returns 0 on success or -1 in case of error
755  */
756 int smf_settings_add_ldap_host(SMFSettings_T *settings, char *host);
757 
758 /*!
759  * @fn SMFList_T *smf_settings_get_ldap_hosts(SMFSettings_T *settings)
760  * @brief Get LDAP host(s)
761  * @param settings a SMFSettings_T object
762  * @returns ldap host list
763  */
764 SMFList_T *smf_settings_get_ldap_hosts(SMFSettings_T *settings);
765 
766 /*!
767  * @fn void smf_settings_set_ldap_port(SMFSettings_T *settings, int port)
768  * @brief Set LDAP port
769  * @param settings a SMFSettings_T object
770  * @param port ldap port value
771  */
772 void smf_settings_set_ldap_port(SMFSettings_T *settings, int port);
773 
774 /*!
775  * @fn int smf_settings_get_ldap_port(SMFSettings_T *settings)
776  * @brief Get LDAP port
777  * @param settings a SMFSettings_T object
778  * @returns ldap_port value
779  */
780 int smf_settings_get_ldap_port(SMFSettings_T *settings);
781 
782 /*!
783  * @fn void smf_settings_set_ldap_binddn(SMFSettings_T *settings, char *binddn)
784  * @brief Set LDAP binddn
785  * @param settings a SMFSettings_T object
786  * @param binddn ldap binddn value
787  */
788 void smf_settings_set_ldap_binddn(SMFSettings_T *settings, char *binddn);
789 
790 /*!
791  * @fn char *smf_settings_get_ldap_binddn(SMFSettings_T *settings)
792  * @brief Get LDAP binddn
793  * @param settings a SMFSettings_T object
794  * @returns ldap binddn value
795  */
796 char *smf_settings_get_ldap_binddn(SMFSettings_T *settings);
797 
798 /*!
799  * @fn void smf_settings_set_ldap_bindpw(SMFSettings_T *settings, char *bindpw)
800  * @brief Set LDAP bind password
801  * @param settings a SMFSettings_T object
802  * @param bindpw ldap bindpw value
803  */
804 void smf_settings_set_ldap_bindpw(SMFSettings_T *settings, char *bindpw);
805 
806 /*!
807  * @fn char *smf_settings_get_ldap_bindpw(SMFSettings_T *settings)
808  * @brief Get LDAP bind password
809  * @param settings a SMFSettings_T object
810  * @returns ldap_bindpw value
811  */
812 char *smf_settings_get_ldap_bindpw(SMFSettings_T *settings);
813 
814 /*!
815  * @fn void smf_settings_set_ldap_base(SMFSettings_T *settings, char *base)
816  * @brief Set LDAP search base
817  * @param settings a SMFSettings_T object
818  * @param base ldap base value
819  */
820 void smf_settings_set_ldap_base(SMFSettings_T *settings, char *base);
821 
822 /*!
823  * @fn char *smf_settings_get_ldap_base(SMFSettings_T *settings)
824  * @brief Get LDAP search base
825  * @param settings a SMFSettings_T object
826  * @returns ldap base value
827  */
828 char *smf_settings_get_ldap_base(SMFSettings_T *settings);
829 
830 /*!
831  * @fn void smf_settings_set_ldap_referrals(SMFSettings_T *settings, int i)
832  * @brief Set ldap_referrals setting
833  * @param settings a SMFSettings_T object
834  * @param i ldap referrals value
835  */
836 void smf_settings_set_ldap_referrals(SMFSettings_T *settings, int i);
837 
838 /*!
839  * @fn int smf_settings_get_ldap_referrals(SMFSettings_T *settings)
840  * @brief Get ldap_referrals setting
841  * @param settings a SMFSettings_T object
842  * @returns ldap referrals value
843  */
844 int smf_settings_get_ldap_referrals(SMFSettings_T *settings);
845 
846 /*!
847  * @fn void smf_settings_set_ldap_scope(SMFSettings_T *settings, char *scope)
848  * @brief Set LDAP scope
849  *  Possible values are:
850  *  - subtree
851  *  - onelevel
852  *  - base
853  * @param settings a SMFSettings_T object
854  * @param scope ldap scope value
855  */
856 void smf_settings_set_ldap_scope(SMFSettings_T *settings, char *scope);
857 
858 /*!
859  * @fn char *smf_settings_get_ldap_scope(SMFSettings_T *settings)
860  * @brief Get LDAP scope
861  * @param settings a SMFSettings_T object
862  * @returns ldap scope
863  */
864 char *smf_settings_get_ldap_scope(SMFSettings_T *settings);
865 
866 /*!
867  * @fn void smf_settings_set_ldap_user_query(SMFSettings_T *settings, char *query)
868  * @brief Set LDAP user query
869  * @param settings a SMFSettings_T object
870  * @param query ldap user query
871  */
872 void smf_settings_set_ldap_user_query(SMFSettings_T *settings, char *query);
873 
874 /*!
875  * @fn char *smf_settings_get_ldap_user_query(SMFSettings_T *settings)
876  * @brief Get LDAP user query
877  * @param settings a SMFSettings_T object
878  * @returns ldap user_query
879  */
880 char *smf_settings_get_ldap_user_query(SMFSettings_T *settings);
881 
882 /*!
883  * @fn int smf_settings_add_ldap_result_attribute(SMFSettings_T *settings, char *attribute)
884  * @brief Set LDAP result attribute(s)
885  * @param settings a SMFSettings_T object
886  * @param attribute name of ldap result attribute
887  * @returns 0 on success or -1 in case of error
888  */
889 int smf_settings_add_ldap_result_attribute(SMFSettings_T *settings, char *attribute);
890 
891 /*!
892  * @fn SMFList_T *smf_settings_get_ldap_result_attributes(SMFSettings_T *settings)
893  * @brief Get LDAP result attribute(s)
894  * @param settings a SMFSettings_T object
895  * @returns ldap result attribute list
896  */
897 SMFList_T *smf_settings_get_ldap_result_attributes(SMFSettings_T *settings);
898 
899 /*!
900  * @fn void smf_settings_set_lookup_persistent(SMFSettings_T *settings, int persistent)
901  * @brief Set lookup connection persistent
902  * @param settings a SMFSettings_T object
903  * @param persistent value as integer, 1 if true, 0 if false
904  */
905 void smf_settings_set_lookup_persistent(SMFSettings_T *settings, int persistent);
906 
907 /*!
908  * @fn int smf_settings_get_lookup_persistent(SMFSettings_T *settings)
909  * @brief Get the lookup persistent value
910  * @param settings a SMFSettings_T object
911  * @returns persistent value as integer, 1 if true, 0 if false
912  */
913 int smf_settings_get_lookup_persistent(SMFSettings_T *settings);
914 
915 /*!
916  * @fn char *smf_settings_group_get(SMFSettings_T *settings, char *group_name, char *key)
917  * @brief Returns the raw value associated with key under the selected group.
918  * @param settings a SMFSettings_T object
919  * @param group_name name of the settings section
920  * @param key a key
921  * @returns a newly allocated string or NULL if the specified key cannot be found.
922  */
923 char *smf_settings_group_get(SMFSettings_T *settings, char *group_name, char *key);
924 
925 /*!
926  * @fn int smf_settings_group_get_integer(SMFSettings_T *settings, char *group_name, char *key)
927  * @brief Returns the value associated with key under the selected group as an integer.
928  * @param settings a SMFSettings_T object
929  * @param group_name name of the settings section
930  * @param key a key
931  * @returns he value associated with the key as an integer, or 0 if the key was not found or could not be parsed.
932  */
933 int smf_settings_group_get_integer(SMFSettings_T *settings, char *group_name, char *key);
934 
935 /*!
936  * @fn int smf_settings_group_get_boolean(SMFSettings_T *settings, char *group_name, char *key)
937  * @brief Returns the boolean values associated with key under the selected group as integer.
938  * @param settings a SMFSettings_T object
939  * @param group_name name of the settings section
940  * @param key a key
941  * @returns the value associated with the key as a integer, 1 if true, 0 if false
942  */
943 int smf_settings_group_get_boolean(SMFSettings_T *settings, char *group_name, char *key);
944 
945 /*!
946  * @fn SMFList_T *smf_settings_group_get_list(SMFSettings_T *settings, char *group_name, char *key)
947  * @brief Returns the values associated with key under the selected group.
948  * @param settings a SMFSettings_T object
949  * @param group_name name of the settings section
950  * @param key a key
951  * @returns a newly allocated SMFList_T object or NULL on failure
952  */
953 SMFList_T *smf_settings_group_get_list(SMFSettings_T *settings, char *group_name, char *key);
954 
955 #endif  /* _SMF_SETTINGS_H */
956 
957