libwbclient: Make wbcLookupSid not use talloc
authorVolker Lendecke <vl@samba.org>
Sat, 3 Apr 2010 10:01:43 +0000 (12:01 +0200)
committerVolker Lendecke <vl@samba.org>
Mon, 19 Apr 2010 12:27:16 +0000 (14:27 +0200)
nsswitch/libwbclient/wbc_sid.c

index 187e50836bfecac641385ec2ebea629e3cbd4a9e..8637b4743f2e0780d6458392289fae466e9b50bd 100644 (file)
@@ -4,6 +4,7 @@
    Winbind client API
 
    Copyright (C) Gerald (Jerry) Carter 2007
+   Copyright (C) Volker Lendecke 2010
 
 
    This library is free software; you can redistribute it and/or
@@ -205,13 +206,10 @@ wbcErr wbcLookupSid(const struct wbcDomainSid *sid,
        struct winbindd_response response;
        wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
        char *sid_string = NULL;
-       char *domain = NULL;
-       char *name = NULL;
-       enum wbcSidType name_type = WBC_SID_NAME_USE_NONE;
+       char *domain, *name;
 
        if (!sid) {
-               wbc_status = WBC_ERR_INVALID_PARAM;
-               BAIL_ON_WBC_ERROR(wbc_status);
+               return WBC_ERR_INVALID_PARAM;
        }
 
        /* Initialize request */
@@ -222,64 +220,50 @@ wbcErr wbcLookupSid(const struct wbcDomainSid *sid,
        /* dst is already null terminated from the memset above */
 
        wbc_status = wbcSidToString(sid, &sid_string);
-       BAIL_ON_WBC_ERROR(wbc_status);
+       if (!WBC_ERROR_IS_OK(wbc_status)) {
+               return wbc_status;
+       }
 
        strncpy(request.data.sid, sid_string, sizeof(request.data.sid)-1);
        wbcFreeMemory(sid_string);
 
        /* Make request */
 
-       wbc_status = wbcRequestResponse(WINBINDD_LOOKUPSID,
-                                          &request,
-                                          &response);
-       BAIL_ON_WBC_ERROR(wbc_status);
+       wbc_status = wbcRequestResponse(WINBINDD_LOOKUPSID, &request,
+                                       &response);
+       if (!WBC_ERROR_IS_OK(wbc_status)) {
+               return wbc_status;
+       }
 
        /* Copy out result */
 
-       domain = talloc_strdup(NULL, response.data.name.dom_name);
-       BAIL_ON_PTR_ERROR(domain, wbc_status);
-
-       name = talloc_strdup(NULL, response.data.name.name);
-       BAIL_ON_PTR_ERROR(name, wbc_status);
+       wbc_status = WBC_ERR_NO_MEMORY;
+       domain = NULL;
+       name = NULL;
 
-       name_type = (enum wbcSidType)response.data.name.type;
-
-       wbc_status = WBC_ERR_SUCCESS;
-
- done:
-       if (WBC_ERROR_IS_OK(wbc_status)) {
-               if (pdomain != NULL) {
-                       *pdomain = domain;
-               } else {
-                       TALLOC_FREE(domain);
-               }
-               if (pname != NULL) {
-                       *pname = name;
-               } else {
-                       TALLOC_FREE(name);
-               }
-               if (pname_type != NULL) {
-                       *pname_type = name_type;
-               }
+       domain = wbcStrDup(response.data.name.dom_name);
+       if (domain == NULL) {
+               goto done;
        }
-       else {
-#if 0
-               /*
-                * Found by Coverity: In this particular routine we can't end
-                * up here with a non-NULL name. Further up there are just two
-                * exit paths that lead here, neither of which leave an
-                * allocated name. If you add more paths up there, re-activate
-                * this.
-                */
-               if (name != NULL) {
-                       talloc_free(name);
-               }
-#endif
-               if (domain != NULL) {
-                       talloc_free(domain);
-               }
+       name = wbcStrDup(response.data.name.name);
+       if (name == NULL) {
+               goto done;
        }
-
+       if (pdomain != NULL) {
+               *pdomain = domain;
+               domain = NULL;
+       }
+       if (pname != NULL) {
+               *pname = name;
+               name = NULL;
+       }
+       if (pname_type != NULL) {
+               *pname_type = (enum wbcSidType)response.data.name.type;
+       }
+       wbc_status = WBC_ERR_SUCCESS;
+done:
+       wbcFreeMemory(name);
+       wbcFreeMemory(domain);
        return wbc_status;
 }