}
#endif /* not used */
-struct lookupsid_state {
- DOM_SID sid;
- void *caller_private_data;
-};
-
-
-static void lookupsid_recv2(TALLOC_CTX *mem_ctx, BOOL success,
- struct winbindd_response *response,
- void *c, void *private_data)
-{
- void (*cont)(void *priv, BOOL succ, const char *dom_name,
- const char *name, enum lsa_SidType type) =
- (void (*)(void *, BOOL, const char *, const char *,
- enum lsa_SidType))c;
- struct lookupsid_state *s = talloc_get_type_abort(private_data,
- struct lookupsid_state);
-
- if (!success) {
- DEBUG(5, ("Could not trigger lookupsid\n"));
- cont(s->caller_private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
- return;
- }
-
- if (response->result != WINBINDD_OK) {
- DEBUG(5, ("lookupsid (forest root) returned an error\n"));
- cont(s->caller_private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
- return;
- }
-
- cont(s->caller_private_data, True, response->data.name.dom_name,
- response->data.name.name,
- (enum lsa_SidType)response->data.name.type);
-}
-
static void lookupsid_recv(TALLOC_CTX *mem_ctx, BOOL success,
struct winbindd_response *response,
void *c, void *private_data)
const char *name, enum lsa_SidType type) =
(void (*)(void *, BOOL, const char *, const char *,
enum lsa_SidType))c;
- struct lookupsid_state *s = talloc_get_type_abort(private_data,
- struct lookupsid_state);
if (!success) {
DEBUG(5, ("Could not trigger lookupsid\n"));
- cont(s->caller_private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
+ cont(private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
return;
}
if (response->result != WINBINDD_OK) {
- /* Try again using the forest root */
- struct winbindd_domain *root_domain = find_root_domain();
- struct winbindd_request request;
-
- if ( !root_domain ) {
- DEBUG(5,("lookupsid_recv: unable to determine forest root\n"));
- cont(s->caller_private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
- return;
- }
-
- ZERO_STRUCT(request);
- request.cmd = WINBINDD_LOOKUPSID;
- fstrcpy(request.data.sid, sid_string_static(&s->sid));
-
- do_async_domain(mem_ctx, root_domain, &request, lookupsid_recv2,
- (void *)cont, s);
-
+ DEBUG(5, ("lookupsid returned an error\n"));
+ cont(private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
return;
}
- cont(s->caller_private_data, True, response->data.name.dom_name,
+ cont(private_data, True, response->data.name.dom_name,
response->data.name.name,
(enum lsa_SidType)response->data.name.type);
}
{
struct winbindd_domain *domain;
struct winbindd_request request;
- struct lookupsid_state *s;
domain = find_lookup_domain_from_sid(sid);
if (domain == NULL) {
request.cmd = WINBINDD_LOOKUPSID;
fstrcpy(request.data.sid, sid_string_static(sid));
- if ( (s = TALLOC_ZERO_P(mem_ctx, struct lookupsid_state)) == NULL ) {
- DEBUG(0, ("winbindd_lookupsid_async: talloc failed\n"));
- cont(private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
- return;
- }
-
- sid_copy( &s->sid, sid );
- s->caller_private_data = private_data;
-
do_async_domain(mem_ctx, domain, &request, lookupsid_recv,
- (void *)cont, s);
+ (void *)cont, private_data);
}
enum winbindd_result winbindd_dual_lookupsid(struct winbindd_domain *domain,
/* Lookup the sid */
- if (!winbindd_lookup_name_by_sid(state->mem_ctx, domain, &sid,
- &dom_name, &name, &type))
- {
+ if (!winbindd_lookup_name_by_sid(state->mem_ctx, &sid, &dom_name, &name,
+ &type)) {
TALLOC_FREE(dom_name);
TALLOC_FREE(name);
return WINBINDD_ERROR;
void *caller_private_data;
};
-
static void lookupname_recv2(TALLOC_CTX *mem_ctx, BOOL success,
struct winbindd_response *response,
void *c, void *private_data)
enum lsa_SidType type) =
(void (*)(void *, BOOL, const DOM_SID *, enum lsa_SidType))c;
DOM_SID sid;
- struct lookupname_state *s = talloc_get_type_abort( private_data,
- struct lookupname_state );
-
+ struct lookupname_state *s = talloc_get_type_abort(private_data, struct lookupname_state);
if (!success) {
DEBUG(5, ("Could not trigger lookup_name\n"));
enum lsa_SidType type) =
(void (*)(void *, BOOL, const DOM_SID *, enum lsa_SidType))c;
DOM_SID sid;
- struct lookupname_state *s = talloc_get_type_abort( private_data,
- struct lookupname_state );
+ struct lookupname_state *s = talloc_get_type_abort(private_data, struct lookupname_state);
if (!success) {
DEBUG(5, ("lookupname_recv: lookup_name() failed!\n"));
if (response->result != WINBINDD_OK) {
/* Try again using the forest root */
struct winbindd_domain *root_domain = find_root_domain();
- struct winbindd_request request;
-
+ struct winbindd_request request;
+
if ( !root_domain ) {
DEBUG(5,("lookupname_recv: unable to determine forest root\n"));
cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
ZERO_STRUCT(request);
request.cmd = WINBINDD_LOOKUPNAME;
-
- fstrcpy( request.data.name.dom_name, s->dom_name );
- fstrcpy( request.data.name.name, s->name );
+ fstrcpy(request.data.name.dom_name, s->dom_name);
+ fstrcpy(request.data.name.name, s->name);
do_async_domain(mem_ctx, root_domain, &request, lookupname_recv2,
(void *)cont, s);
{
struct winbindd_request request;
struct winbindd_domain *domain;
- struct lookupname_state *s;
+ struct lookupname_state *s;
if ( (domain = find_lookup_domain_from_name(dom_name)) == NULL ) {
DEBUG(5, ("Could not find domain for name %s\n", dom_name));
s->dom_name = talloc_strdup( s, dom_name );
s->name = talloc_strdup( s, name );
- s->caller_private_data = private_data;
+ if (!s->dom_name || !s->name) {
+ cont(private_data, False, NULL, SID_NAME_UNKNOWN);
+ return;
+ }
+
+ s->caller_private_data = private_data;
do_async_domain(mem_ctx, domain, &request, lookupname_recv,
(void *)cont, s);
}
if (response->result != WINBINDD_OK) {
- DEBUG(5, ("query_user returned an error\n"));
+ DEBUG(5, ("query_user returned an error\n"));
cont(private_data, False, NULL, NULL, NULL, NULL, -1, -1);
return;
}