static NTSTATUS testsam_init(struct pdb_methods **pdb_method, const char *location) { NTSTATUS nt_status; if (!NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method ))) { return nt_status; } (*pdb_method)->name = "testsam"; /* Functions your pdb module doesn't provide should not be set, make_pdb_methods() already provide suitable defaults for missing functions */ (*pdb_method)->getsampwnam = testsam_getsampwnam; (*pdb_method)->getsampwsid = testsam_getsampwsid; (*pdb_method)->add_sam_account = testsam_add_sam_account; (*pdb_method)->update_sam_account = testsam_update_sam_account; (*pdb_method)->delete_sam_account = testsam_delete_sam_account; testsam_debug_level = debug_add_class("testsam"); if (testsam_debug_level == -1) { testsam_debug_level = DBGC_ALL; DEBUG(0, ("testsam: Couldn't register custom debugging class!\n")); } else DEBUG(0, ("testsam: Debug class number of 'testsam': %d\n", testsam_debug_level)); DEBUG(0, ("Initializing testsam\n")); if (location) DEBUG(10, ("Location: %s\n", location)); return NT_STATUS_OK; }
static NTSTATUS multisam_init(struct pdb_methods **pdb_method, const char *location) { NTSTATUS nt_status; int i; struct multisam_data *data; multisam_debug_level = debug_add_class("multisam"); if (multisam_debug_level == -1) { multisam_debug_level = DBGC_ALL; DEBUG(0, ("multisam: Couldn't register custom debugging class!\n")); } if ( !NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method )) ) { return nt_status; } data = talloc(*pdb_method, struct multisam_data); (*pdb_method)->private_data = data; /* Create default_methods with default functions (as in pdb_interface.c) */ if (!NT_STATUS_IS_OK(nt_status = make_pdb_method( &(data->default_methods)))) { DEBUG(0, ("Could not create default pdb_method\n")); return nt_status; } (*pdb_method)->name = "multisam"; /* Mandatory implementation */ (*pdb_method)->setsampwent = multisam_setsampwent; (*pdb_method)->endsampwent = multisam_endsampwent; (*pdb_method)->getsampwent = multisam_getsampwent; (*pdb_method)->getsampwnam = multisam_getsampwnam; (*pdb_method)->getsampwsid = multisam_getsampwsid; (*pdb_method)->add_sam_account = multisam_add_sam_account; (*pdb_method)->update_sam_account = multisam_update_sam_account; (*pdb_method)->delete_sam_account = multisam_delete_sam_account; (*pdb_method)->rename_sam_account = multisam_rename_sam_account; (*pdb_method)->rid_algorithm = multisam_rid_algorithm; (*pdb_method)->new_rid = multisam_dummy_new_rid; (*pdb_method)->create_user = multisam_create_user; (*pdb_method)->delete_user = multisam_delete_user; (*pdb_method)->uid_to_rid = multisam_uid_to_rid; (*pdb_method)->gid_to_sid = multisam_gid_to_sid; (*pdb_method)->sid_to_id = multisam_sid_to_id; /* Not yet implemented here */ #if 0 (*pdb_method)->update_login_attempts = multisam_update_login_attempts; (*pdb_method)->getgrsid = multisam_getgrsid; (*pdb_method)->getgrgid = multisam_getgrgid; (*pdb_method)->getgrnam = multisam_getgrnam; (*pdb_method)->create_dom_group = multisam_create_dom_group; (*pdb_method)->delete_dom_group = multisam_delete_dom_group; (*pdb_method)->enum_group_mapping = multisam_enum_group_mapping; (*pdb_method)->enum_group_members = multisam_enum_group_members; (*pdb_method)->enum_group_memberships = multisam_enum_group_memberships; (*pdb_method)->add_groupmem = multisam_add_groupmem; (*pdb_method)->del_groupmem = multisam_del_groupmem; (*pdb_method)->find_alias = multisam_find_alias; (*pdb_method)->create_alias = multisam_create_alias; (*pdb_method)->delete_alias = multisam_delete_alias; (*pdb_method)->get_aliasinfo = multisam_get_aliasinfo; (*pdb_method)->set_aliasinfo = multisam_set_aliasinfo; (*pdb_method)->add_aliasmem = multisam_add_aliasmem; (*pdb_method)->del_aliasmem = multisam_del_aliasmem; (*pdb_method)->enum_aliasmem = multisam_enum_aliasmem; (*pdb_method)->enum_alias_memberships = multisam_alias_memberships; (*pdb_method)->lookup_rids = multisam_lookup_rids; (*pdb_method)->get_account_policy = multisam_get_account_policy; (*pdb_method)->set_account_policy = multisam_set_account_policy; (*pdb_method)->get_seq_num = multisam_get_seq_num; (*pdb_method)->search_users = multisam_search_users; (*pdb_method)->search_groups = multisam_search_groups; (*pdb_method)->search_aliases = multisam_search_aliases; #endif if (!location) { DEBUG(0, ("No identifier specified. Check the Samba HOWTO Collection for details\n")); return NT_STATUS_INVALID_PARAMETER; } data->location = talloc_strdup(data, location); data->names = str_list_make_talloc(data, data->location, NULL); data->num_backends = str_list_count((const char **)data->names); data->locations = talloc_array(data, char *, data->num_backends); data->methods = talloc_array(data, struct pdb_methods *, data->num_backends); for (i = 0; i < data->num_backends; i++) { struct pdb_init_function_entry *entry = NULL; data->locations[i] = strchr(data->names[i], ':'); if (data->locations[i]) { *(data->locations[i]) = '\0'; data->locations[i]++; } entry = pdb_find_backend_entry(data->names[i]); if (!entry) { DEBUG(2,("No builtin backend found, trying to load plugin\n")); if(NT_STATUS_IS_OK(smb_probe_module("pdb", data->names[i])) && !(entry = pdb_find_backend_entry(data->names[i]))) { DEBUG(0,("Plugin is available, but doesn't register passdb backend %s\n", data->names[i])); return NT_STATUS_UNSUCCESSFUL; } } if (!entry) { DEBUG(0, ("Unable to find multisam backend %d: %s\n", i, data->names[i])); return NT_STATUS_UNSUCCESSFUL; } DEBUG(2, ("Found entry point. Loading multisam backend %d: %s\n", i, data->names[i])); nt_status = entry->init(&data->methods[i], data->locations[i]); if (NT_STATUS_IS_ERR(nt_status)) { return nt_status; } /* These functions are only used on LDAP now.. */ if (!IS_DEFAULT(data->methods[i], add_group_mapping_entry)) (*pdb_method)->add_group_mapping_entry = multisam_add_group_mapping_entry; if (!IS_DEFAULT(data->methods[i], update_group_mapping_entry)) (*pdb_method)->update_group_mapping_entry = multisam_update_group_mapping_entry; if (!IS_DEFAULT(data->methods[i], delete_group_mapping_entry)) (*pdb_method)->delete_group_mapping_entry = multisam_delete_group_mapping_entry; } return NT_STATUS_OK; }