s3-asn1: make all of s3 asn1 code do a proper asn1_init() first.
[amitay/samba.git] / source3 / libads / krb5_setpw.c
index 0ff9f2ba3298ecb8cf42698f480c7d3ac39a9b77..04ee6ee62a8c4bfdf32570b18b737b4f1e7b6460 100644 (file)
@@ -65,7 +65,7 @@ static DATA_BLOB encode_krb5_setpw(const char *principal, const char *password)
        char* c;
        char* princ;
 
-       ASN1_DATA req;
+       ASN1_DATA *req;
        DATA_BLOB ret;
 
 
@@ -90,40 +90,43 @@ static DATA_BLOB encode_krb5_setpw(const char *principal, const char *password)
                return data_blob_null;
        }
 
-       memset(&req, 0, sizeof(req));
-       
-       asn1_push_tag(&req, ASN1_SEQUENCE(0));
-       asn1_push_tag(&req, ASN1_CONTEXT(0));
-       asn1_write_OctetString(&req, password, strlen(password));
-       asn1_pop_tag(&req);
+       req = asn1_init(talloc_tos());
+       if (req == NULL) {
+               return data_blob_null;
+       }
 
-       asn1_push_tag(&req, ASN1_CONTEXT(1));
-       asn1_push_tag(&req, ASN1_SEQUENCE(0));
+       asn1_push_tag(req, ASN1_SEQUENCE(0));
+       asn1_push_tag(req, ASN1_CONTEXT(0));
+       asn1_write_OctetString(req, password, strlen(password));
+       asn1_pop_tag(req);
 
-       asn1_push_tag(&req, ASN1_CONTEXT(0));
-       asn1_write_Integer(&req, 1);
-       asn1_pop_tag(&req);
+       asn1_push_tag(req, ASN1_CONTEXT(1));
+       asn1_push_tag(req, ASN1_SEQUENCE(0));
 
-       asn1_push_tag(&req, ASN1_CONTEXT(1));
-       asn1_push_tag(&req, ASN1_SEQUENCE(0));
+       asn1_push_tag(req, ASN1_CONTEXT(0));
+       asn1_write_Integer(req, 1);
+       asn1_pop_tag(req);
+
+       asn1_push_tag(req, ASN1_CONTEXT(1));
+       asn1_push_tag(req, ASN1_SEQUENCE(0));
 
        if (princ_part1) {
-               asn1_write_GeneralString(&req, princ_part1);
+               asn1_write_GeneralString(req, princ_part1);
        }
        
-       asn1_write_GeneralString(&req, princ_part2);
-       asn1_pop_tag(&req);
-       asn1_pop_tag(&req);
-       asn1_pop_tag(&req);
-       asn1_pop_tag(&req);
-
-       asn1_push_tag(&req, ASN1_CONTEXT(2));
-       asn1_write_GeneralString(&req, realm);
-       asn1_pop_tag(&req);
-       asn1_pop_tag(&req);
-
-       ret = data_blob(req.data, req.length);
-       asn1_free(&req);
+       asn1_write_GeneralString(req, princ_part2);
+       asn1_pop_tag(req);
+       asn1_pop_tag(req);
+       asn1_pop_tag(req);
+       asn1_pop_tag(req);
+
+       asn1_push_tag(req, ASN1_CONTEXT(2));
+       asn1_write_GeneralString(req, realm);
+       asn1_pop_tag(req);
+       asn1_pop_tag(req);
+
+       ret = data_blob(req->data, req->length);
+       asn1_free(req);
 
        free(princ);