1 #include "ppport.h" 2 GSSAPI::Status 3 new(class, major, minor) 4 char *class 5 U32 major 6 U32 minor 7 CODE: 8 RETVAL.major = major; 9 RETVAL.minor = minor; 10 OUTPUT: 11 RETVAL 12 13 U32 14 major(status) 15 GSSAPI::Status status 16 CODE: 17 RETVAL = status.major; 18 OUTPUT: 19 RETVAL 20 21 U32 22 minor(status) 23 GSSAPI::Status status 24 CODE: 25 RETVAL = status.minor; 26 OUTPUT: 27 RETVAL 28 29 U32 30 GSS_CALLING_ERROR(code) 31 U32 code 32 33 U32 34 GSS_ROUTINE_ERROR(code) 35 U32 code 36 37 U32 38 GSS_SUPPLEMENTARY_INFO(code) 39 U32 code 40 41 bool 42 GSS_ERROR(code) 43 U32 code 44 CODE: 45 RETVAL = GSS_ERROR(code) != 0; 46 OUTPUT: 47 RETVAL 48 49 U32 50 GSS_CALLING_ERROR_FIELD(code) 51 U32 code 52 53 U32 54 GSS_ROUTINE_ERROR_FIELD(code) 55 U32 code 56 57 U32 58 GSS_SUPPLEMENTARY_INFO_FIELD(code) 59 U32 code 60 61 void 62 display_status(code, type) 63 U32 code 64 int type 65 PREINIT: 66 OM_uint32 major_status, minor_status; 67 unsigned int msg_ctx; 68 gss_buffer_desc msg; 69 PPCODE: 70 msg_ctx = 0; 71 do { 72 major_status = 73 gss_display_status(&minor_status, code, type, 74 GSS_C_NO_OID, &msg_ctx, &msg); 75 if (GSS_ERROR(major_status)) { 76 gss_release_buffer(&minor_status, &msg); 77 break; 78 } 79 XPUSHs(sv_2mortal(newSVpvn(msg.value, msg.length))); 80 gss_release_buffer(&minor_status, &msg); 81 } while (msg_ctx); 82 83