krb5: Fix leak in gethostlist()
This commit is contained in:
		| @@ -1088,24 +1088,25 @@ gethostlist(krb5_context context, const char *realm, | ||||
|     if (ret) | ||||
| 	return ret; | ||||
|  | ||||
|     while(krb5_krbhst_next(context, handle, &hostinfo) == 0) | ||||
|     while (krb5_krbhst_next(context, handle, &hostinfo) == 0) | ||||
| 	nhost++; | ||||
|     if(nhost == 0) { | ||||
|     if (nhost == 0) { | ||||
| 	krb5_set_error_message(context, KRB5_KDC_UNREACH, | ||||
| 			       N_("No KDC found for realm %s", ""), realm); | ||||
|         krb5_krbhst_free(context, handle); | ||||
| 	return KRB5_KDC_UNREACH; | ||||
|     } | ||||
|     *hostlist = calloc(nhost + 1, sizeof(**hostlist)); | ||||
|     if(*hostlist == NULL) { | ||||
|     if (*hostlist == NULL) { | ||||
| 	krb5_krbhst_free(context, handle); | ||||
| 	return krb5_enomem(context); | ||||
|     } | ||||
|  | ||||
|     krb5_krbhst_reset(context, handle); | ||||
|     nhost = 0; | ||||
|     while(krb5_krbhst_next_as_string(context, handle, | ||||
| 				     host, sizeof(host)) == 0) { | ||||
| 	if(((*hostlist)[nhost++] = strdup(host)) == NULL) { | ||||
|     while (krb5_krbhst_next_as_string(context, handle, | ||||
| 				      host, sizeof(host)) == 0) { | ||||
| 	if (((*hostlist)[nhost++] = strdup(host)) == NULL) { | ||||
| 	    krb5_free_krbhst(context, *hostlist); | ||||
| 	    krb5_krbhst_free(context, handle); | ||||
| 	    return krb5_enomem(context); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicolas Williams
					Nicolas Williams