libcli/auth/smbencrypt: in E_deshash, use talloc_stackframe instead of "#if _SAMBA_BU...
authorMichael Adam <obnox@samba.org>
Wed, 11 May 2011 09:57:10 +0000 (11:57 +0200)
committerVolker Lendecke <vlendec@samba.org>
Thu, 12 May 2011 10:52:02 +0000 (12:52 +0200)
talloc_stackframe() is used in other shared components already,
and if the stack is a talloc_pool, then in most cases, it should
also not be more expensive than directly using talloc_tos().

Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Thu May 12 12:52:02 CEST 2011 on sn-devel-104

libcli/auth/smbencrypt.c

index 0cd836302b627aba48b9fff9a158e4bf22cc57b3..66fdbd25a80ffdaa2e546c775217d6d4b1ce56d1 100644 (file)
@@ -118,7 +118,7 @@ bool E_deshash(const char *passwd, uint8_t p16[16])
 {
        bool ret;
        uint8_t dospwd[14];
-       TALLOC_CTX *mem_ctx;
+       TALLOC_CTX *frame = talloc_stackframe();
 
        size_t converted_size;
 
@@ -126,23 +126,19 @@ bool E_deshash(const char *passwd, uint8_t p16[16])
 
        ZERO_STRUCT(dospwd);
 
-#if _SAMBA_BUILD_ == 3
-       mem_ctx = talloc_tos();
-#else
-       mem_ctx = NULL;
-#endif
-       tmpbuf = strupper_talloc(mem_ctx, passwd);
+       tmpbuf = strupper_talloc(frame, passwd);
        if (tmpbuf == NULL) {
                /* Too many callers don't check this result, we need to fill in the buffer with something */
                strlcpy((char *)dospwd, passwd ? passwd : "", sizeof(dospwd));
                E_P16(dospwd, p16);
+               talloc_free(frame);
                return false;
        }
 
        ZERO_STRUCT(dospwd);
 
        ret = convert_string_error(CH_UNIX, CH_DOS, tmpbuf, strlen(tmpbuf), dospwd, sizeof(dospwd), &converted_size);
-       talloc_free(tmpbuf);
+       talloc_free(frame);
 
        /* Only the first 14 chars are considered, password need not
         * be null terminated.  We do this in the error and success