Ignore:
Timestamp:
Mar 12, 2008, 9:08:18 AM (17 years ago)
Author:
Paul Smedley
Message:

Update source to 3.0.28a

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.0/source/nsswitch/winbindd_async.c

    r105 r124  
    783783********************************************************************/
    784784
     785struct lookupname_state {
     786        char *dom_name;
     787        char *name;
     788        void *caller_private_data;
     789};
     790
    785791static void lookupname_recv2(TALLOC_CTX *mem_ctx, BOOL success,
    786792                            struct winbindd_response *response,
     
    791797                (void (*)(void *, BOOL, const DOM_SID *, enum lsa_SidType))c;
    792798        DOM_SID sid;
     799        struct lookupname_state *s = talloc_get_type_abort(private_data, struct lookupname_state);
    793800
    794801        if (!success) {
    795802                DEBUG(5, ("Could not trigger lookup_name\n"));
    796                 cont(private_data, False, NULL, SID_NAME_UNKNOWN);
     803                cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
    797804                return;
    798805        }
     
    800807        if (response->result != WINBINDD_OK) {
    801808                DEBUG(5, ("lookup_name returned an error\n"));
    802                 cont(private_data, False, NULL, SID_NAME_UNKNOWN);
     809                cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
    803810                return;
    804811        }
     
    807814                DEBUG(0, ("Could not convert string %s to sid\n",
    808815                          response->data.sid.sid));
    809                 cont(private_data, False, NULL, SID_NAME_UNKNOWN);
    810                 return;
    811         }
    812 
    813         cont(private_data, True, &sid,
     816                cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
     817                return;
     818        }
     819
     820        cont(s->caller_private_data, True, &sid,
    814821             (enum lsa_SidType)response->data.sid.type);
    815822}
     
    827834                (void (*)(void *, BOOL, const DOM_SID *, enum lsa_SidType))c;
    828835        DOM_SID sid;
     836        struct lookupname_state *s = talloc_get_type_abort(private_data, struct lookupname_state);
    829837
    830838        if (!success) {
    831839                DEBUG(5, ("lookupname_recv: lookup_name() failed!\n"));
    832                 cont(private_data, False, NULL, SID_NAME_UNKNOWN);
     840                cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
    833841                return;
    834842        }
     
    837845                /* Try again using the forest root */
    838846                struct winbindd_domain *root_domain = find_root_domain();
    839                 struct winbindd_cli_state *state = (struct winbindd_cli_state*)private_data;           
    840                 struct winbindd_request request;               
    841                 char *name_domain, *name_account;
    842                
     847                struct winbindd_request request;
     848
    843849                if ( !root_domain ) {
    844850                        DEBUG(5,("lookupname_recv: unable to determine forest root\n"));
    845                         cont(private_data, False, NULL, SID_NAME_UNKNOWN);
     851                        cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
    846852                        return;
    847853                }
    848854
    849                 name_domain  = state->request.data.name.dom_name;
    850                 name_account = state->request.data.name.name;   
    851 
    852855                ZERO_STRUCT(request);
    853856                request.cmd = WINBINDD_LOOKUPNAME;
    854                 fstrcpy(request.data.name.dom_name, name_domain);
    855                 fstrcpy(request.data.name.name, name_account);
     857                fstrcpy(request.data.name.dom_name, s->dom_name);
     858                fstrcpy(request.data.name.name, s->name);
    856859
    857860                do_async_domain(mem_ctx, root_domain, &request, lookupname_recv2,
    858                                 (void *)cont, private_data);
     861                                (void *)cont, s);
    859862
    860863                return;
     
    864867                DEBUG(0, ("Could not convert string %s to sid\n",
    865868                          response->data.sid.sid));
    866                 cont(private_data, False, NULL, SID_NAME_UNKNOWN);
    867                 return;
    868         }
    869 
    870         cont(private_data, True, &sid,
     869                cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
     870                return;
     871        }
     872
     873        cont(s->caller_private_data, True, &sid,
    871874             (enum lsa_SidType)response->data.sid.type);
    872875}
     
    887890        struct winbindd_request request;
    888891        struct winbindd_domain *domain;
     892        struct lookupname_state *s;
    889893
    890894        if ( (domain = find_lookup_domain_from_name(dom_name)) == NULL ) {
     
    899903        fstrcpy(request.data.name.name, name);
    900904
     905        if ( (s = TALLOC_ZERO_P(mem_ctx, struct lookupname_state)) == NULL ) {
     906                DEBUG(0, ("winbindd_lookupname_async: talloc failed\n"));
     907                cont(private_data, False, NULL, SID_NAME_UNKNOWN);
     908                return;
     909        }
     910
     911        s->dom_name = talloc_strdup( s, dom_name );
     912        s->name     = talloc_strdup( s, name );
     913        if (!s->dom_name || !s->name) {
     914                cont(private_data, False, NULL, SID_NAME_UNKNOWN);
     915                return;
     916        }
     917
     918        s->caller_private_data = private_data;
     919
    901920        do_async_domain(mem_ctx, domain, &request, lookupname_recv,
    902                         (void *)cont, private_data);
     921                        (void *)cont, s);
    903922}
    904923
Note: See TracChangeset for help on using the changeset viewer.