Commit ed5fae58 authored by Richard Levitte's avatar Richard Levitte
Browse files

Implement missing functions.

Have the f parameter to _ctrl functions have the prototype (*)(void)
rather than (*)(), for the sake of C++ compilers.
Disable unimplemented functionality.
parent d55141ed
Loading
Loading
Loading
Loading
+23 −6
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ void STORE_free(STORE *ui);
/* Give a user interface parametrised control commands.  This can be used to
   send down an integer, a data pointer or a function pointer, as well as
   be used to get information from a STORE. */
int STORE_ctrl(STORE *store, int cmd, long i, void *p, void (*f)());
int STORE_ctrl(STORE *store, int cmd, long i, void *p, void (*f)(void));

/* A control to set the directory with keys and certificates.  Used by the
   built-in directory level method. */
@@ -123,6 +123,7 @@ const STORE_METHOD *STORE_set_method(STORE *store, const STORE_METHOD *meth);
   and is of course volatile.  It's used by other methods that have an in-memory
   cache. */
const STORE_METHOD *STORE_Memory(void);
#if 0 /* Not yet implemented */
/* This is the directory store.  It does everything except revoking and updating,
   and uses STORE_Memory() to cache things in memory. */
const STORE_METHOD *STORE_Directory(void);
@@ -130,7 +131,7 @@ const STORE_METHOD *STORE_Directory(void);
   and uses STORE_Memory() to cache things in memory.  Certificates are added
   to it with the store operation, and it will only get cached certificates. */
const STORE_METHOD *STORE_File(void);

#endif

/* Store functions take a type code for the type of data they should store
   or fetch */
@@ -331,11 +332,11 @@ typedef int (*STORE_HANDLE_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, OP
typedef int (*STORE_STORE_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, STORE_OBJECT *data, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]);
typedef int (*STORE_MODIFY_OBJECT_FUNC_PTR)(STORE *, STORE_OBJECT_TYPES type, OPENSSL_ITEM search_attributes[], OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[], OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[]);
typedef int (*STORE_GENERIC_FUNC_PTR)(STORE *, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]);
typedef int (*STORE_CTRL_FUNC_PTR)(STORE *, int cmd, long l, void *p, void (*f)());
typedef int (*STORE_CTRL_FUNC_PTR)(STORE *, int cmd, long l, void *p, void (*f)(void));

int STORE_method_set_initialise_function(STORE_METHOD *sm, STORE_INITIALISE_FUNC_PTR gen_f);
int STORE_method_set_cleanup_function(STORE_METHOD *sm, STORE_CLEANUP_FUNC_PTR gen_f);
int STORE_method_set_generate_function(STORE_METHOD *sm, STORE_GENERATE_OBJECT_FUNC_PTR gen_f);
int STORE_method_set_initialise_function(STORE_METHOD *sm, STORE_INITIALISE_FUNC_PTR init_f);
int STORE_method_set_cleanup_function(STORE_METHOD *sm, STORE_CLEANUP_FUNC_PTR clean_f);
int STORE_method_set_generate_function(STORE_METHOD *sm, STORE_GENERATE_OBJECT_FUNC_PTR generate_f);
int STORE_method_set_get_function(STORE_METHOD *sm, STORE_GET_OBJECT_FUNC_PTR get_f);
int STORE_method_set_store_function(STORE_METHOD *sm, STORE_STORE_OBJECT_FUNC_PTR store_f);
int STORE_method_set_modify_function(STORE_METHOD *sm, STORE_MODIFY_OBJECT_FUNC_PTR store_f);
@@ -429,6 +430,7 @@ void ERR_load_STORE_strings(void);
/* Error codes for the STORE functions. */

