gss: add _gss_secure_release_buffer_set()
[metze/heimdal/wip.git] / lib / gssapi / mech / gss_utils.c
index f9e79c1440fdaf0ce24a754dcc991982ceed8d6f..e622d8ff81bc7bedfe058a2203486fff14fc8eb4 100644 (file)
@@ -147,6 +147,36 @@ _gss_copy_buffer(OM_uint32 *minor_status,
        return (GSS_S_COMPLETE);
 }
 
+OM_uint32
+_gss_secure_release_buffer(OM_uint32 *minor_status,
+                          gss_buffer_t buffer)
+{
+    if (buffer->value)
+       memset_s(buffer->value, buffer->length, 0, buffer->length);
+
+    return gss_release_buffer(minor_status, buffer);
+}
+
+OM_uint32
+_gss_secure_release_buffer_set(OM_uint32 *minor_status,
+                              gss_buffer_set_t *buffer_set)
+{
+    size_t i;
+    OM_uint32 minor;
+
+    *minor_status = 0;
+
+    if (*buffer_set == GSS_C_NO_BUFFER_SET)
+       return GSS_S_COMPLETE;
+
+    for (i = 0; i < (*buffer_set)->count; i++)
+       _gss_secure_release_buffer(&minor, &((*buffer_set)->elements[i]));
+
+    (*buffer_set)->count = 0;
+
+    return gss_release_buffer_set(minor_status, buffer_set);
+}
+
 void
 _gss_mg_encode_le_uint32(uint32_t n, uint8_t *p)
 {
@@ -196,8 +226,8 @@ _gss_mg_decode_le_uint16(const void *ptr, uint16_t *n)
 void
 _gss_mg_encode_be_uint16(uint16_t n, uint8_t *p)
 {
-    p[0] = (n >> 24) & 0xFF;
-    p[1] = (n >> 16) & 0xFF;
+    p[0] = (n >> 8) & 0xFF;
+    p[1] = (n >> 0) & 0xFF;
 }
 
 void