projects
/
moonshot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix exception to GSS error code mapping
[moonshot.git]
/
mech_eap
/
util_attr.cpp
diff --git
a/mech_eap/util_attr.cpp
b/mech_eap/util_attr.cpp
index
a25d2ff
..
4ded612
100644
(file)
--- a/
mech_eap/util_attr.cpp
+++ b/
mech_eap/util_attr.cpp
@@
-40,7
+40,6
@@
#include <string>
#include <sstream>
#include <exception>
#include <string>
#include <sstream>
#include <exception>
-#include <stdexcept>
#include <new>
/* lazy initialisation */
#include <new>
/* lazy initialisation */
@@
-534,7
+533,7
@@
gss_eap_attr_ctx::getAttributeTypes(gss_buffer_set_t *attrs)
major = gss_create_empty_buffer_set(&minor, attrs);
if (GSS_ERROR(major))
major = gss_create_empty_buffer_set(&minor, attrs);
if (GSS_ERROR(major))
- throw
new std::bad_alloc
;
+ throw
std::bad_alloc()
;
args.attrs = *attrs;
args.attrs = *attrs;
@@
-642,7
+641,7
@@
gss_eap_attr_ctx::exportToBuffer(gss_buffer_t buffer) const
s = obj.dump(JSON_COMPACT);
if (GSS_ERROR(makeStringBuffer(&minor, s, buffer)))
s = obj.dump(JSON_COMPACT);
if (GSS_ERROR(makeStringBuffer(&minor, s, buffer)))
- throw
new std::bad_alloc
;
+ throw
std::bad_alloc()
;
}
/*
}
/*
@@
-683,12
+682,10
@@
gss_eap_attr_ctx::mapException(OM_uint32 *minor, std::exception &e) const
major = GSS_S_FAILURE;
*minor = ENOMEM;
goto cleanup;
major = GSS_S_FAILURE;
*minor = ENOMEM;
goto cleanup;
- } else if (typeid(e) == typeid(
std::runtime_error
)) {
+ } else if (typeid(e) == typeid(
JSONException
)) {
major = GSS_S_BAD_NAME;
*minor = GSSEAP_BAD_ATTR_TOKEN;
major = GSS_S_BAD_NAME;
*minor = GSSEAP_BAD_ATTR_TOKEN;
- goto cleanup;
- } else if (this == NULL) {
- major = GSS_S_FAILURE;
+ gssEapSaveStatusInfo(*minor, "%s", e.what());
goto cleanup;
}
goto cleanup;
}
@@
-712,11
+709,6
@@
gss_eap_attr_ctx::mapException(OM_uint32 *minor, std::exception &e) const
}
cleanup:
}
cleanup:
-#if 0
- /* rethrow for now for debugging */
- throw e;
-#endif
-
assert(GSS_ERROR(major));
return major;
assert(GSS_ERROR(major));
return major;
@@
-1009,29
+1001,38
@@
gssEapImportAttrContext(OM_uint32 *minor,
gss_name_t name)
{
gss_eap_attr_ctx *ctx = NULL;
gss_name_t name)
{
gss_eap_attr_ctx *ctx = NULL;
+ OM_uint32 major = GSS_S_FAILURE;
assert(name->attrCtx == NULL);
if (GSS_ERROR(gssEapAttrProvidersInit(minor)))
return GSS_S_UNAVAILABLE;
assert(name->attrCtx == NULL);
if (GSS_ERROR(gssEapAttrProvidersInit(minor)))
return GSS_S_UNAVAILABLE;
- if (buffer->length != 0) {
- try {
- ctx = new gss_eap_attr_ctx();
+ if (buffer->length == 0)
+ return GSS_S_COMPLETE;
- if (!ctx->initFromBuffer(buffer)) {
- delete ctx;
- *minor = GSSEAP_BAD_ATTR_TOKEN;
- return GSS_S_BAD_NAME;
- }
+ try {
+ ctx = new gss_eap_attr_ctx();
+
+ if (ctx->initFromBuffer(buffer)) {
name->attrCtx = ctx;
name->attrCtx = ctx;
- } catch (std::exception &e) {
- delete ctx;
- return name->attrCtx->mapException(minor, e);
+ major = GSS_S_COMPLETE;
+ *minor = 0;
+ } else {
+ major = GSS_S_BAD_NAME;
+ *minor = GSSEAP_ATTR_CONTEXT_FAILURE;
}
}
+ } catch (std::exception &e) {
+ if (ctx != NULL)
+ major = ctx->mapException(minor, e);
}
}
- return GSS_S_COMPLETE;
+ assert(major == GSS_S_COMPLETE || name->attrCtx == NULL);
+
+ if (GSS_ERROR(major))
+ delete ctx;
+
+ return major;
}
OM_uint32
}
OM_uint32
@@
-1040,27
+1041,38
@@
gssEapDuplicateAttrContext(OM_uint32 *minor,
gss_name_t out)
{
gss_eap_attr_ctx *ctx = NULL;
gss_name_t out)
{
gss_eap_attr_ctx *ctx = NULL;
+ OM_uint32 major = GSS_S_FAILURE;
assert(out->attrCtx == NULL);
assert(out->attrCtx == NULL);
+ if (in->attrCtx == NULL) {
+ *minor = 0;
+ return GSS_S_COMPLETE;
+ }
+
if (GSS_ERROR(gssEapAttrProvidersInit(minor)))
return GSS_S_UNAVAILABLE;
try {
if (GSS_ERROR(gssEapAttrProvidersInit(minor)))
return GSS_S_UNAVAILABLE;
try {
- if (in->attrCtx != NULL) {
- ctx = new gss_eap_attr_ctx();
- if (!ctx->initFromExistingContext(in->attrCtx)) {
- delete ctx;
- *minor = GSSEAP_ATTR_CONTEXT_FAILURE;
- return GSS_S_FAILURE;
- }
+ ctx = new gss_eap_attr_ctx();
+
+ if (ctx->initFromExistingContext(in->attrCtx)) {
out->attrCtx = ctx;
out->attrCtx = ctx;
+ major = GSS_S_COMPLETE;
+ *minor = 0;
+ } else {
+ major = GSS_S_FAILURE;
+ *minor = GSSEAP_ATTR_CONTEXT_FAILURE;
}
} catch (std::exception &e) {
}
} catch (std::exception &e) {
- delete ctx;
- return in->attrCtx->mapException(minor, e);
+ major = in->attrCtx->mapException(minor, e);
}
}
+ assert(major == GSS_S_COMPLETE || out->attrCtx == NULL);
+
+ if (GSS_ERROR(major))
+ delete ctx;
+
return GSS_S_COMPLETE;
}
return GSS_S_COMPLETE;
}
@@
-1140,18
+1152,21
@@
gssEapCreateAttrContext(OM_uint32 *minor,
assert(gssCtx != GSS_C_NO_CONTEXT);
assert(gssCtx != GSS_C_NO_CONTEXT);
+ *pAttrContext = NULL;
+
major = gssEapAttrProvidersInit(minor);
if (GSS_ERROR(major))
return major;
major = gssEapAttrProvidersInit(minor);
if (GSS_ERROR(major))
return major;
- *minor = GSSEAP_ATTR_CONTEXT_FAILURE;
- major = GSS_S_FAILURE;
-
try {
try {
- *pAttrContext = ctx = new gss_eap_attr_ctx();
+ ctx = new gss_eap_attr_ctx();
+
if (ctx->initFromGssContext(gssCred, gssCtx)) {
if (ctx->initFromGssContext(gssCred, gssCtx)) {
- *minor = 0;
major = GSS_S_COMPLETE;
major = GSS_S_COMPLETE;
+ *minor = 0;
+ } else {
+ major = GSS_S_FAILURE;
+ *minor = GSSEAP_ATTR_CONTEXT_FAILURE;
}
} catch (std::exception &e) {
if (ctx != NULL)
}
} catch (std::exception &e) {
if (ctx != NULL)
@@
-1160,10
+1175,11
@@
gssEapCreateAttrContext(OM_uint32 *minor,
if (major == GSS_S_COMPLETE) {
*pExpiryTime = ctx->getExpiryTime();
if (major == GSS_S_COMPLETE) {
*pExpiryTime = ctx->getExpiryTime();
- } else {
- delete ctx;
- *pAttrContext = NULL;
+ *pAttrContext = ctx;
}
}
+ if (GSS_ERROR(major))
+ delete ctx;
+
return major;
}
return major;
}