/* Function codes. */
#define STORE_F_CTRL					 160
#define STORE_F_MEM_DELETE				 134
#define STORE_F_MEM_GENERATE				 135
#define STORE_F_MEM_LIST_NEXT				 136
@@ -449,6 +451,7 @@ void ERR_load_STORE_strings(void);
#define STORE_F_STORE_ATTR_INFO_SET_SHA1STR		 150
#define STORE_F_STORE_CERTIFICATE			 100
#define STORE_F_STORE_CRL				 101
#define STORE_F_STORE_CTRL				 161
#define STORE_F_STORE_DELETE_ARBITRARY			 158
#define STORE_F_STORE_DELETE_CERTIFICATE		 102
#define STORE_F_STORE_DELETE_CRL			 103
@@ -479,6 +482,12 @@ void ERR_load_STORE_strings(void);
#define STORE_F_STORE_LIST_PUBLIC_KEY_ENDP		 156
#define STORE_F_STORE_LIST_PUBLIC_KEY_NEXT		 124
#define STORE_F_STORE_LIST_PUBLIC_KEY_START		 125
#define STORE_F_STORE_MODIFY_ARBITRARY			 162
#define STORE_F_STORE_MODIFY_CERTIFICATE		 163
#define STORE_F_STORE_MODIFY_CRL			 164
#define STORE_F_STORE_MODIFY_NUMBER			 165
#define STORE_F_STORE_MODIFY_PRIVATE_KEY		 166
#define STORE_F_STORE_MODIFY_PUBLIC_KEY			 167
#define STORE_F_STORE_NEW_ENGINE			 133
#define STORE_F_STORE_NEW_METHOD			 132
#define STORE_F_STORE_NUMBER				 126
@@ -504,6 +513,12 @@ void ERR_load_STORE_strings(void);
#define STORE_R_FAILED_GETTING_NUMBER			 107
#define STORE_R_FAILED_LISTING_CERTIFICATES		 108
#define STORE_R_FAILED_LISTING_KEYS			 109
#define STORE_R_FAILED_MODIFYING_ARBITRARY		 138
#define STORE_R_FAILED_MODIFYING_CERTIFICATE		 139
#define STORE_R_FAILED_MODIFYING_CRL			 140
#define STORE_R_FAILED_MODIFYING_NUMBER			 141
#define STORE_R_FAILED_MODIFYING_PRIVATE_KEY		 142
#define STORE_R_FAILED_MODIFYING_PUBLIC_KEY		 143
#define STORE_R_FAILED_REVOKING_CERTIFICATE		 110
#define STORE_R_FAILED_REVOKING_KEY			 111
#define STORE_R_FAILED_STORING_ARBITRARY		 134
@@ -511,6 +526,7 @@ void ERR_load_STORE_strings(void);
#define STORE_R_FAILED_STORING_KEY			 113
#define STORE_R_FAILED_STORING_NUMBER			 114
#define STORE_R_NOT_IMPLEMENTED				 128
#define STORE_R_NO_CONTROL_FUNCTION			 144
#define STORE_R_NO_DELETE_ARBITRARY_FUNCTION		 135
#define STORE_R_NO_DELETE_NUMBER_FUNCTION		 115
#define STORE_R_NO_DELETE_OBJECT_FUNCTION		 116
@@ -523,6 +539,7 @@ void ERR_load_STORE_strings(void);
#define STORE_R_NO_LIST_OBJECT_END_FUNCTION		 121
#define STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION		 122
#define STORE_R_NO_LIST_OBJECT_START_FUNCTION		 123
#define STORE_R_NO_MODIFY_OBJECT_FUNCTION		 145
#define STORE_R_NO_REVOKE_OBJECT_FUNCTION		 124
#define STORE_R_NO_STORE				 129
#define STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION	 137
+17 −1
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@
#ifndef OPENSSL_NO_ERR
static ERR_STRING_DATA STORE_str_functs[]=
	{
{ERR_PACK(0,STORE_F_CTRL,0),	"CTRL"},
{ERR_PACK(0,STORE_F_MEM_DELETE,0),	"MEM_DELETE"},
{ERR_PACK(0,STORE_F_MEM_GENERATE,0),	"MEM_GENERATE"},
{ERR_PACK(0,STORE_F_MEM_LIST_NEXT,0),	"MEM_LIST_NEXT"},
@@ -86,6 +87,7 @@ static ERR_STRING_DATA STORE_str_functs[]=
{ERR_PACK(0,STORE_F_STORE_ATTR_INFO_SET_SHA1STR,0),	"STORE_ATTR_INFO_set_sha1str"},
{ERR_PACK(0,STORE_F_STORE_CERTIFICATE,0),	"STORE_CERTIFICATE"},
{ERR_PACK(0,STORE_F_STORE_CRL,0),	"STORE_CRL"},
{ERR_PACK(0,STORE_F_STORE_CTRL,0),	"STORE_ctrl"},
{ERR_PACK(0,STORE_F_STORE_DELETE_ARBITRARY,0),	"STORE_delete_arbitrary"},
{ERR_PACK(0,STORE_F_STORE_DELETE_CERTIFICATE,0),	"STORE_delete_certificate"},
{ERR_PACK(0,STORE_F_STORE_DELETE_CRL,0),	"STORE_delete_crl"},
@@ -116,7 +118,13 @@ static ERR_STRING_DATA STORE_str_functs[]=
{ERR_PACK(0,STORE_F_STORE_LIST_PUBLIC_KEY_ENDP,0),	"STORE_list_public_key_endp"},
{ERR_PACK(0,STORE_F_STORE_LIST_PUBLIC_KEY_NEXT,0),	"STORE_list_public_key_next"},
{ERR_PACK(0,STORE_F_STORE_LIST_PUBLIC_KEY_START,0),	"STORE_list_public_key_start"},
{ERR_PACK(0,STORE_F_STORE_NEW_ENGINE,0),	"STORE_NEW_ENGINE"},
{ERR_PACK(0,STORE_F_STORE_MODIFY_ARBITRARY,0),	"STORE_modify_arbitrary"},
{ERR_PACK(0,STORE_F_STORE_MODIFY_CERTIFICATE,0),	"STORE_modify_certificate"},
{ERR_PACK(0,STORE_F_STORE_MODIFY_CRL,0),	"STORE_modify_crl"},
{ERR_PACK(0,STORE_F_STORE_MODIFY_NUMBER,0),	"STORE_modify_number"},
{ERR_PACK(0,STORE_F_STORE_MODIFY_PRIVATE_KEY,0),	"STORE_modify_private_key"},
{ERR_PACK(0,STORE_F_STORE_MODIFY_PUBLIC_KEY,0),	"STORE_modify_public_key"},
{ERR_PACK(0,STORE_F_STORE_NEW_ENGINE,0),	"STORE_new_engine"},
{ERR_PACK(0,STORE_F_STORE_NEW_METHOD,0),	"STORE_new_method"},
{ERR_PACK(0,STORE_F_STORE_NUMBER,0),	"STORE_NUMBER"},
{ERR_PACK(0,STORE_F_STORE_PARSE_ATTRS_END,0),	"STORE_parse_attrs_end"},
@@ -144,6 +152,12 @@ static ERR_STRING_DATA STORE_str_reasons[]=
{STORE_R_FAILED_GETTING_NUMBER           ,"failed getting number"},
{STORE_R_FAILED_LISTING_CERTIFICATES     ,"failed listing certificates"},
{STORE_R_FAILED_LISTING_KEYS             ,"failed listing keys"},
{STORE_R_FAILED_MODIFYING_ARBITRARY      ,"failed modifying arbitrary"},
{STORE_R_FAILED_MODIFYING_CERTIFICATE    ,"failed modifying certificate"},
{STORE_R_FAILED_MODIFYING_CRL            ,"failed modifying crl"},
{STORE_R_FAILED_MODIFYING_NUMBER         ,"failed modifying number"},
{STORE_R_FAILED_MODIFYING_PRIVATE_KEY    ,"failed modifying private key"},
{STORE_R_FAILED_MODIFYING_PUBLIC_KEY     ,"failed modifying public key"},
{STORE_R_FAILED_REVOKING_CERTIFICATE     ,"failed revoking certificate"},
{STORE_R_FAILED_REVOKING_KEY             ,"failed revoking key"},
{STORE_R_FAILED_STORING_ARBITRARY        ,"failed storing arbitrary"},
@@ -151,6 +165,7 @@ static ERR_STRING_DATA STORE_str_reasons[]=
{STORE_R_FAILED_STORING_KEY              ,"failed storing key"},
{STORE_R_FAILED_STORING_NUMBER           ,"failed storing number"},
{STORE_R_NOT_IMPLEMENTED                 ,"not implemented"},
{STORE_R_NO_CONTROL_FUNCTION             ,"no control function"},
{STORE_R_NO_DELETE_ARBITRARY_FUNCTION    ,"no delete arbitrary function"},
{STORE_R_NO_DELETE_NUMBER_FUNCTION       ,"no delete number function"},
{STORE_R_NO_DELETE_OBJECT_FUNCTION       ,"no delete object function"},
@@ -163,6 +178,7 @@ static ERR_STRING_DATA STORE_str_reasons[]=
{STORE_R_NO_LIST_OBJECT_END_FUNCTION     ,"no list object end function"},
{STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION    ,"no list object next function"},
{STORE_R_NO_LIST_OBJECT_START_FUNCTION   ,"no list object start function"},
{STORE_R_NO_MODIFY_OBJECT_FUNCTION       ,"no modify object function"},
{STORE_R_NO_REVOKE_OBJECT_FUNCTION       ,"no revoke object function"},
{STORE_R_NO_STORE                        ,"no store"},
{STORE_R_NO_STORE_OBJECT_ARBITRARY_FUNCTION,"no store object arbitrary function"},
+121 −0
Original line number Diff line number Diff line
@@ -184,6 +184,19 @@ void STORE_free(STORE *store)
	OPENSSL_free(store);
	}

