s3: Fix reference to freed memory in pam_winbind.
authorBo Yang <boyang@samba.org>
Wed, 14 Oct 2009 20:31:26 +0000 (04:31 +0800)
committerBo Yang <boyang@samba.org>
Wed, 14 Oct 2009 20:31:26 +0000 (04:31 +0800)
Signed-off-by: Bo Yang <boyang@samba.org>
nsswitch/pam_winbind.c

index 654b4385d81b2a00e91fa2c6156582847670e309..fd06688d0850fddad3a4d89042d0cbd2631f0797 100644 (file)
@@ -981,6 +981,7 @@ static bool winbind_name_to_sid_string(struct pwb_context *ctx,
                                       int sid_list_buffer_size)
 {
        const char* sid_string;
                                       int sid_list_buffer_size)
 {
        const char* sid_string;
+       char *sid_str;
 
        /* lookup name? */
        if (IS_SID_STRING(name)) {
 
        /* lookup name? */
        if (IS_SID_STRING(name)) {
@@ -989,7 +990,6 @@ static bool winbind_name_to_sid_string(struct pwb_context *ctx,
                wbcErr wbc_status;
                struct wbcDomainSid sid;
                enum wbcSidType type;
                wbcErr wbc_status;
                struct wbcDomainSid sid;
                enum wbcSidType type;
-               char *sid_str;
 
                _pam_log_debug(ctx, LOG_DEBUG,
                               "no sid given, looking up: %s\n", name);
 
                _pam_log_debug(ctx, LOG_DEBUG,
                               "no sid given, looking up: %s\n", name);
@@ -1006,15 +1006,16 @@ static bool winbind_name_to_sid_string(struct pwb_context *ctx,
                        return false;
                }
 
                        return false;
                }
 
-               wbcFreeMemory(sid_str);
                sid_string = sid_str;
        }
 
        if (!safe_append_string(sid_list_buffer, sid_string,
                                sid_list_buffer_size)) {
                sid_string = sid_str;
        }
 
        if (!safe_append_string(sid_list_buffer, sid_string,
                                sid_list_buffer_size)) {
+               wbcFreeMemory(sid_str);
                return false;
        }
 
                return false;
        }
 
+       wbcFreeMemory(sid_str);
        return true;
 }
 
        return true;
 }