/* * call-seq: * get_default_principal -> string * * Call krb5_cc_get_principal() to get the principal from the default cachefile. Returns the default principal on success, raises Krb5Auth::Krb5::Exception on failure. */ static VALUE Krb5_get_default_principal(VALUE self) { struct ruby_krb5 *kerb; char *princ_name; VALUE result; krb5_error_code krbret; krb5_ccache cc; Data_Get_Struct(self, struct ruby_krb5, kerb); if (!kerb) { NOSTRUCT_EXCEPT(); return Qfalse; } krbret = krb5_cc_default(kerb->ctx, &cc); if (krbret) { Krb5_register_error(krbret); return Qfalse; } krbret = krb5_cc_get_principal(kerb->ctx, cc, &kerb->princ); if (krbret) { krb5_cc_close(kerb->ctx, cc); Krb5_register_error(krbret); return Qnil; } krb5_cc_close(kerb->ctx, cc); krbret = krb5_unparse_name(kerb->ctx, kerb->princ, &princ_name); if (krbret) { Krb5_register_error(krbret); return Qnil; } result = rb_str_new2(princ_name); free(princ_name); return result; }