int STORE_ctrl(STORE *store, int cmd, long i, void *p, void (*f)(void))
	{
	if (store == NULL)
		{
		STOREerr(STORE_F_CTRL,ERR_R_PASSED_NULL_PARAMETER);
		return 0;
		}
	if (store->meth->ctrl)
		return store->meth->ctrl(store, cmd, i, p, f);
	STOREerr(STORE_F_STORE_CTRL,STORE_R_NO_CONTROL_FUNCTION);
	return 0;
	}


int STORE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
	     CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
@@ -297,6 +310,24 @@ int STORE_store_certificate(STORE *s, X509 *data, OPENSSL_ITEM attributes[],
	return 1;
	}

int STORE_modify_certificate(STORE *s, OPENSSL_ITEM search_attributes[],
	OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[],
	OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[])
	{
	check_store(s,STORE_F_STORE_MODIFY_CERTIFICATE,
		modify_object,STORE_R_NO_MODIFY_OBJECT_FUNCTION);

	if (!s->meth->modify_object(s, STORE_OBJECT_TYPE_X509_CERTIFICATE,
		    search_attributes, add_attributes, modify_attributes,
		    delete_attributes, parameters))
		{
		STOREerr(STORE_F_STORE_MODIFY_CERTIFICATE,
			STORE_R_FAILED_MODIFYING_CERTIFICATE);
		return 0;
		}
	return 1;
	}

