diff options
author | Volker Lendecke <vlendec@samba.org> | 2003-06-14 17:51:09 +0000 |
---|---|---|
committer | Volker Lendecke <vlendec@samba.org> | 2003-06-14 17:51:09 +0000 |
commit | bd1333ea74f14d01310a4307db5101578ec16ee5 (patch) | |
tree | dabb785f574a7b8b320f39b6db7dfc56cda06d88 /source3/utils | |
parent | b85664047c188126e3ba06862198c1acd4f218ac (diff) | |
download | samba-bd1333ea74f14d01310a4307db5101578ec16ee5.tar.gz samba-bd1333ea74f14d01310a4307db5101578ec16ee5.tar.bz2 samba-bd1333ea74f14d01310a4307db5101578ec16ee5.zip |
Add 'net idmap restore'. This restores a broken idmap file
from the output of 'net idmap dump'.
'net idmap dump' now also prints the USER/GROUP HWM.
Volker
(This used to be commit c0575be936572bb091a77c58361bd3a4fe9549ff)
Diffstat (limited to 'source3/utils')
-rw-r--r-- | source3/utils/net.c | 70 | ||||
-rw-r--r-- | source3/utils/net_help.c | 3 |
2 files changed, 73 insertions, 0 deletions
diff --git a/source3/utils/net.c b/source3/utils/net.c index d8f3264840..2b1609e225 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -376,6 +376,16 @@ static int net_idmap_dump_one_entry(TDB_CONTEXT *tdb, TDB_DATA data, void *unused) { + if (strcmp(key.dptr, "USER HWM") == 0) { + printf("USER HWM %d\n", IVAL(data.dptr,0)); + return 0; + } + + if (strcmp(key.dptr, "GROUP HWM") == 0) { + printf("GROUP HWM %d\n", IVAL(data.dptr,0)); + return 0; + } + if (strncmp(key.dptr, "S-", 2) != 0) return 0; @@ -408,6 +418,63 @@ static int net_idmap_dump(int argc, const char **argv) } /*********************************************************** + Write entries from stdin to current local idmap + **********************************************************/ +static int net_idmap_restore(int argc, const char **argv) +{ + if (!idmap_init()) { + d_printf("Could not init idmap\n"); + return -1; + } + + while (!feof(stdin)) { + fstring line, sid_string; + int len; + unid_t id; + int type = ID_EMPTY; + DOM_SID sid; + + if (fgets(line, sizeof(line)-1, stdin) == NULL) + break; + + len = strlen(line); + + if ( (len > 0) && (line[len-1] == '\n') ) + line[len-1] = '\0'; + + if (sscanf(line, "GID %d %s", &id.gid, sid_string) == 2) { + type = ID_GROUPID; + } + + if (sscanf(line, "UID %d %s", &id.uid, sid_string) == 2) { + type = ID_USERID; + } + + if (type == ID_EMPTY) { + d_printf("ignoring invalid line [%s]\n", line); + continue; + } + + if (!string_to_sid(&sid, sid_string)) { + d_printf("ignoring invalid sid [%s]\n", sid_string); + continue; + } + + if (!NT_STATUS_IS_OK(idmap_set_mapping(&sid, id, type))) { + d_printf("Could not set mapping of %s %d to sid %s\n", + (type == ID_GROUPID) ? "GID" : "UID", + (type == ID_GROUPID) ? id.gid : id.uid, + sid_string_static(&sid)); + continue; + } + + } + + idmap_close(); + return 0; +} + +/*********************************************************** Look at the current idmap **********************************************************/ static int net_idmap(int argc, const char **argv) @@ -418,6 +485,9 @@ static int net_idmap(int argc, const char **argv) if ( !StrCaseCmp( argv[0], "dump" ) ) return net_idmap_dump(argc-1, argv+1); + if ( !StrCaseCmp( argv[0], "restore" ) ) + return net_idmap_restore(argc-1, argv+1); + return net_help_idmap( argc, argv ); } diff --git a/source3/utils/net_help.c b/source3/utils/net_help.c index 16db55480e..941baf3378 100644 --- a/source3/utils/net_help.c +++ b/source3/utils/net_help.c @@ -123,6 +123,9 @@ int net_help_idmap(int argc, const char **argv) d_printf("net idmap dump filename"\ "\n Dump current id mapping\n"); + d_printf("net idmap restore"\ + "\n Restore entries from stdin to current local idmap\n"); + return -1; } |