diff options
author | Günther Deschner <gd@samba.org> | 2008-10-22 19:23:49 +0200 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2008-10-22 21:37:36 +0200 |
commit | c0cf457c85a1fb89d72c2088c103a51af9341de4 (patch) | |
tree | e54cf0bd51946a8aec1ea2b718488726ae331abb /source3/libads/krb5_setpw.c | |
parent | 527d79747642cf83c89a8931e4fe86df1fec454b (diff) | |
download | samba-c0cf457c85a1fb89d72c2088c103a51af9341de4.tar.gz samba-c0cf457c85a1fb89d72c2088c103a51af9341de4.tar.bz2 samba-c0cf457c85a1fb89d72c2088c103a51af9341de4.zip |
s3-asn1: make all of s3 asn1 code do a proper asn1_init() first.
Guenther
Diffstat (limited to 'source3/libads/krb5_setpw.c')
-rw-r--r-- | source3/libads/krb5_setpw.c | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/source3/libads/krb5_setpw.c b/source3/libads/krb5_setpw.c index 0ff9f2ba32..04ee6ee62a 100644 --- a/source3/libads/krb5_setpw.c +++ b/source3/libads/krb5_setpw.c @@ -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); |