xref: /netbsd-src/external/bsd/openldap/dist/servers/slapd/back-sock/config.c (revision c7c727fae85036860d5bb848f2730ff419e2b060)
1 /*	$NetBSD: config.c,v 1.1.1.3 2010/12/12 15:23:22 adam Exp $	*/
2 
3 /* config.c - sock backend configuration file routine */
4 /* OpenLDAP: pkg/ldap/servers/slapd/back-sock/config.c,v 1.5.2.3 2010/04/13 20:23:40 kurt Exp */
5 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
6  *
7  * Copyright 2007-2010 The OpenLDAP Foundation.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted only as authorized by the OpenLDAP
12  * Public License.
13  *
14  * A copy of this license is available in the file LICENSE in the
15  * top-level directory of the distribution or, alternatively, at
16  * <http://www.OpenLDAP.org/license.html>.
17  */
18 /* ACKNOWLEDGEMENTS:
19  * This work was initially developed by Brian Candler for inclusion
20  * in OpenLDAP Software. Dynamic config support by Howard Chu.
21  */
22 
23 #include "portable.h"
24 
25 #include <stdio.h>
26 
27 #include <ac/string.h>
28 #include <ac/socket.h>
29 
30 #include "slap.h"
31 #include "config.h"
32 #include "back-sock.h"
33 
34 static ConfigDriver bs_cf_gen;
35 
36 enum {
37 	BS_EXT = 1
38 };
39 
40 static ConfigTable bscfg[] = {
41 	{ "socketpath", "pathname", 2, 2, 0, ARG_STRING|ARG_OFFSET,
42 		(void *)offsetof(struct sockinfo, si_sockpath),
43 		"( OLcfgDbAt:7.1 NAME 'olcDbSocketPath' "
44 			"DESC 'Pathname for Unix domain socket' "
45 			"EQUALITY caseExactMatch "
46 			"SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
47 	{ "extensions", "ext", 2, 0, 0, ARG_MAGIC|BS_EXT,
48 		bs_cf_gen, "( OLcfgDbAt:7.2 NAME 'olcDbSocketExtensions' "
49 			"DESC 'binddn, peername, or ssf' "
50 			"EQUALITY caseIgnoreMatch "
51 			"SYNTAX OMsDirectoryString )", NULL, NULL },
52 	{ NULL, NULL }
53 };
54 
55 static ConfigOCs bsocs[] = {
56 	{ "( OLcfgDbOc:7.1 "
57 		"NAME 'olcDbSocketConfig' "
58 		"DESC 'Socket backend configuration' "
59 		"SUP olcDatabaseConfig "
60 		"MUST olcDbSocketPath "
61 		"MAY olcDbSocketExtensions )",
62 			Cft_Database, bscfg },
63 	{ NULL, 0, NULL }
64 };
65 
66 static slap_verbmasks bs_exts[] = {
67 	{ BER_BVC("binddn"), SOCK_EXT_BINDDN },
68 	{ BER_BVC("peername"), SOCK_EXT_PEERNAME },
69 	{ BER_BVC("ssf"), SOCK_EXT_SSF },
70 	{ BER_BVNULL, 0 }
71 };
72 
73 static int
74 bs_cf_gen( ConfigArgs *c )
75 {
76 	struct sockinfo	*si = c->be->be_private;
77 	int rc;
78 
79 	if ( c->op == SLAP_CONFIG_EMIT ) {
80 		switch( c->type ) {
81 		case BS_EXT:
82 			return mask_to_verbs( bs_exts, si->si_extensions, &c->rvalue_vals );
83 		}
84 	} else if ( c->op == LDAP_MOD_DELETE ) {
85 		switch( c->type ) {
86 		case BS_EXT:
87 			if ( c->valx < 0 ) {
88 				si->si_extensions = 0;
89 				rc = 0;
90 			} else {
91 				slap_mask_t dels = 0;
92 				rc = verbs_to_mask( c->argc, c->argv, bs_exts, &dels );
93 				if ( rc == 0 )
94 					si->si_extensions ^= dels;
95 			}
96 			return rc;
97 		}
98 
99 	} else {
100 		switch( c->type ) {
101 		case BS_EXT:
102 			return verbs_to_mask( c->argc, c->argv, bs_exts, &si->si_extensions );
103 		}
104 	}
105 	return 1;
106 }
107 
108 int
109 sock_back_init_cf( BackendInfo *bi )
110 {
111 	bi->bi_cf_ocs = bsocs;
112 
113 	return config_register_schema( bscfg, bsocs );
114 }
115