- major = krbPrincipalToName(minor, &krbPrinc, pName);
- if (GSS_ERROR(major)) {
- krb5_free_principal(krbContext, krbPrinc);
+ code = krb5_build_principal(krbContext,
+ &krbPrinc,
+ realm != NULL ? strlen(realm) : 0,
+ realm != NULL ? realm : "",
+ service,
+ host,
+ NULL);
+
+ if (realm != NULL)
+ krb5_free_default_realm(krbContext, realm);
+
+ if (code == 0) {
+ KRB_PRINC_TYPE(krbPrinc) = KRB5_NT_SRV_HST;
+
+ major = krbPrincipalToName(minor, &krbPrinc, pName);
+ if (GSS_ERROR(major))
+ krb5_free_principal(krbContext, krbPrinc);
+ } else {
+ major = GSS_S_FAILURE;
+ *minor = GSSEAP_BAD_SERVICE_NAME;