Fill in error details from edg_wll_gss_read() after error in gss_unwrap()
authorZdeněk Salvet <salvet@ics.muni.cz>
Mon, 24 Sep 2007 12:49:44 +0000 (12:49 +0000)
committerZdeněk Salvet <salvet@ics.muni.cz>
Mon, 24 Sep 2007 12:49:44 +0000 (12:49 +0000)
(random garbage was interpreted by callers before).

org.glite.security.gsoap-plugin/src/glite_gss.c

index fc8437f..970f1af 100644 (file)
@@ -837,7 +837,7 @@ int
 edg_wll_gss_read(edg_wll_GssConnection *connection, void *buf, size_t bufsize,
                 struct timeval *timeout, edg_wll_GssStatus* gss_code)
 {
-   OM_uint32 maj_stat, min_stat;
+   OM_uint32 maj_stat, min_stat, min_stat2;
    gss_buffer_desc input_token;
    gss_buffer_desc output_token;
    int ret, i;
@@ -863,15 +863,17 @@ edg_wll_gss_read(edg_wll_GssConnection *connection, void *buf, size_t bufsize,
       ret = recv_token(connection->sock, &input_token.value, &input_token.length,
                       timeout);
       if (ret)
-        /* XXX cleanup */
         return ret;
 
       ERR_clear_error();
       maj_stat = gss_unwrap(&min_stat, connection->context, &input_token,
                            &output_token, NULL, NULL);
-      gss_release_buffer(&min_stat, &input_token);
+      gss_release_buffer(&min_stat2, &input_token);
       if (GSS_ERROR(maj_stat)) {
-        /* XXX cleanup */
+         if (gss_code) {
+           gss_code->minor_status = min_stat;
+           gss_code->major_status = maj_stat;
+         }
         return EDG_WLL_GSS_ERROR_GSS;
       }
    } while (maj_stat == 0 && output_token.length == 0 && output_token.value == NULL);