int STORE_revoke_certificate(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[])
	{
@@ -496,6 +527,24 @@ int STORE_store_private_key(STORE *s, EVP_PKEY *data, OPENSSL_ITEM attributes[],
	return i;
	}

int STORE_modify_private_key(STORE *s, OPENSSL_ITEM search_attributes[],
	OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[],
	OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[])
	{
	check_store(s,STORE_F_STORE_MODIFY_PRIVATE_KEY,
		modify_object,STORE_R_NO_MODIFY_OBJECT_FUNCTION);

	if (!s->meth->modify_object(s, STORE_OBJECT_TYPE_PRIVATE_KEY,
		    search_attributes, add_attributes, modify_attributes,
		    delete_attributes, parameters))
		{
		STOREerr(STORE_F_STORE_MODIFY_PRIVATE_KEY,
			STORE_R_FAILED_MODIFYING_PRIVATE_KEY);
		return 0;
		}
	return 1;
	}

int STORE_revoke_private_key(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[])
	{
@@ -673,6 +722,24 @@ int STORE_store_public_key(STORE *s, EVP_PKEY *data, OPENSSL_ITEM attributes[],
	return i;
	}

int STORE_modify_public_key(STORE *s, OPENSSL_ITEM search_attributes[],
	OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[],
	OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[])
	{
	check_store(s,STORE_F_STORE_MODIFY_PUBLIC_KEY,
		modify_object,STORE_R_NO_MODIFY_OBJECT_FUNCTION);

	if (!s->meth->modify_object(s, STORE_OBJECT_TYPE_PUBLIC_KEY,
		    search_attributes, add_attributes, modify_attributes,
		    delete_attributes, parameters))
		{
		STOREerr(STORE_F_STORE_MODIFY_PUBLIC_KEY,
			STORE_R_FAILED_MODIFYING_PUBLIC_KEY);
		return 0;
		}
	return 1;
	}

int STORE_revoke_public_key(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[])
	{
@@ -869,6 +936,24 @@ int STORE_store_crl(STORE *s, X509_CRL *data, OPENSSL_ITEM attributes[],
	return i;
	}

int STORE_modify_crl(STORE *s, OPENSSL_ITEM search_attributes[],
	OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[],
	OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[])
	{
	check_store(s,STORE_F_STORE_MODIFY_CRL,
		modify_object,STORE_R_NO_MODIFY_OBJECT_FUNCTION);

	if (!s->meth->modify_object(s, STORE_OBJECT_TYPE_X509_CRL,
		    search_attributes, add_attributes, modify_attributes,
		    delete_attributes, parameters))
		{
		STOREerr(STORE_F_STORE_MODIFY_CRL,
			STORE_R_FAILED_MODIFYING_CRL);
		return 0;
		}
	return 1;
	}

int STORE_delete_crl(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[])
	{
@@ -989,6 +1074,24 @@ int STORE_store_number(STORE *s, BIGNUM *data, OPENSSL_ITEM attributes[],
	return 1;
	}

int STORE_modify_number(STORE *s, OPENSSL_ITEM search_attributes[],
	OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[],
	OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[])
	{
	check_store(s,STORE_F_STORE_MODIFY_NUMBER,
		modify_object,STORE_R_NO_MODIFY_OBJECT_FUNCTION);

	if (!s->meth->modify_object(s, STORE_OBJECT_TYPE_NUMBER,
		    search_attributes, add_attributes, modify_attributes,
		    delete_attributes, parameters))
		{
		STOREerr(STORE_F_STORE_MODIFY_NUMBER,
			STORE_R_FAILED_MODIFYING_NUMBER);
		return 0;
		}
	return 1;
	}

BIGNUM *STORE_get_number(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[])
	{
@@ -1061,6 +1164,24 @@ int STORE_store_arbitrary(STORE *s, BUF_MEM *data, OPENSSL_ITEM attributes[],
	return 1;
	}

int STORE_modify_arbitrary(STORE *s, OPENSSL_ITEM search_attributes[],
	OPENSSL_ITEM add_attributes[], OPENSSL_ITEM modify_attributes[],
	OPENSSL_ITEM delete_attributes[], OPENSSL_ITEM parameters[])
	{
	check_store(s,STORE_F_STORE_MODIFY_ARBITRARY,
		modify_object,STORE_R_NO_MODIFY_OBJECT_FUNCTION);

	if (!s->meth->modify_object(s, STORE_OBJECT_TYPE_ARBITRARY,
		    search_attributes, add_attributes, modify_attributes,
		    delete_attributes, parameters))
		{
		STOREerr(STORE_F_STORE_MODIFY_ARBITRARY,
			STORE_R_FAILED_MODIFYING_ARBITRARY);
		return 0;
		}
	return 1;
	}

BUF_MEM *STORE_get_arbitrary(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[])
	{
+2 −2
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ static int mem_lock(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[]);
static int mem_unlock(STORE *s, OPENSSL_ITEM attributes[],
	OPENSSL_ITEM parameters[]);
static int mem_ctrl(STORE *s, int cmd, long l, void *p, void (*f)());
static int mem_ctrl(STORE *s, int cmd, long l, void *p, void (*f)(void));

static STORE_METHOD store_memory =
	{
@@ -351,7 +351,7 @@ static int mem_unlock(STORE *s, OPENSSL_ITEM attributes[],
	{
	return 1;
	}
static int mem_ctrl(STORE *s, int cmd, long l, void *p, void (*f)())
static int mem_ctrl(STORE *s, int cmd, long l, void *p, void (*f)(void))
	{
	return 1;
	}
+33 −0
Original line number Diff line number Diff line
@@ -81,6 +81,18 @@ void STORE_destroy_method(STORE_METHOD *store_method)
	OPENSSL_free(store_method);
	}

int STORE_method_set_initialise_function(STORE_METHOD *sm, STORE_INITIALISE_FUNC_PTR init_f)
	{
	sm->init = init_f;
	return 1;
	}

int STORE_method_set_cleanup_function(STORE_METHOD *sm, STORE_CLEANUP_FUNC_PTR clean_f)
	{
	sm->clean = clean_f;
	return 1;
	}

int STORE_method_set_generate_function(STORE_METHOD *sm, STORE_GENERATE_OBJECT_FUNC_PTR generate_f)
	{
	sm->generate_object = generate_f;
@@ -99,6 +111,12 @@ int STORE_method_set_store_function(STORE_METHOD *sm, STORE_STORE_OBJECT_FUNC_PT
	return 1;
	}

int STORE_method_set_modify_function(STORE_METHOD *sm, STORE_MODIFY_OBJECT_FUNC_PTR modify_f)
	{
	sm->modify_object = modify_f;
	return 1;
	}

int STORE_method_set_revoke_function(STORE_METHOD *sm, STORE_HANDLE_OBJECT_FUNC_PTR revoke_f)
	{
	sm->revoke_object = revoke_f;
@@ -153,6 +171,16 @@ int STORE_method_set_ctrl_function(STORE_METHOD *sm, STORE_CTRL_FUNC_PTR ctrl_f)
	return 1;
	}

STORE_INITIALISE_FUNC_PTR STORE_method_get_initialise_function(STORE_METHOD *sm)
	{
	return sm->init;
	}

STORE_CLEANUP_FUNC_PTR STORE_method_get_cleanup_function(STORE_METHOD *sm)
	{
	return sm->clean;
	}

STORE_GENERATE_OBJECT_FUNC_PTR STORE_method_get_generate_function(STORE_METHOD *sm)
	{
	return sm->generate_object;
@@ -168,6 +196,11 @@ STORE_STORE_OBJECT_FUNC_PTR STORE_method_get_store_function(STORE_METHOD *sm)
	return sm->store_object;
	}

STORE_MODIFY_OBJECT_FUNC_PTR STORE_method_get_modify_function(STORE_METHOD *sm)
	{
	return sm->modify_object;
	}

STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_revoke_function(STORE_METHOD *sm)
	{
	return sm->revoke_object;