2 * Copyright (c) 2014 <copyright holder> <email>
4 * For license details, see the LICENSE file in the root of this project.
9 #include "../GSSException.h"
11 void GSSName::init(const GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn)
17 this->major_status = fn(&(this->minor_status), namestr.toGss(), name_type.toGss(), &name);
18 if ( GSS_ERROR(this->major_status) )
21 errMsg += "Cannot import name: ";
22 errMsg += namestr.toString();
23 throw GSSException(errMsg.c_str(), this->major_status, this->minor_status, name_type.toGss());
32 GSSName::GSSName(std::string namestr, GSSOID name_type, gss_imp_name_type fn)
34 init(namestr, name_type, fn);
37 GSSName::GSSName(char *namestr, GSSOID name_type, gss_imp_name_type fn)
39 init(GSSBuffer(namestr, true), name_type, fn);
42 GSSName::GSSName(GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn)
44 init(GSSBuffer(namestr), name_type, fn);
47 GSSName::GSSName(std::string namestr, gss_OID name_type, gss_imp_name_type fn)
49 init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
52 GSSName::GSSName(char *namestr, gss_OID name_type, gss_imp_name_type fn)
54 init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
57 GSSName::GSSName(GSSBuffer namestr, gss_OID name_type, gss_imp_name_type fn)
59 init(namestr, GSSOID(name_type), fn);
62 GSSName::GSSName(std::string namestr, std::string name_type, gss_imp_name_type fn)
64 init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
67 GSSName::GSSName(char *namestr, std::string name_type, gss_imp_name_type fn)
69 init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
72 GSSName::GSSName(GSSBuffer namestr, std::string name_type, gss_imp_name_type fn)
74 init(namestr, GSSOID(name_type), fn);
77 void GSSName::release()
80 OM_uint32 major, minor;
83 if (name == GSS_C_NO_NAME)
88 major = gss_release_name(&minor, &name);
89 if ( GSS_ERROR(major) && !( major & GSS_S_BAD_NAME ) )
91 throw GSSException("Cannot free memory for a GSS name.", major, minor);
104 std::string GSSName::toString()
107 OM_uint32 major, minor;
114 major = gss_display_name(&minor, (this->name), buf.toGss(), &oid);
115 if ( GSS_ERROR(major) )
117 throw GSSException("Cannot convert a GSS name to a string.", major, minor);
122 return buf.toString();
125 bool GSSName::setValue ( gss_name_t newName )
128 this->name = newName;