diff options
author | Gregor Beck <gbeck@sernet.de> | 2011-01-28 10:55:58 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2011-04-04 18:21:09 +0200 |
commit | a217ec64ec5b189f697c58456dad6a6151f763ab (patch) | |
tree | 4b4479fb14ebc911eccb58c6a9c5628e13d4f22b /source3/utils/net_idmap.c | |
parent | 8fc8c880074d01af5a2d92fbd9b2fb042bdd59f3 (diff) | |
download | samba-a217ec64ec5b189f697c58456dad6a6151f763ab.tar.gz samba-a217ec64ec5b189f697c58456dad6a6151f763ab.tar.bz2 samba-a217ec64ec5b189f697c58456dad6a6151f763ab.zip |
s3-net: add command "net idmap check"
This is a tool to check the consistency of an idmap tdb database.
The default mode is to scan the database and list invalid entries,
e.g. records with an invalid format, or records which are valid
but for which the reverse mapping entry is missing.
With the "--repair" switch, one can enter an interactive
repair mode which will prompt for each invalid entry found
with the option to delete, skip or edit the record.
There is also a non-interactive repair mode triggered by "--auto"
which will remove all records with invalid content and fill up
mappings which are missing the reverse entry.
The "--test" parameter lets "net idmap check" only list the
changes that would be written and not actually commit them to
the database.
The "--lock" option allows to lock the database already in the
first reading traverse, in order to remove the race when the
database has to be closed and reopened again before writing
the changes.
Signed-off-by: Michael Adam <obnox@samba.org>
Autobuild-User: Michael Adam <obnox@samba.org>
Autobuild-Date: Mon Apr 4 18:21:09 CEST 2011 on sn-devel-104
Diffstat (limited to 'source3/utils/net_idmap.c')
-rw-r--r-- | source3/utils/net_idmap.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/source3/utils/net_idmap.c b/source3/utils/net_idmap.c index 79f69f24a1..c8241e2080 100644 --- a/source3/utils/net_idmap.c +++ b/source3/utils/net_idmap.c @@ -17,7 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#define FOO(x) (x) #include "includes.h" #include "system/filesys.h" #include "utils/net.h" @@ -25,6 +24,7 @@ #include "idmap.h" #include "dbwrap.h" #include "../libcli/security/security.h" +#include "net_idmap_check.h" #define ALLOC_CHECK(mem) do { \ if (!mem) { \ @@ -535,6 +535,43 @@ static int net_idmap_secret(struct net_context *c, int argc, const char **argv) return 0; } +static int net_idmap_check(struct net_context *c, int argc, const char **argv) +{ + const char* dbfile; + struct check_options opts; + + if ( argc > 1 || c->display_usage) { + d_printf("%s\n%s", + _("Usage:"), + _("net idmap check [-f] [-a] [-T] [-v] [--auto] [[--db=]<TDB>]\n" + " Check an idmap database.\n" + " --repair,-r\trepair\n" + " --fore,-f\tforce\n" + " --auto,-a\tnoninteractive mode\n" + " --test,-T\tdry run\n" + " --lock\tlock db while doing the check\n" + " TDB\tidmap database\n")); + return c->display_usage ? 0 : -1; + } + + dbfile = (argc > 0) ? argv[0] : net_idmap_dbfile(c); + if (dbfile == NULL) { + return -1; + } + d_fprintf(stderr, _("check database: %s\n"), dbfile); + + opts = (struct check_options) { + .lock = c->opt_lock, + .test = c->opt_testmode, + .automatic = c->opt_auto, + .verbose = c->opt_verbose, + .force = c->opt_force, + .repair = c->opt_repair || c->opt_reboot, + }; + + return net_idmap_check_db(dbfile, &opts); +} + static int net_idmap_aclmapset(struct net_context *c, int argc, const char **argv) { TALLOC_CTX *mem_ctx; @@ -653,6 +690,14 @@ int net_idmap(struct net_context *c, int argc, const char **argv) N_("net idmap aclmapset\n" " Set acl map") }, + { + "check", + net_idmap_check, + NET_TRANSPORT_LOCAL, + N_("Check id mappings"), + N_("net idmap check\n" + " Check id mappings") + }, {NULL, NULL, 0, NULL, NULL} }; |