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