BOOL asn1_read_GeneralString(ASN1_DATA *data, char **s)
{
int len;
- if (!asn1_start_tag(data, ASN1_GENERAL_STRING)) return False;
+ char *str;
+
+ *s = NULL;
+
+ if (!asn1_start_tag(data, ASN1_GENERAL_STRING)) {
+ return False;
+ }
len = asn1_tag_remaining(data);
if (len < 0) {
data->has_error = True;
return False;
}
- *s = SMB_MALLOC(len+1);
- if (! *s) {
+ str = SMB_MALLOC(len+1);
+ if (!str) {
data->has_error = True;
return False;
}
- asn1_read(data, *s, len);
- (*s)[len] = 0;
+ asn1_read(data, str, len);
+ str[len] = 0;
asn1_end_tag(data);
+
+ if (!data->has_error) {
+ *s = str;
+ }
return !data->has_error;
}
asn1_end_tag(&data);
ret = !data.has_error;
+ if (data.has_error) {
+ int j;
+ SAFE_FREE(principal);
+ for(j = 0; j < i && j < ASN1_MAX_OIDS-1; j++) {
+ SAFE_FREE(OIDs[j]);
+ }
+ }
+
asn1_free(&data);
return ret;
}
-
/*
generate a negTokenTarg packet given a list of OIDs and a security blob
*/
return ret;
}
-
/*
parse a negTokenTarg packet giving a list of OIDs and a security blob
*/
asn1_end_tag(&data);
if (data.has_error) {
+ int j;
+ data_blob_free(secblob);
+ for(j = 0; j < i && j < ASN1_MAX_OIDS-1; j++) {
+ SAFE_FREE(OIDs[j]);
+ }
DEBUG(1,("Failed to parse negTokenTarg at offset %d\n", (int)data.ofs));
asn1_free(&data);
return False;
ret = !data.has_error;
+ if (data.has_error) {
+ data_blob_free(ticket);
+ }
+
asn1_free(&data);
return ret;
asn1_end_tag(&data);
ret = !data.has_error;
+
+ if (data.has_error) {
+ data_blob_free(chal1);
+ data_blob_free(chal2);
+ }
+
asn1_free(&data);
return ret;
}
if (data.has_error) {
DEBUG(3,("spnego_parse_auth failed at %d\n", (int)data.ofs));
+ data_blob_free(auth);
asn1_free(&data);
return False;
}
asn1_free(&data);
return True;
}
-