/* Unix SMB/CIFS implementation. common functions for TDB based idmapping backends Copyright (C) Christian Ambach 2012 These functions were initially copied over from idmap_tdb.c and idmap_tdb2.c which are: Copyright (C) Tim Potter 2000 Copyright (C) Jim McDonough 2003 Copyright (C) Jeremy Allison 2006 Copyright (C) Simo Sorce 2003-2006 Copyright (C) Michael Adam 2009-2010 Copyright (C) Andrew Tridgell 2007 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _IDMAP_TDB_COMMON_H_ #define _IDMAP_TDB_COMMON_H_ #include "includes.h" #include "idmap.h" #include "dbwrap/dbwrap.h" /* * this must be stored in idmap_domain->private_data * when using idmap_tdb_common_get_new_id and the * mapping functions idmap_tdb_common_unixid(s)_to_sids * * private_data can be used for backend specific * configuration data (e.g. idmap script in idmap_tdb2) * */ struct idmap_tdb_common_context { struct db_context *db; struct idmap_rw_ops *rw_ops; /* * what is the maximum xid to be allocated * this is typically just dom->high_id */ uint32_t max_id; const char *hwmkey_uid; const char *hwmkey_gid; /** * if not set, idmap_tdb_common_unixids_to_sid will be used by * idmap_tdb_common_unixids_to_sids */ NTSTATUS(*unixid_to_sid_fn) (struct idmap_domain *dom, struct id_map * map); /* * if not set, idmap_tdb_common_sid_to_id will be used by * idmap_tdb_common_sids_to_unixids */ NTSTATUS(*sid_to_unixid_fn) (struct idmap_domain *dom, struct id_map * map); void *private_data; }; /** * Allocate a new unix-ID. * For now this is for the default idmap domain only. * Should be extended later on. */ NTSTATUS idmap_tdb_common_get_new_id(struct idmap_domain *dom, struct unixid *id); /* * store a mapping into the idmap database * * the entries that will be stored are * UID map->xid.id => map->sid and map->sid => UID map->xid.id * or * GID map->xid.id => map->sid and map->sid => GID map->xid.id * * for example * UID 12345 = S-1-5-21-297746067-1479432880-4056370663 * S-1-5-21-297746067-1479432880-4056370663 = UID 12345 * */ NTSTATUS idmap_tdb_common_set_mapping(struct idmap_domain *dom, const struct id_map *map); /* * Create a new mapping for an unmapped SID, also allocating a new ID. * This should be run inside a transaction. * * TODO: * Properly integrate this with multi domain idmap config: * Currently, the allocator is default-config only. */ NTSTATUS idmap_tdb_common_new_mapping(struct idmap_domain *dom, struct id_map *map); /* * default multiple id to sid lookup function * * will call idmap_tdb_common_unixid_to_sid for each mapping * if no other function to lookup unixid_to_sid was given in * idmap_tdb_common_context */ NTSTATUS idmap_tdb_common_unixids_to_sids(struct idmap_domain *dom, struct id_map **ids); /* * default single id to sid lookup function * * will read the entries written by idmap_tdb_common_set_mapping */ NTSTATUS idmap_tdb_common_unixid_to_sid(struct idmap_domain *dom, struct id_map *map); /********************************** Single sid to id lookup function. **********************************/ NTSTATUS idmap_tdb_common_sid_to_unixid(struct idmap_domain *dom, struct id_map *map); NTSTATUS idmap_tdb_common_sids_to_unixids(struct idmap_domain *dom, struct id_map **ids); #endif /* _IDMAP_TDB_COMMON_H_ */