2 ldb database library - Samba3 SAM compatibility backend
4 Copyright (C) Jelmer Vernooij 2005
8 #include "ldb/modules/ldb_map.h"
9 #include "ldb/include/ldb.h"
10 #include "ldb/include/ldb_private.h"
11 #include "librpc/gen_ndr/ndr_security.h"
14 * sambaSID -> member (dn!)
15 * sambaSIDList -> member (dn!)
16 * sambaDomainName -> name
22 * sambaAcctFlags -> systemFlags ?
23 * sambaPasswordHistory -> ntPwdHistory*/
31 * sambaAlgorithmicRidBase
42 * sambaUserWorkstations
46 /* In Samba4 but not in Samba3:
49 static struct ldb_val convert_sid_rid(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
51 printf("Converting SID TO RID *\n");
55 return ldb_val_dup(ctx, val);
58 static struct ldb_val convert_rid_sid(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
60 printf("Converting RID TO SID *\n");
64 return ldb_val_dup(ctx, val);
67 static struct ldb_val convert_unix_id2name(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
69 printf("Converting UNIX ID to name\n");
73 return ldb_val_dup(ctx, val);
76 static struct ldb_val convert_unix_name2id(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
78 printf("Converting UNIX name to ID\n");
82 return ldb_val_dup(ctx, val);
85 static struct ldb_val encode_sid(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
87 struct dom_sid *sid = dom_sid_parse_talloc(ctx, (char *)val->data);
88 struct ldb_val *out = talloc_zero(out, struct ldb_val);
94 status = ndr_push_struct_blob(out, ctx, sid,
95 (ndr_push_flags_fn_t)ndr_push_dom_sid);
97 if (!NT_STATUS_IS_OK(status)) {
104 static struct ldb_val decode_sid(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
108 struct ldb_val *out = talloc_zero(ctx, struct ldb_val);
110 sid = talloc(ctx, struct dom_sid);
114 status = ndr_pull_struct_blob(val, sid, sid,
115 (ndr_pull_flags_fn_t)ndr_pull_dom_sid);
116 if (!NT_STATUS_IS_OK(status)) {
120 out->data = (uint8_t *)dom_sid_string(ctx, sid);
122 if (out->data == NULL) {
125 out->length = strlen((const char *)out->data);
130 const struct ldb_map_objectclass samba3_objectclasses[] = {
131 { "group", "sambaGroupMapping" },
132 { "user", "sambaSAMAccount" },
133 { "domain", "sambaDomain" },
137 const struct ldb_map_attribute samba3_attributes[] =
139 /* sambaNextRid -> nextRid */
141 .local_name = "nextRid",
145 .remote_name = "sambaNextRid",
150 /* sambaBadPasswordTime -> badPasswordtime*/
152 .local_name = "badPasswordTime",
156 .remote_name = "sambaBadPasswordTime",
161 /* sambaLMPassword -> lmPwdHash*/
163 .local_name = "lmPwdHash",
167 .remote_name = "sambaLMPassword",
172 /* sambaGroupType -> groupType */
174 .local_name = "groupType",
178 .remote_name = "sambaGroupType",
183 /* sambaNTPassword -> ntPwdHash*/
185 .local_name = "ntPwdHash",
189 .remote_name = "sambaNTPassword",
194 /* sambaPrimaryGroupSID -> primaryGroupID */
196 .local_name = "primaryGroupID",
200 .remote_name = "sambaPrimaryGroupSID",
201 .convert_local = convert_rid_sid,
202 .convert_remote = convert_sid_rid,
207 /* sambaBadPasswordCount -> badPwdCount */
209 .local_name = "badPwdCount",
213 .remote_name = "sambaBadPasswordCount",
218 /* sambaLogonTime -> lastLogon*/
220 .local_name = "lastLogon",
224 .remote_name = "sambaLogonTime",
229 /* sambaLogoffTime -> lastLogoff*/
231 .local_name = "lastLogoff",
235 .remote_name = "sambaLogoffTime",
240 /* gidNumber -> unixName */
242 .local_name = "unixName",
246 .remote_name = "gidNumber",
251 /* uid -> unixName */
253 .local_name = "unixName",
257 .remote_name = "uid",
262 /* displayName -> name */
264 .local_name = "name",
268 .remote_name = "displayName",
279 /* sAMAccountName -> cn */
281 .local_name = "sAMAccountName",
285 .remote_name = "uid",
292 .local_name = "objectCategory",
298 .local_name = "objectGUID",
304 .local_name = "objectVersion",
310 .local_name = "codePage",
316 .local_name = "dNSHostName",
323 .local_name = "dnsDomain",
329 .local_name = "dnsRoot",
335 .local_name = "countryCode",
341 .local_name = "nTMixedDomain",
345 /* operatingSystem */
347 .local_name = "operatingSystem",
351 /* operatingSystemVersion */
353 .local_name = "operatingSystemVersion",
358 /* servicePrincipalName */
360 .local_name = "servicePrincipalName",
364 /* msDS-Behavior-Version */
366 .local_name = "msDS-Behavior-Version",
370 /* msDS-KeyVersionNumber */
372 .local_name = "msDS-KeyVersionNumber",
376 /* msDs-masteredBy */
378 .local_name = "msDs-masteredBy",
396 .local_name = "description",
400 /* sambaSID -> objectSid*/
402 .local_name = "objectSid",
406 .remote_name = "sambaSID",
407 .convert_local = decode_sid,
408 .convert_remote = encode_sid,
413 /* sambaPwdLastSet -> pwdLastSet */
415 .local_name = "pwdLastSet",
419 .remote_name = "sambaPwdLastSet",
426 .local_name = "accountExpires",
432 .local_name = "adminCount",
438 .local_name = "canonicalName",
442 /* createTimestamp */
444 .local_name = "createTimestamp",
450 .local_name = "creationTime",
456 .local_name = "dMDLocation",
462 .local_name = "fSMORoleOwner",
468 .local_name = "forceLogoff",
474 .local_name = "instanceType",
480 .local_name = "invocationId",
484 /* isCriticalSystemObject */
486 .local_name = "isCriticalSystemObject",
490 /* localPolicyFlags */
492 .local_name = "localPolicyFlags",
496 /* lockOutObservationWindow */
498 .local_name = "lockOutObservationWindow",
502 /* lockoutDuration */
504 .local_name = "lockoutDuration",
508 /* lockoutThreshold */
510 .local_name = "lockoutThreshold",
516 .local_name = "logonCount",
522 .local_name = "masteredBy",
528 .local_name = "maxPwdAge",
534 .local_name = "member",
540 .local_name = "memberOf",
546 .local_name = "minPwdAge",
552 .local_name = "minPwdLength",
558 .local_name = "modifiedCount",
562 /* modifiedCountAtLastProm */
564 .local_name = "modifiedCountAtLastProm",
568 /* modifyTimestamp */
570 .local_name = "modifyTimestamp",
576 .local_name = "nCName",
582 .local_name = "nETBIOSName",
588 .local_name = "oEMInformation",
594 .local_name = "privilege",
598 /* pwdHistoryLength */
600 .local_name = "pwdHistoryLength",
606 .local_name = "pwdProperties",
610 /* rIDAvailablePool */
612 .local_name = "rIDAvailablePool",
618 .local_name = "revision",
622 /* ridManagerReference */
624 .local_name = "ridManagerReference",
630 .local_name = "sAMAccountType",
636 .local_name = "sPNMappings",
640 /* serverReference */
642 .local_name = "serverReference",
648 .local_name = "serverState",
652 /* showInAdvancedViewOnly */
654 .local_name = "showInAdvancedViewOnly",
660 .local_name = "subRefs",
666 .local_name = "systemFlags",
672 .local_name = "uASCompat",
678 .local_name = "uSNChanged",
684 .local_name = "uSNCreated",
690 .local_name = "unicodePwd",
694 /* userAccountControl */
696 .local_name = "userAccountControl",
702 .local_name = "whenChanged",
708 .local_name = "whenCreated",
717 /* the init function */
718 #ifdef HAVE_DLOPEN_DISABLED
719 struct ldb_module *init_module(struct ldb_context *ldb, const char *options[])
721 struct ldb_module *ldb_samba3sam_module_init(struct ldb_context *ldb, const char *options[])
724 return ldb_map_init(ldb, samba3_attributes, samba3_objectclasses, "samba3sam");