diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/utils/net_idmap.c | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/source3/utils/net_idmap.c b/source3/utils/net_idmap.c index dd16c4b02d..d4d2c931b8 100644 --- a/source3/utils/net_idmap.c +++ b/source3/utils/net_idmap.c @@ -28,50 +28,51 @@ } } while(0) /*********************************************************** - Dump the current idmap + Helper function for net_idmap_dump. Dump one entry. **********************************************************/ -static int net_idmap_dump(int argc, const char **argv) +static int net_idmap_dump_one_entry(TDB_CONTEXT *tdb, + TDB_DATA key, + TDB_DATA data, + void *unused) { - TALLOC_CTX *ctx; - char *filename; - - if (argc != 1) { - return net_help_idmap(argc, argv); + if (strcmp((char *)key.dptr, "USER HWM") == 0) { + printf("USER HWM %d\n", IVAL(data.dptr,0)); + return 0; } - if (! winbind_ping()) { - d_fprintf(stderr, "To use net idmap Winbindd must be running.\n"); - return -1; + if (strcmp((char *)key.dptr, "GROUP HWM") == 0) { + printf("GROUP HWM %d\n", IVAL(data.dptr,0)); + return 0; } - ctx = talloc_new(NULL); - ALLOC_CHECK(ctx); + if (strncmp((char *)key.dptr, "S-", 2) != 0) + return 0; - filename = talloc_strdup(ctx, argv[0]); - ALLOC_CHECK(filename); + printf("%s %s\n", data.dptr, key.dptr); + return 0; +} - /* filename must be absolute */ - if (*filename != '/') { - char path[4096]; - - filename = getcwd(path, 4095); - if ( ! filename) { - d_fprintf(stderr, "Failed to obtain full output file path"); - talloc_free(ctx); - return -1; - } +/*********************************************************** + Dump the current idmap + **********************************************************/ +static int net_idmap_dump(int argc, const char **argv) +{ + TDB_CONTEXT *idmap_tdb; - filename = talloc_asprintf(ctx, "%s/%s", path, argv[0]); - ALLOC_CHECK(filename); - } + if ( argc != 1 ) + return net_help_idmap( argc, argv ); - if ( ! winbind_idmap_dump_maps(ctx, filename)) { - d_fprintf(stderr, "Failed to obtain idmap data from winbindd\n"); - talloc_free(ctx); + idmap_tdb = tdb_open_log(argv[0], 0, TDB_DEFAULT, O_RDONLY, 0); + + if (idmap_tdb == NULL) { + d_fprintf(stderr, "Could not open idmap: %s\n", argv[0]); return -1; } - talloc_free(ctx); + tdb_traverse(idmap_tdb, net_idmap_dump_one_entry, NULL); + + tdb_close(idmap_tdb); + return 0; } |