(gss_display_status): use gss_oid_equal, handle supplementary errors
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@11743 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * Copyright (c) 1998 - 2002 Kungliga Tekniska H<>gskolan | ||||
|  * Copyright (c) 1998 - 2003 Kungliga Tekniska H<>gskolan | ||||
|  * (Royal Institute of Technology, Stockholm, Sweden).  | ||||
|  * All rights reserved.  | ||||
|  * | ||||
| @@ -93,6 +93,26 @@ routine_error(OM_uint32 v) | ||||
| 	return msgs[v]; | ||||
| } | ||||
|  | ||||
| static char * | ||||
| supplementary_error(OM_uint32 v) | ||||
| { | ||||
|     static char *msgs[] = { | ||||
| 	"normal completion", | ||||
| 	"continuation call to routine required", | ||||
| 	"duplicate per-message token detected", | ||||
| 	"timed-out per-message token detected", | ||||
| 	"reordered (early) per-message token detected", | ||||
| 	"skipped predecessor token(s) detected" | ||||
|     }; | ||||
|  | ||||
|     v >>= GSS_C_SUPPLEMENTARY_OFFSET; | ||||
|  | ||||
|     if (v >= sizeof(msgs)/sizeof(*msgs)) | ||||
| 	return "unknown routine error"; | ||||
|     else | ||||
| 	return msgs[v]; | ||||
| } | ||||
|  | ||||
| void | ||||
| gssapi_krb5_set_error_string (void) | ||||
| { | ||||
| @@ -119,13 +139,20 @@ OM_uint32 gss_display_status | ||||
|  | ||||
|   GSSAPI_KRB5_INIT (); | ||||
|  | ||||
|   *minor_status = 0; | ||||
|   status_string->length = 0; | ||||
|   status_string->value = NULL; | ||||
|  | ||||
|   if (mech_type != GSS_C_NO_OID && | ||||
|       mech_type != GSS_KRB5_MECHANISM) | ||||
|       return GSS_S_BAD_MECH; | ||||
|   if (gss_oid_equal(mech_type, GSS_C_NO_OID) == 0 && | ||||
|       gss_oid_equal(mech_type, GSS_KRB5_MECHANISM) == 0) { | ||||
|       *minor_status = 0; | ||||
|       return GSS_C_GSS_CODE; | ||||
|   } | ||||
|  | ||||
|   if (status_type == GSS_C_GSS_CODE) { | ||||
|       if (GSS_SUPPLEMENTARY_INFO(status_value)) | ||||
| 	  asprintf(&buf, "%s",  | ||||
| 		   supplementary_error(GSS_SUPPLEMENTARY_INFO(status_value))); | ||||
|       else | ||||
| 	  asprintf (&buf, "%s %s", | ||||
| 		    calling_error(GSS_CALLING_ERROR(status_value)), | ||||
| 		    routine_error(GSS_ROUTINE_ERROR(status_value))); | ||||
| @@ -140,8 +167,10 @@ OM_uint32 gss_display_status | ||||
| 	  else | ||||
| 	      buf = strdup(tmp); | ||||
|       } | ||||
|   } else | ||||
|   } else { | ||||
|       *minor_status = EINVAL; | ||||
|       return GSS_S_BAD_STATUS; | ||||
|   } | ||||
|  | ||||
|   if (buf == NULL) { | ||||
|       *minor_status = ENOMEM; | ||||
| @@ -149,6 +178,7 @@ OM_uint32 gss_display_status | ||||
|   } | ||||
|  | ||||
|   *message_context = 0; | ||||
|   *minor_status = 0; | ||||
|  | ||||
|   status_string->length = strlen(buf); | ||||
|   status_string->value  = buf; | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * Copyright (c) 1998 - 2002 Kungliga Tekniska H<>gskolan | ||||
|  * Copyright (c) 1998 - 2003 Kungliga Tekniska H<>gskolan | ||||
|  * (Royal Institute of Technology, Stockholm, Sweden).  | ||||
|  * All rights reserved.  | ||||
|  * | ||||
| @@ -93,6 +93,26 @@ routine_error(OM_uint32 v) | ||||
| 	return msgs[v]; | ||||
| } | ||||
|  | ||||
| static char * | ||||
| supplementary_error(OM_uint32 v) | ||||
| { | ||||
|     static char *msgs[] = { | ||||
| 	"normal completion", | ||||
| 	"continuation call to routine required", | ||||
| 	"duplicate per-message token detected", | ||||
| 	"timed-out per-message token detected", | ||||
| 	"reordered (early) per-message token detected", | ||||
| 	"skipped predecessor token(s) detected" | ||||
|     }; | ||||
|  | ||||
|     v >>= GSS_C_SUPPLEMENTARY_OFFSET; | ||||
|  | ||||
|     if (v >= sizeof(msgs)/sizeof(*msgs)) | ||||
| 	return "unknown routine error"; | ||||
|     else | ||||
| 	return msgs[v]; | ||||
| } | ||||
|  | ||||
| void | ||||
| gssapi_krb5_set_error_string (void) | ||||
| { | ||||
| @@ -119,13 +139,20 @@ OM_uint32 gss_display_status | ||||
|  | ||||
|   GSSAPI_KRB5_INIT (); | ||||
|  | ||||
|   *minor_status = 0; | ||||
|   status_string->length = 0; | ||||
|   status_string->value = NULL; | ||||
|  | ||||
|   if (mech_type != GSS_C_NO_OID && | ||||
|       mech_type != GSS_KRB5_MECHANISM) | ||||
|       return GSS_S_BAD_MECH; | ||||
|   if (gss_oid_equal(mech_type, GSS_C_NO_OID) == 0 && | ||||
|       gss_oid_equal(mech_type, GSS_KRB5_MECHANISM) == 0) { | ||||
|       *minor_status = 0; | ||||
|       return GSS_C_GSS_CODE; | ||||
|   } | ||||
|  | ||||
|   if (status_type == GSS_C_GSS_CODE) { | ||||
|       if (GSS_SUPPLEMENTARY_INFO(status_value)) | ||||
| 	  asprintf(&buf, "%s",  | ||||
| 		   supplementary_error(GSS_SUPPLEMENTARY_INFO(status_value))); | ||||
|       else | ||||
| 	  asprintf (&buf, "%s %s", | ||||
| 		    calling_error(GSS_CALLING_ERROR(status_value)), | ||||
| 		    routine_error(GSS_ROUTINE_ERROR(status_value))); | ||||
| @@ -140,8 +167,10 @@ OM_uint32 gss_display_status | ||||
| 	  else | ||||
| 	      buf = strdup(tmp); | ||||
|       } | ||||
|   } else | ||||
|   } else { | ||||
|       *minor_status = EINVAL; | ||||
|       return GSS_S_BAD_STATUS; | ||||
|   } | ||||
|  | ||||
|   if (buf == NULL) { | ||||
|       *minor_status = ENOMEM; | ||||
| @@ -149,6 +178,7 @@ OM_uint32 gss_display_status | ||||
|   } | ||||
|  | ||||
|   *message_context = 0; | ||||
|   *minor_status = 0; | ||||
|  | ||||
|   status_string->length = strlen(buf); | ||||
|   status_string->value  = buf; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand