* Should we return failure here?
*/
if (!do_kerberos)
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
output_cred_handle->cred_flags = 0;
/*
*/
if (*minor_status = krb5_copy_principal(desired_name,
&output_cred_handle->principal)) {
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
if (gss_krb5_fetchfrom) {
/* use the named keytab */
if (!(set = (gss_OID_set)
malloc (sizeof(struct gss_OID_set_desc)))) {
*minor_status = ENOMEM;
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
set->count = 1;
set->elements = &gss_OID_krb5;
* forth.
*/
-static krb5_error_code gss_krb5_keyproc(cred_handle, principal, vno, key)
- krb5_pointer cred_handle;
- krb5_principal principal;
- krb5_kvno vno;
- krb5_keyblock **key;
+static krb5_error_code gss_krb5_keyproc(DECLARG(krb5_pointer, cred_handle),
+ DECLARG(krb5_principal, principal),
+ DECLARG(krb5_kvno, vno),
+ DECLARG(krb5_keyblock **, key))
+OLDDECLARG(krb5_pointer, cred_handle)
+OLDDECLARG(krb5_principal, principal)
+OLDDECLARG(krb5_kvno, vno)
+OLDDECLARG(krb5_keyblock **, key)
{
gss_cred_id_t *creds;
return(retval);
inbuf.length = input_token->length-5;
inbuf.data = ( (char *) input_token->value)+5;
- sender_addr.addrtype = channel.sender_addrtype;
- sender_addr.length = channel.sender_address.length;
- sender_addr.contents = channel.sender_address.value;
+ sender_addr.addrtype = channel->initiator_addrtype;
+ sender_addr.length = channel->initiator_address.length;
+ sender_addr.contents = (krb5_octet *)
+ channel->initiator_address.value;
server = verifier_cred_handle.principal;
/*
* Setup the replay cache.
*/
if (*minor_status = krb5_get_server_rcache(server[1]->data,
&rcache))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
/*
* Now let's rip apart the packet
*/
0, gss_krb5_keyproc,
&verifier_cred_handle,
rcache, &authdat))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if (*minor_status = krb5_rc_close(rcache))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
/*
* Allocate the context handle structure
*/
- if (!(context = malloc(sizeof(struct gss_ctx_id_desc)))) {
+ if (!(context = (gss_ctx_id_t)
+ malloc(sizeof(struct gss_ctx_id_desc)))) {
*minor_status = ENOMEM;
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
context->mech_type = &gss_OID_krb5;
context->flags = 0;
context->state = GSS_KRB_STATE_DOWN;
context->am_client = 0;
+ context->rcache = NULL;
- context->my_address.addrtype = channel.sender_addrtype;
- context->my_address.length = channel.sender_address.length;
- if (!(context->my_address.contents =
+ context->my_address.addrtype = channel->initiator_addrtype;
+ context->my_address.length = channel->initiator_address.length;
+ if (!(context->my_address.contents = (krb5_octet *)
malloc(context->my_address.length))) {
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
memcpy((char *) context->my_address.contents,
- (char *) channel.sender_address.value,
+ (char *) channel->initiator_address.value,
context->my_address.length);
- context->his_address.addrtype = channel.receiver_addrtype;
- context->his_address.length = channel.receiver_address.length;
- if (!(context->his_address.contents =
+ context->his_address.addrtype = channel->acceptor_addrtype;
+ context->his_address.length = channel->acceptor_address.length;
+ if (!(context->his_address.contents = (krb5_octet *)
malloc(context->my_address.length))) {
xfree(context->my_address.contents);
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
memcpy((char *) context->his_address.contents,
- (char *) channel.receiver_address.value,
+ (char *) channel->acceptor_address.value,
context->his_address.length);
/*
xfree(context->my_address.contents);
xfree(context);
krb5_free_tkt_authent(authdat);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
repl.ctime = authdat->authenticator->ctime;
xfree(context->my_address.contents);
xfree(context);
krb5_free_tkt_authent(authdat);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
if (*minor_status = gss_make_token(minor_status,
GSS_API_KRB5_TYPE,
xfree(context);
xfree(outbuf.data);
krb5_free_tkt_authent(authdat);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
}
xfree(context->his_address.contents);
xfree(context->my_address.contents);
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
if (*minor_status =
krb5_copy_principal(authdat->authenticator->client,
xfree(context->his_address.contents);
xfree(context->my_address.contents);
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
if (*minor_status =
krb5_copy_keyblock(authdat->ticket->enc_part2->session,
xfree(context->his_address.contents);
xfree(context->my_address.contents);
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
context->his_seq_num = authdat->authenticator->seq_number;
context->cusec = authdat->authenticator->cusec;
xfree(context->his_address.contents);
xfree(context->my_address.contents);
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
}
if (mech_type)
/*
* Context is non-null, this is the second time through....
*/
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
}
#include <gssapi.h>
-OM_uint32 gss_check_token(minor_status, input_token, mechanism, type)
- OM_uint32 *minor_status;
- gss_buffer_t input_token;
- unsigned char mechanism;
- unsigned char type;
+OM_uint32 gss_check_token(DECLARG(OM_uint32 *, minor_status),
+ DECLARG(gss_buffer_t, input_token),
+ DECLARG(unsigned int, mechanism),
+ DECLARG(unsigned int, type))
+OLDDECLARG(OM_uint32 *, minor_status)
+OLDDECLARG(gss_buffer_t, input_token)
+OLDDECLARG(unsigned int, mechanism)
+OLDDECLARG(unsigned int, type)
{
char *buf;
*minor_status = 0;
if (!input_token)
- return(gss_make_ce(GSS_CE_CALL_INACCESSIBLE_READ));
+ return(GSS_S_CALL_INACCESSIBLE_READ);
if (input_token->length < 4)
- return(gss_make_re(GSS_RE_DEFECTIVE_TOKEN));
+ return(GSS_S_DEFECTIVE_TOKEN);
buf = input_token->value;
if (buf[0] != GSS_API_IMPL_VERSION)
- return(gss_make_re(GSS_RE_DEFECTIVE_TOKEN));
+ return(GSS_S_DEFECTIVE_TOKEN);
if (mechanism && (mechanism != buf[1]))
- return(gss_make_re(GSS_RE_BAD_MECH));
+ return(GSS_S_BAD_MECH);
if (type && (type != buf[2]))
- return(gss_make_re(GSS_RE_FAILURE) | GSS_SS_UNSEQ_TOKEN);
+ return(GSS_S_FAILURE | GSS_S_UNSEQ_TOKEN);
return(GSS_S_COMPLETE);
}
#include <gssapi.h>
-OM_uint32 gss_display_name(minor_status, input_name, output_name_buffer)
+OM_uint32 gss_display_name(minor_status, input_name, output_name_buffer,
+ output_name_type)
OM_uint32 *minor_status;
gss_name_t input_name;
gss_buffer_t output_name_buffer;
+ gss_OID *output_name_type;
{
char *str;
if (*minor_status = krb5_unparse_name(input_name, &str))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
output_name_buffer->value = str;
output_name_buffer->length = strlen(str);
+ if (output_name_type)
+ *output_name_type = &gss_OID_krb5;
+
return(GSS_S_COMPLETE);
}
#include <krb5/func-proto.h>
#include <com_err.h>
+/*
+ * Some compilers can't handle void *
+ */
+#ifdef __STDC__
+#define Voidptr void *
+#else
+#define Voidptr char *
+#endif
+
typedef unsigned int OM_uint32;
typedef unsigned short OM_uint16;
typedef struct gss_buffer_desc_struct {
size_t length;
- void *value;
+ Voidptr value;
} gss_buffer_desc, *gss_buffer_t;
typedef struct gss_OID_desc {
} *gss_ctx_id_t;
/* structure for address */
-typedef struct channel_bindings_struct {
- OM_uint32 sender_addrtype;
- gss_buffer_desc sender_address;
- OM_uint32 receiver_addrtype;
- gss_buffer_desc receiver_address;
- gss_buffer_desc appl_specific;
-} gss_channel_bindings;
-
-#define GSS_ADDRTYPE_INET 0x0002
-#define GSS_ADDRTYPE_CHAOS 0x0005
-#define GSS_ADDRTYPE_XNS 0x0006
-#define GSS_ADDRTYPE_ISO 0x0007
-#define GSS_ADDRTYPE_DDP 0x0010
+typedef struct gss_channel_bindings_desc {
+ OM_uint32 initiator_addrtype;
+ gss_buffer_desc initiator_address;
+ OM_uint32 acceptor_addrtype;
+ gss_buffer_desc acceptor_address;
+ gss_buffer_desc application_data;
+} *gss_channel_bindings;
+
+#define GSS_C_AF_INET 0x0002
+#define GSS_C_AF_CHAOS 0x0005
+#define GSS_C_AF_XNS 0x0006
+#define GSS_C_AF_ISO 0x0007
+#define GSS_C_AF_DDP 0x0010
#define GSS_KRB_STATE_DOWN 1
#define GSS_KRB_STATE_MUTWAIT 2
#define GSS_C_NULL_OID_SET ((gss_OID_set) 0)
#define GSS_C_NO_CREDENTIAL (gss_default_credentials)
+extern gss_cred_id_t gss_default_credentials;
+
/*
* Indefinite time
*/
#define gss_routine_error(r) ((r) & 0x00ff0000)
#define gss_supplementary_info(r) ((r) & 0x0000ffff)
+/*
+ * gss_acquire_cred --- cred_usage values
+ */
+#define GSS_C_INITIATE 0x0001
+#define GSS_C_ACCEPT 0x0002
+#define GSS_C_BOTH 0x0003
+
/*
* gss_init_sec_context flags
*/
*/
#define GSS_C_QOP_DEFAULT 0
+/*
+ * Values for gss_display_status
+ */
+#define GSS_C_GSS_CODE 1
+#define GSS_C_MECH_CODE 2
+
/*
* OID declarations
*/
extern struct gss_OID_desc gss_OID_krb5;
extern struct gss_OID_desc gss_OID_krb5_name;
+/*
+ * XXX Stuff to make Kannan's flogin stuff happy.
+ */
+#define GSS_C_MAX_TOKEN 1024
+#define GSS_C_MAX_PRINTABLE_NAME 1024
+
+#define GSS_C_READ (1 << 0)
+#define GSS_C_WRITE (1 << 1)
+#define GSS_C_EXECUTE (1 << 2)
+
/*
* Function declaragions, generated by mkptypes
*/
/* dsp_name.c */
OM_uint32 gss_display_name PROTOTYPE((OM_uint32 *minor_status,
gss_name_t input_name,
- gss_buffer_t output_name_buffer));
+ gss_buffer_t output_name_buffer,
+ gss_OID *output_name_type));
/* imp_name.c */
OM_uint32 gss_import_name PROTOTYPE((OM_uint32 *minor_status,
unsigned int mechanism,
unsigned int type,
size_t length,
- void *data,
+ Voidptr data,
gss_buffer_t output_token));
/* rel_buffer.c */
}
if (*minor_status = krb5_parse_name(input_name_buffer->value,
output_name))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
else
return(GSS_S_COMPLETE);
}
/*
* It's of an unknown type. We don't know how to deal.
*/
- return(gss_make_re(GSS_RE_BAD_NAMETYPE));
+ return(GSS_S_BAD_NAMETYPE);
}
if (!(str = malloc(input_name_buffer->length+1))) {
*minor_status = ENOMEM;
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
memcpy(str, input_name_buffer->value, input_name_buffer->length);
str[input_name_buffer->length] = '\0';
service = cp = str + 8;
if (!(cp = index(cp, '@'))) {
free(str);
- return(gss_make_re(GSS_RE_BAD_NAME));
+ return(GSS_S_BAD_NAME);
}
*cp++ = 0;
host = cp;
sprintf(buf, "%s/%s", kservice, host);
if (*minor_status = krb5_parse_name(buf, output_name))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
else
return(GSS_S_COMPLETE);
}
*minor_status = 0;
if (!(set = (gss_OID_set) malloc (sizeof(struct gss_OID_set_desc)))) {
*minor_status = ENOMEM;
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
set->count = 1;
set->elements = &gss_OID_krb5;
*/
if ((mech_type != GSS_C_NULL_OID) &&
!gss_compare_OID(mech_type, &gss_OID_krb5)) {
- return(gss_make_re(GSS_RE_BAD_MECH));
+ return(GSS_S_BAD_MECH);
}
if (actual_mech_type)
*actual_mech_type = &gss_OID_krb5;
* fill in with defaults.
*/
if (*minor_status = krb5_cc_default(&ccache)) {
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
claimant_cred_handle.ccache = ccache;
if (*minor_status =
krb5_cc_get_principal(ccache,
&claimant_cred_handle.principal))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
/*
* Allocate the context handle structure
*/
- if (!(context = malloc(sizeof(struct gss_ctx_id_desc)))) {
+ if (!(context = (gss_ctx_id_t)
+ malloc(sizeof(struct gss_ctx_id_desc)))) {
*minor_status = ENOMEM;
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
context->mech_type = &gss_OID_krb5;
context->state = GSS_KRB_STATE_DOWN;
if (*minor_status =
krb5_copy_principal(claimant_cred_handle.principal,
&context->me))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if (*minor_status =
krb5_copy_principal(target_name,
&context->him))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
context->flags = req_flags | GSS_C_CONF_FLAG;;
context->am_client = 1;
context->session_key = NULL;
- context->my_address.addrtype = channel.sender_addrtype;
- context->my_address.length = channel.sender_address.length;
- if (!(context->my_address.contents =
+ context->rcache = NULL;
+ context->my_address.addrtype = channel->initiator_addrtype;
+ context->my_address.length = channel->initiator_address.length;
+ if (!(context->my_address.contents = (krb5_octet *)
malloc(context->my_address.length))) {
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
memcpy((char *) context->my_address.contents,
- (char *) channel.sender_address.value,
+ (char *) channel->initiator_address.value,
context->my_address.length);
- context->his_address.addrtype = channel.receiver_addrtype;
- context->his_address.length = channel.receiver_address.length;
- if (!(context->his_address.contents =
+ context->his_address.addrtype = channel->acceptor_addrtype;
+ context->his_address.length = channel->acceptor_address.length;
+ if (!(context->his_address.contents = (krb5_octet *)
malloc(context->my_address.length))) {
xfree(context->my_address.contents);
xfree(context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
memcpy((char *) context->his_address.contents,
- (char *) channel.receiver_address.value,
+ (char *) channel->acceptor_address.value,
context->his_address.length);
/*
* Generate a random sequence number
xfree(context->his_address.contents);
xfree(context->my_address.contents);
free((char *)context);
- return(make_gss_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
context->his_seq_num = 0;
/*
&creds)) {
krb5_free_cred_contents(&creds);
free((char *)context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
/*
* Setup the ap_req_options
* OK, get the authentication header!
*/
if (*minor_status = krb5_mk_req_extended(ap_req_options, 0,
- &creds.times,
kdc_options,
context->my_seq_num, 0,
ccache, &creds, &authent,
memset((char *)&authent, 0, sizeof(authent));
krb5_free_cred_contents(&creds);
free((char *)context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
context->cusec = authent.cusec;
context->ctime = authent.ctime;
xfree(outbuf.data);
krb5_free_cred_contents(&creds);
free((char *)context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
if (*minor_status = gss_make_token(minor_status,
xfree(outbuf.data);
krb5_free_cred_contents(&creds);
free((char *) context);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
/*
* Send over the requested flags information
krb5_free_cred_contents(&creds);
if (ap_req_options & AP_OPTS_MUTUAL_REQUIRED) {
context->state = GSS_KRB_STATE_MUTWAIT;
- return(GSS_SS_CONTINUE_NEEDED);
+ return(GSS_S_CONTINUE_NEEDED);
} else {
context->state = GSS_KRB_STATE_UP;
return(GSS_S_COMPLETE);
context = *context_handle;
if (context->state != GSS_KRB_STATE_MUTWAIT)
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if (retval = gss_check_token(minor_status, input_token,
GSS_API_KRB5_TYPE,
GSS_API_KRB5_REP))
if (*minor_status = krb5_rd_rep(&inbuf, context->session_key,
&repl))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if ((repl->ctime != context->ctime) ||
(repl->cusec != context->cusec)) {
*minor_status = KRB5_SENDAUTH_MUTUAL_FAILED;
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
context->his_seq_num = repl->seq_number;
context->state = GSS_KRB_STATE_UP;
OM_uint32 gss_make_token(minor_status, mechanism, type, length, data,
output_token)
OM_uint32 *minor_status;
- unsigned char mechanism;
- unsigned char type;
+ unsigned int mechanism;
+ unsigned int type;
size_t length;
- void *data;
+ Voidptr data;
gss_buffer_t output_token;
{
char *buf;
offset++;
if (!(buf = malloc(length+offset))) {
*minor_status = ENOMEM;
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
- output_token->value = buf;
+ output_token->value = (Voidptr) buf;
output_token->length = length+4;
buf[0] = GSS_API_IMPL_VERSION;
buf[1] = mechanism; /* Authentication mechanism */
{
krb5_free_principal(cred_handle->principal);
if (*minor_status = krb5_cc_close(cred_handle->ccache))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
xfree(cred_handle->srvtab.contents);
return(GSS_S_COMPLETE);
}
krb5_keytype_array[context->session_key->keytype]->
system->block_length;
if (!(i_vector=malloc(eblock_size))) {
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
memset(i_vector, 0, eblock_size);
if (*minor_status = krb5_mk_priv(&inbuf, ETYPE_DES_CBC_CRC,
0, /* no rcache */
i_vector,
&outbuf))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if (*minor_status = gss_make_token(minor_status,
GSS_API_KRB5_TYPE,
GSS_API_KRB5_PRIV,
outbuf.data,
output_message_buffer)) {
xfree(outbuf.data);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
if (conf_state)
*conf_state = 1;
safe_flags,
0, /* no rcache */
&outbuf))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if (*minor_status = gss_make_token(minor_status,
GSS_API_KRB5_TYPE,
GSS_API_KRB5_SAFE,
outbuf.data,
output_message_buffer)) {
xfree(outbuf.data);
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
if (conf_state)
*conf_state = 0;
return(GSS_S_COMPLETE);
}
}
-
+
+#ifdef notdef
/*
* XXX This is done inefficiently; the token in gss_sign does not need
* to include the text of the data, just a cryptographic checksum to
input_message_buffer, NULL, output_message_buffer));
}
+#endif
if (retval = gss_check_token(minor_status, input_message_buffer,
GSS_API_KRB5_TYPE, 0))
return(retval);
- token_type = ((char *) input_message_buffer->value)[4];
+ token_type = ((char *) input_message_buffer->value)[2];
if ((token_type != GSS_API_KRB5_SAFE) &&
(token_type != GSS_API_KRB5_PRIV))
- return(gss_make_re(GSS_RE_DEFECTIVE_TOKEN));
+ return(GSS_S_DEFECTIVE_TOKEN);
inbuf.length = input_message_buffer->length-4;
inbuf.data = ( (char *) input_message_buffer->value)+4;
if (token_type == GSS_API_KRB5_PRIV) {
krb5_keytype_array[context->session_key->keytype]->
system->block_length;
if (!(i_vector=malloc(eblock_size))) {
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
}
memset(i_vector, 0, eblock_size);
if (*minor_status = krb5_rd_priv(&inbuf,
i_vector,
0, /* no rcache */
&outbuf))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if (conf_state)
*conf_state = 1;
} else {
safe_flags,
0, /* no rcache */
&outbuf))
- return(gss_make_re(GSS_RE_FAILURE));
+ return(GSS_S_FAILURE);
if (conf_state)
*conf_state = 0;
}
return(GSS_S_COMPLETE);
}
+#ifdef notdef
OM_uint32 gss_verify(minor_status, context, message_buffer,
token_buffer, qop_state)
OM_uint32 *minor_status;
output_message_buffer, NULL, qop_state))
return(retval);
if (token_buffer->length != output_message_buffer->length)
- ret = gss_make_re(GSS_RE_BAD_SIG);
+ ret = GSS_S_BAD_SIG;
else if (!memcmp(token_buffer->value, output_message_buffer->value,
token_buffer->length))
- ret = gss_make_re(GSS_RE_BAD_SIG);
+ ret = GSS_S_BAD_SIG;
if (retval = gss_release_buffer(minor_status, output_message_buffer))
return(retval);
return(ret);
}
+#endif