*/
#include "includes.h"
+#include "util/debug.h"
#include "winbindd.h"
#include "librpc/gen_ndr/ndr_winbind_c.h"
#include "../libcli/security/security.h"
{
struct tevent_req *req, *subreq;
struct wb_gettoken_state *state;
+ struct dom_sid_buf buf;
req = tevent_req_create(mem_ctx, &state, struct wb_gettoken_state);
if (req == NULL) {
state->ev = ev;
state->expand_local_aliases = expand_local_aliases;
+ D_INFO("WB command gettoken start.\n"
+ "Query user SID %s (expand local aliases is %d).\n",
+ dom_sid_str_buf(sid, &buf),
+ expand_local_aliases);
subreq = wb_queryuser_send(state, ev, &state->usersid);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
req, struct wb_gettoken_state);
struct wbint_userinfo *info;
NTSTATUS status;
+ struct dom_sid_buf buf0, buf1;
status = wb_queryuser_recv(subreq, state, &info);
TALLOC_FREE(subreq);
}
state->num_sids = 2;
+ D_DEBUG("Got user SID %s and group SID %s\n",
+ dom_sid_str_buf(&info->user_sid, &buf0),
+ dom_sid_str_buf(&info->group_sid, &buf1));
sid_copy(&state->sids[0], &info->user_sid);
sid_copy(&state->sids[1], &info->group_sid);
+ D_DEBUG("Looking up user groups for the user SID.\n");
subreq = wb_lookupusergroups_send(state, state->ev, &info->user_sid);
if (tevent_req_nomem(subreq, req)) {
return;
struct dom_sid *groups;
struct winbindd_domain *domain;
NTSTATUS status;
+ struct dom_sid_buf buf;
status = wb_lookupusergroups_recv(subreq, state, &num_groups, &groups);
TALLOC_FREE(subreq);
return;
}
- for (i=0; i<num_groups; i++) {
+ D_DEBUG("Received %d group(s).\n", num_groups);
+ for (i = 0; i < num_groups; i++) {
+ D_DEBUG("Adding SID %s.\n", dom_sid_str_buf(&groups[i], &buf));
status = add_sid_to_array_unique(
state, &groups[i], &state->sids, &state->num_sids);
}
if (!state->expand_local_aliases) {
+ D_DEBUG("Done. Not asked to expand local aliases.\n");
tevent_req_done(req);
return;
}
return;
}
+ D_DEBUG("Expand domain's aliases for %d SIDs.\n", state->num_sids);
subreq = wb_lookupuseraliases_send(state, state->ev, domain,
state->num_sids, state->sids);
if (tevent_req_nomem(subreq, req)) {
return;
}
+ D_DEBUG("Got %d RID(s).\n", num_rids);
status = wb_add_rids_to_sids(state, &state->num_sids, &state->sids,
get_global_sam_sid(), num_rids, rids);
if (tevent_req_nterror(req, status)) {
* Now expand the builtin groups
*/
+ D_DEBUG("Expand the builtin groups for %d SID(s).\n", state->num_sids);
domain = find_domain_from_sid(&global_sid_Builtin);
if (domain == NULL) {
tevent_req_nterror(req, NT_STATUS_INTERNAL_ERROR);
if (tevent_req_nterror(req, status)) {
return;
}
+ D_DEBUG("Got %d RID(s).\n", num_rids);
status = wb_add_rids_to_sids(state, &state->num_sids, &state->sids,
&global_sid_Builtin, num_rids, rids);
if (tevent_req_nterror(req, status)) {
struct wb_gettoken_state *state = tevent_req_data(
req, struct wb_gettoken_state);
NTSTATUS status;
+ int i;
if (tevent_req_is_nterror(req, &status)) {
return status;
}
*num_sids = state->num_sids;
+ D_INFO("WB command gettoken end.\nReceived %d SID(s).\n", state->num_sids);
+ for (i = 0; i < state->num_sids; i++) {
+ struct dom_sid_buf sidbuf;
+ D_INFO("%d: %s\n", i, dom_sid_str_buf(&state->sids[i], &sidbuf));
+ }
+
*sids = talloc_move(mem_ctx, &state->sids);
return NT_STATUS_OK;
}
int num_rids, uint32_t *rids)
{
int i;
-
- for (i=0; i<num_rids; i++) {
+ D_DEBUG("%u SID(s) will be uniquely added to the SID array.\n"
+ "Before the addition the array has %d SID(s).\n",
+ num_rids, *pnum_sids);
+ for (i = 0; i < num_rids; i++) {
NTSTATUS status;
struct dom_sid sid;
return status;
}
}
-
+ D_DEBUG("After the addition the array has %d SID(s).\n", *pnum_sids);
return NT_STATUS_OK;
}