r9621: Bunch of bug fixes. Add 'format' option to samba3dump (text,summary,ldif)
[sfrench/samba-autobuild/.git] / source4 / 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 /* FIXME: 
31  * sambaSID -> member 
32  * sambaSIDList -> member (special!) 
33  * sambaDomainName -> name 
34  * sambaTrustPassword 
35  * sambaUnixIdPool 
36  * sambaIdmapEntry 
37  * sambaAccountPolicy 
38  * sambaSidEntry 
39  * sambaAcctFlags -> systemFlags ?
40  * sambaPasswordHistory  -> ntPwdHistory*/
41
42 /* Not necessary:
43  * sambaConfig
44  * sambaShare
45  * sambaConfigOption 
46  * sambaNextGroupRid
47  * sambaNextUserRid
48  * sambaAlgorithmicRidBase
49  */
50
51 /* Not in Samba4: 
52  * sambaKickoffTime
53  * sambaPwdCanChange
54  * sambaPwdMustChange
55  * sambaHomePath
56  * sambaHomeDrive
57  * sambaLogonScript
58  * sambaProfilePath
59  * sambaUserWorkstations
60  * sambaMungedDial
61  * sambaLogonHours */
62
63 /* sambaNextRid -> nextRid */
64 const struct ldb_map_attribute attr_nextRid = {
65         .local_name = "nextRid",
66         .type = MAP_RENAME,
67         .u.rename.remote_name = "sambaNextRid",
68 };
69
70 /* sambaBadPasswordTime -> badPasswordtime*/
71 const struct ldb_map_attribute attr_badPasswordTime = {
72         .local_name = "badPasswordTime",
73         .type = MAP_RENAME,
74         .u.rename.remote_name = "sambaBadPasswordTime",
75 };
76
77 /* sambaLMPassword -> lmPwdHash*/
78 const struct ldb_map_attribute attr_lmPwdHash = {
79         .local_name = "lmPwdHash",
80         .type = MAP_RENAME,
81         .u.rename.remote_name = "sambaLMPassword",
82 };
83
84 /* sambaGroupType -> groupType */
85 const struct ldb_map_attribute attr_groupType = {
86         .local_name = "groupType",
87         .type = MAP_RENAME,
88         .u.rename.remote_name = "sambaGroupType",
89 };
90
91 /* sambaNTPassword -> ntPwdHash*/
92 const struct ldb_map_attribute attr_ntPwdHash = {
93         .local_name = "badPwdCount",
94         .type = MAP_RENAME,
95         .u.rename.remote_name = "sambaNTPassword",
96 };
97
98 /* sambaPrimaryGroupSID -> primaryGroupID */
99 const struct ldb_map_attribute attr_primaryGroupID = {
100         .local_name = "primaryGroupID",
101         .type = MAP_CONVERT,
102         .u.convert.remote_name = "sambaPrimaryGroupSID",
103         .u.convert.convert_local = NULL, /* FIXME: Add domain SID */
104         .u.convert.convert_remote = NULL, /* FIXME: Extract RID */
105 };
106
107 /* sambaBadPasswordCount -> badPwdCount */
108 const struct ldb_map_attribute attr_badPwdCount = {
109         .local_name = "badPwdCount",
110         .type = MAP_RENAME,
111         .u.rename.remote_name = "sambaBadPasswordCount",
112 };
113
114 /* sambaLogonTime -> lastLogon*/
115 const struct ldb_map_attribute attr_lastLogon = {
116         .local_name = "lastLogon",
117         .type = MAP_RENAME,
118         .u.rename.remote_name = "sambaLogonTime",
119 };
120
121 /* sambaLogoffTime -> lastLogoff*/
122 const struct ldb_map_attribute attr_lastLogoff = {
123         .local_name = "lastLogoff",
124         .type = MAP_RENAME,
125         .u.rename.remote_name = "sambaLogoffTime",
126 };
127
128 /* gidNumber -> unixName */
129 const struct ldb_map_attribute attr_unixName_gid = {
130         .local_name = "unixName",
131         .type = MAP_CONVERT,
132         .u.convert.remote_name = "gidNumber",
133         .u.convert.convert_local = NULL, /* FIXME: Lookup gid */
134         .u.convert.convert_remote = NULL, /* FIXME: Lookup groupname */
135 };
136
137 /* uid -> unixName */
138 const struct ldb_map_attribute attr_unixName_uid = {
139         .local_name = "unixName",
140         .type = MAP_CONVERT,
141         .u.convert.remote_name = "uid",
142         .u.convert.convert_local = NULL, /* FIXME: Lookup uid */
143         .u.convert.convert_remote = NULL, /* FIXME: Lookup username */
144 };
145
146 /* displayName -> name */
147 const struct ldb_map_attribute attr_name = {
148         .local_name = "name",
149         .type = MAP_RENAME,
150         .u.rename.remote_name = "displayName",
151 };
152
153 /* cn */
154 const struct ldb_map_attribute attr_cn = {
155         .local_name = "cn",
156         .type = MAP_KEEP,
157 };
158
159 /* description */
160 const struct ldb_map_attribute attr_description = {
161         .local_name = "description",
162         .type = MAP_KEEP,
163 };
164
165 /* sambaSID -> objectSid*/
166 const struct ldb_map_attribute attr_objectSid = {
167         .local_name = "objectSid",
168         .type = MAP_RENAME,
169         .u.rename.remote_name = "sambaSID", 
170 };
171
172 /* sambaPwdLastSet -> pwdLastSet*/
173 const struct ldb_map_attribute attr_pwdLastSet = {
174         .local_name = "pwdLastSet",
175         .type = MAP_RENAME,
176         .u.rename.remote_name = "sambaPwdLastSet",
177 };
178
179 const struct ldb_map_objectclass samba3_objectclasses[] = {
180         { "group", "sambaGroupMapping" },
181         { "user", "sambaSAMAccount" },
182         { "domain", "sambaDomain" },
183 };
184
185 const struct ldb_map_mappings samba3_mappings = 
186 {
187         .name = "samba3",
188         {
189                 &attr_objectSid,
190                 &attr_pwdLastSet,
191                 &attr_description,
192                 &attr_cn,
193                 &attr_unixName_uid,
194                 &attr_unixName_gid,
195                 &attr_name,
196                 &attr_lastLogoff,
197                 &attr_lastLogon,
198                 &attr_primaryGroupID,
199                 &attr_badPwdCount,
200                 &attr_ntPwdHash,
201                 &attr_lmPwdHash,
202                 &attr_groupType,
203                 &attr_badPasswordTime,
204                 &attr_nextRid,
205         }
206 };      
207
208 /* the init function */
209 #ifdef HAVE_DLOPEN_DISABLED
210  struct ldb_module *init_module(struct ldb_context *ldb, const char *options[])
211 #else
212 struct ldb_module *ldb_samba3_module_init(struct ldb_context *ldb, const char *options[])
213 #endif
214 {
215         return ldb_map_init(ldb, &samba3_mappings, options);
216 }