eb55aff4c960289a0e1b178bcc42035ce07b657e
[gssweb.git] / json_gssapi / src / datamodel / GSSName.cpp
1 /*
2  * Copyright (c) 2014 <copyright holder> <email>
3  * 
4  * For license details, see the LICENSE file in the root of this project.
5  * 
6  */
7
8 #include "GSSName.h"
9 #include "../GSSException.h" 
10
11 void GSSName::init(GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn)
12 {
13   /* Variables */
14   OM_uint32 major, minor;
15   /* Error checking */
16   /* Setup */
17   /* Main */ 
18   major = gss_import_name(&minor, namestr.toGss(), name_type.toGss(), &name);
19   if ( GSS_ERROR(major) )
20   {
21     std::string errMsg;
22     errMsg += "Cannot import name: ";
23     errMsg += namestr.toString();
24     throw GSSException(errMsg.c_str(), major, minor, name_type.toGss());
25   }
26   this->function = fn;
27   
28   /* Cleanup */
29   /* Return */
30 }
31
32
33
34 GSSName::GSSName(std::string namestr, GSSOID name_type, gss_imp_name_type fn)
35 {
36   init(namestr, name_type, fn);
37 }
38
39 GSSName::GSSName(char *namestr,       GSSOID name_type, gss_imp_name_type fn)
40 {
41   init(GSSBuffer(namestr), name_type, fn); 
42 }
43
44 GSSName::GSSName(GSSBuffer namestr,   GSSOID name_type, gss_imp_name_type fn)
45 {
46   init(GSSBuffer(namestr), name_type, fn); 
47 }
48
49 GSSName::GSSName(std::string namestr, gss_OID name_type, gss_imp_name_type fn)
50 {
51   init(GSSBuffer(namestr), GSSOID(name_type), fn); 
52 }
53
54 GSSName::GSSName(char *namestr,       gss_OID name_type, gss_imp_name_type fn)
55 {
56   init(GSSBuffer(namestr), GSSOID(name_type), fn); 
57 }
58
59 GSSName::GSSName(GSSBuffer namestr,   gss_OID name_type, gss_imp_name_type fn)
60 {
61   init(namestr, GSSOID(name_type), fn); 
62 }
63
64 GSSName::GSSName(std::string namestr, std::string name_type, gss_imp_name_type fn)
65 {
66   init(GSSBuffer(namestr), GSSOID(name_type), fn); 
67 }
68
69 GSSName::GSSName(char *namestr,       std::string name_type, gss_imp_name_type fn)
70 {
71   init(GSSBuffer(namestr), GSSOID(name_type), fn); 
72 }
73
74 GSSName::GSSName(GSSBuffer namestr,   std::string name_type, gss_imp_name_type fn)
75 {
76   init(namestr, GSSOID(name_type), fn); 
77 }
78
79
80 GSSName::~GSSName()
81 {
82   /* Variables */
83   OM_uint32 major, minor;
84   
85   /* Error checking */
86   /* Setup */
87   /* Main */ 
88   major = gss_release_name(&minor, &name);
89   if ( GSS_ERROR(major) && !( major & GSS_S_BAD_NAME ) )
90   {
91     throw GSSException("Cannot free memory for a GSS name.", major, minor);
92   }
93
94   /* Cleanup */
95   /* Return */
96 }  
97
98
99 std::string GSSName::toString()
100 {
101   /* Variables */
102   OM_uint32 major, minor;
103   gss_OID oid;
104   GSSBuffer buf;
105   
106   /* Error checking */
107   /* Setup */
108   /* Main */ 
109   major = gss_display_name(&minor, (this->name), buf.toGss(), &oid);
110   if ( GSS_ERROR(major) )
111   {
112     throw GSSException("Cannot convert a GSS name to a string.", major, minor);
113   }
114   
115   /* Cleanup */
116   /* Return */
117   return buf.toString();
118 }