r9616: Finish ldb_map module (still needs a lot of testing though...)
[sfrench/samba-autobuild/.git] / source / lib / samba3 / ldb_samba3.c
1 /* 
2    ldb database library - Samba3 compatibility backend
3
4    Copyright (C) Jelmer Vernooij 2005
5
6      ** NOTE! The following LGPL license applies to the ldb
7      ** library. This does NOT imply that all of Samba is released
8      ** under the LGPL
9    
10    This library is free software; you can redistribute it and/or
11    modify it under the terms of the GNU Lesser General Public
12    License as published by the Free Software Foundation; either
13    version 2 of the License, or (at your option) any later version.
14
15    This library is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    Lesser General Public License for more details.
19
20    You should have received a copy of the GNU Lesser General Public
21    License along with this library; if not, write to the Free Software
22    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23 */
24
25 #include "includes.h"
26 #include "ldb/ldb_map/ldb_map.h"
27 #include "ldb/include/ldb.h"
28 #include "ldb/include/ldb_private.h"
29
30 /* 
31  *      gidNumber -> ???
32  *      sambaSID -> member
33  *      sambaSIDList -> member (special!)
34  */
35
36 /* sambaTrustPassword */
37
38 /*      sambaDomainName -> name */
39
40 /* sambaUnixIdPool */
41
42 /* sambaIdmapEntry */
43
44 /* sambaAccountPolicy: FIXME */
45
46 /* sambaSidEntry: FIXME */
47
48 /* Not necessary:
49  * sambaConfig
50  * sambaShare
51  * sambaConfigOption 
52  * sambaNextGroupRid
53  * sambaNextUserRid
54  * sambaAlgorithmicRidBase
55  */
56
57 /* sambaKickoffTime -> ???*/
58 /* sambaPwdCanChange  -> ???*/
59 /* sambaPwdMustChange  -> ???*/
60 /* sambaAcctFlags -> systemFlags ?*/
61 /* sambaHomePath  -> ???*/
62 /* sambaHomeDrive  -> ???*/
63 /* sambaLogonScript  -> ???*/
64 /* sambaProfilePath  -> ???*/
65 /* sambaUserWorkstations  -> ???*/
66 /* sambaDomainName  -> ???*/
67 /* sambaMungedDial -> ???*/
68 /* sambaPasswordHistory  -> ntPwdHistory*/
69 /* sambaLogonHours -> ???*/
70
71 /* sambaNextRid -> nextRid */
72 const struct ldb_map_attribute attr_nextRid = {
73         .local_name = "nextRid",
74         .type = MAP_RENAME,
75         .u.rename.remote_name = "sambaNextRid",
76 };
77
78 /* sambaBadPasswordTime -> badPasswordtime*/
79 const struct ldb_map_attribute attr_badPasswordTime = {
80         .local_name = "badPasswordTime",
81         .type = MAP_RENAME,
82         .u.rename.remote_name = "sambaBadPasswordTime",
83 };
84
85 /* sambaLMPassword -> lmPwdHash*/
86 const struct ldb_map_attribute attr_lmPwdHash = {
87         .local_name = "lmPwdHash",
88         .type = MAP_RENAME,
89         .u.rename.remote_name = "sambaLMPassword",
90 };
91
92 /* sambaGroupType -> groupType */
93 const struct ldb_map_attribute attr_groupType = {
94         .local_name = "groupType",
95         .type = MAP_RENAME,
96         .u.rename.remote_name = "sambaGroupType",
97 };
98
99 /* sambaNTPassword -> ntPwdHash*/
100 const struct ldb_map_attribute attr_ntPwdHash = {
101         .local_name = "badPwdCount",
102         .type = MAP_RENAME,
103         .u.rename.remote_name = "sambaNTPassword",
104 };
105
106 /* sambaPrimaryGroupSID -> primaryGroupID */
107 const struct ldb_map_attribute attr_primaryGroupID = {
108         .local_name = "primaryGroupID",
109         .type = MAP_CONVERT,
110         .u.convert.remote_name = "sambaPrimaryGroupSID",
111         .u.convert.convert_local = NULL, /* FIXME: Add domain SID */
112         .u.convert.convert_remote = NULL, /* FIXME: Extract RID */
113 };
114
115 /* sambaBadPasswordCount -> badPwdCount */
116 const struct ldb_map_attribute attr_badPwdCount = {
117         .local_name = "badPwdCount",
118         .type = MAP_RENAME,
119         .u.rename.remote_name = "sambaBadPasswordCount",
120 };
121
122 /* sambaLogonTime -> lastLogon*/
123 const struct ldb_map_attribute attr_lastLogon = {
124         .local_name = "lastLogon",
125         .type = MAP_RENAME,
126         .u.rename.remote_name = "sambaLogonTime",
127 };
128
129 /* sambaLogoffTime -> lastLogoff*/
130 const struct ldb_map_attribute attr_lastLogoff = {
131         .local_name = "lastLogoff",
132         .type = MAP_RENAME,
133         .u.rename.remote_name = "sambaLogoffTime",
134 };
135
136 /* gidNumber -> unixName */
137 const struct ldb_map_attribute attr_unixName_gid = {
138         .local_name = "unixName",
139         .type = MAP_CONVERT,
140         .u.convert.remote_name = "gidNumber",
141         .u.convert.convert_local = NULL, /* FIXME: Lookup gid */
142         .u.convert.convert_remote = NULL, /* FIXME: Lookup groupname */
143 };
144
145 /* uid -> unixName */
146 const struct ldb_map_attribute attr_unixName_uid = {
147         .local_name = "unixName",
148         .type = MAP_CONVERT,
149         .u.convert.remote_name = "uid",
150         .u.convert.convert_local = NULL, /* FIXME: Lookup uid */
151         .u.convert.convert_remote = NULL, /* FIXME: Lookup username */
152 };
153
154 /* displayName -> name */
155 const struct ldb_map_attribute attr_name = {
156         .local_name = "name",
157         .type = MAP_RENAME,
158         .u.rename.remote_name = "displayName",
159 };
160
161 /* cn */
162 const struct ldb_map_attribute attr_cn = {
163         .local_name = "cn",
164         .type = MAP_KEEP,
165 };
166
167 /* description */
168 const struct ldb_map_attribute attr_description = {
169         .local_name = "description",
170         .type = MAP_KEEP,
171 };
172
173 /* sambaSID -> objectSid*/
174 const struct ldb_map_attribute attr_objectSid = {
175         .local_name = "objectSid",
176         .type = MAP_RENAME,
177         .u.rename.remote_name = "sambaSID", 
178 };
179
180 /* sambaPwdLastSet -> pwdLastSet*/
181 const struct ldb_map_attribute attr_pwdLastSet = {
182         .local_name = "pwdLastSet",
183         .type = MAP_RENAME,
184         .u.rename.remote_name = "sambaPwdLastSet",
185 };
186
187 const struct ldb_map_objectclass samba3_objectclasses[] = {
188         { "group", "sambaGroupMapping" },
189         { "user", "sambaSAMAccount" },
190         { "domain", "sambaDomain" },
191 };
192
193 const struct ldb_map_mappings samba3_mappings = 
194 {
195         .name = "samba3",
196         {
197                 &attr_objectSid,
198                 &attr_pwdLastSet,
199                 &attr_description,
200                 &attr_cn,
201                 &attr_unixName_uid,
202                 &attr_unixName_gid,
203                 &attr_name,
204                 &attr_lastLogoff,
205                 &attr_lastLogon,
206                 &attr_primaryGroupID,
207                 &attr_badPwdCount,
208                 &attr_ntPwdHash,
209                 &attr_lmPwdHash,
210                 &attr_groupType,
211                 &attr_badPasswordTime,
212                 &attr_nextRid,
213         }
214 };      
215
216 /* the init function */
217 #ifdef HAVE_DLOPEN_DISABLED
218  struct ldb_module *init_module(struct ldb_context *ldb, const char *options[])
219 #else
220 struct ldb_module *ldb_samba3_module_init(struct ldb_context *ldb, const char *options[])
221 #endif
222 {
223         return ldb_map_init(ldb, &samba3_mappings, options);
224 }