diff options
author | Günther Deschner <gd@samba.org> | 2008-01-24 16:09:20 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2008-01-24 16:21:53 +0100 |
commit | 10fa43f2840899c0854763e55b9174827c522a5b (patch) | |
tree | f8feeafeb716350ee8e86087562d267fdb535381 /source | |
parent | 37b95450518419e2153e9930b63f894b68096d3d (diff) | |
download | samba-10fa43f2840899c0854763e55b9174827c522a5b.tar.gz |
Add dump-domain-list command for debugging winbindd's domain_list.
Guenther
Diffstat (limited to 'source')
-rw-r--r-- | source/include/messages.h | 1 | ||||
-rw-r--r-- | source/utils/smbcontrol.c | 57 |
2 files changed, 58 insertions, 0 deletions
diff --git a/source/include/messages.h b/source/include/messages.h index 8de41ca049b..c97ad982b3c 100644 --- a/source/include/messages.h +++ b/source/include/messages.h @@ -97,6 +97,7 @@ #define MSG_WINBIND_TRY_TO_GO_ONLINE 0x0406 #define MSG_WINBIND_FAILED_TO_GO_ONLINE 0x0407 #define MSG_WINBIND_VALIDATE_CACHE 0x0408 +#define MSG_WINBIND_DUMP_DOMAIN_LIST 0x0409 /* event messages */ #define MSG_DUMP_EVENT_LIST 0x0500 diff --git a/source/utils/smbcontrol.c b/source/utils/smbcontrol.c index fe0c22911ea..76036bfdde6 100644 --- a/source/utils/smbcontrol.c +++ b/source/utils/smbcontrol.c @@ -1008,6 +1008,62 @@ static bool do_dump_event_list(struct messaging_context *msg_ctx, return send_message(msg_ctx, pid, MSG_DUMP_EVENT_LIST, NULL, 0); } +static bool do_winbind_dump_domain_list(struct messaging_context *msg_ctx, + const struct server_id pid, + const int argc, const char **argv) +{ + const char *domain = NULL; + int domain_len = 0; + struct server_id myid; + uint8_t *buf = NULL; + int buf_len = 0; + + myid = pid_to_procid(sys_getpid()); + + if (argc < 1 || argc > 2) { + fprintf(stderr, "Usage: smbcontrol <dest> dump_domain_list " + "<domain>\n"); + return false; + } + + if (argc == 2) { + domain = argv[1]; + domain_len = strlen(argv[1]) + 1; + } + + messaging_register(msg_ctx, NULL, MSG_WINBIND_DUMP_DOMAIN_LIST, + print_pid_string_cb); + + buf_len = sizeof(myid)+domain_len; + buf = SMB_MALLOC(buf_len); + if (!buf) { + return false; + } + + memcpy(buf, &myid, sizeof(myid)); + memcpy(&buf[sizeof(myid)], domain, domain_len); + + if (!send_message(msg_ctx, pid, MSG_WINBIND_DUMP_DOMAIN_LIST, + buf, buf_len)) + { + SAFE_FREE(buf); + return false; + } + + wait_replies(msg_ctx, procid_to_pid(&pid) == 0); + + /* No replies were received within the timeout period */ + + SAFE_FREE(buf); + if (num_replies == 0) { + printf("No replies received\n"); + } + + messaging_deregister(msg_ctx, MSG_WINBIND_DUMP_DOMAIN_LIST, NULL); + + return num_replies; +} + static void winbind_validate_cache_cb(struct messaging_context *msg, void *private_data, uint32_t msg_type, @@ -1150,6 +1206,7 @@ static const struct { { "dump-event-list", do_dump_event_list, "Dump event list"}, { "validate-cache" , do_winbind_validate_cache, "Validate winbind's credential cache" }, + { "dump-domain-list", do_winbind_dump_domain_list, "Dump winbind domain list"}, { "noop", do_noop, "Do nothing" }, { NULL } }; |