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

Merge of stuff from main trunk, all conflicts resolved, and addition

of dynamic lock support in the nCipher code.
parent b215f70a
Loading
Loading
Loading
Loading
+42 −13
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ static int (MS_FAR *add_lock_callback)(int *pointer,int amount,
static unsigned long (MS_FAR *id_callback)(void)=NULL;
static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
	(const char *file,int line)=NULL;
static void (MS_FAR *dynlock_locking_callback)(int mode,
static void (MS_FAR *dynlock_lock_callback)(int mode,
	struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
	const char *file,int line)=NULL;
@@ -200,6 +200,10 @@ int CRYPTO_get_new_dynlockid(void)
		}

	CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
	/* First, try to find an existing empty slot */
	i=sk_CRYPTO_dynlock_find(dyn_locks,NULL);
	/* If there was none, push, thereby creating a new one */
	if (i == -1)
		i=sk_CRYPTO_dynlock_push(dyn_locks,pointer);
	CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);

@@ -273,16 +277,47 @@ struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i)
	return NULL;
	}

void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file,
		int line)
struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))
	(const char *file,int line)
	{
	return(locking_callback);
	return(dynlock_create_callback);
	}

void (*CRYPTO_get_dynlock_lock_callback(void))(int mode,
	struct CRYPTO_dynlock_value *l, const char *file,int line)
	{
	return(dynlock_locking_callback);
	return(dynlock_lock_callback);
	}

void (*CRYPTO_get_dynlock_destroy_callback(void))
	(struct CRYPTO_dynlock_value *l, const char *file,int line)
	{
	return(dynlock_destroy_callback);
	}

void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*func)
	(const char *file, int line))
	{
	dynlock_create_callback=func;
	}

void CRYPTO_set_dynlock_lock_callback(void (*func)(int mode,
	struct CRYPTO_dynlock_value *l, const char *file, int line))
	{
	dynlock_lock_callback=func;
	}

void CRYPTO_set_dynlock_destroy_callback(void (*func)
	(struct CRYPTO_dynlock_value *l, const char *file, int line))
	{
	dynlock_destroy_callback=func;
	}


void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file,
		int line)
	{
	return(locking_callback);
	}

int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type,
@@ -297,12 +332,6 @@ void CRYPTO_set_locking_callback(void (*func)(int mode,int type,
	locking_callback=func;
	}

void CRYPTO_set_dynlock_locking_callback(void (*func)(int mode,
	struct CRYPTO_dynlock_value *l, const char *file, int line))
	{
	dynlock_locking_callback=func;
	}

void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type,
					      const char *file,int line))
	{
@@ -373,7 +402,7 @@ void CRYPTO_lock(int mode, int type, const char *file, int line)

		if (pointer)
			{
			dynlock_locking_callback(mode, pointer, file, line);
			dynlock_lock_callback(mode, pointer, file, line);
			}

		CRYPTO_destroy_dynlockid(i);
+7 −8
Original line number Diff line number Diff line
@@ -312,17 +312,16 @@ unsigned long CRYPTO_thread_id(void);
const char *CRYPTO_get_lock_name(int type);
int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file,
		    int line);
void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)
	(char *file, int line));
void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)
	(int mode, struct CRYPTO_dynlock_value *l,
		const char *file, int line));
void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)
	(struct CRYPTO_dynlock_value *l, const char *file, int line));
void CRYPTO_set_dynlock_size(int dynlock_size);

int CRYPTO_get_new_dynlockid(void);
void CRYPTO_destroy_dynlockid(int i);
struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i);
void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line));
void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line));
void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line));
struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file,int line);
void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file,int line);
void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file,int line);

/* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions --
 * call the latter last if you need different functions */
+9 −5
Original line number Diff line number Diff line
@@ -17,14 +17,15 @@ CRYPTO_set_locking_callback, CRYPTO_set_id_callback - OpenSSL thread support


 /* struct CRYPTO_dynlock_value needs to be defined by the user */
 typedef struct CRYPTO_dynlock_value CRYPTO_dynlock;
 struct CRYPTO_dynlock_value;

 void CRYPTO_set_dynlock_create_callback(CRYPTO_dynlock *(*dyn_create_function)
	(char *file, int line));
 void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *
	(*dyn_create_function)(char *file, int line));
 void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)
	(int mode, CRYPTO_dynlock *l, const char *file, int line));
	(int mode, struct CRYPTO_dynlock_value *l,
	const char *file, int line));
 void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)
	(CRYPTO_dynlock *l, const char *file, int line));
	(struct CRYPTO_dynlock_value *l, const char *file, int line));

 int CRYPTO_get_new_dynlockid(void);

@@ -115,6 +116,9 @@ You can find out if OpenSSL was configured with thread support:
   // no thread support
 #endif

Also, dynamic locks are currently not used internally by OpenSSL, but
may do so in the future.

=head1 EXAMPLES

B<crypto/threads/mttest.c> shows examples of the callback functions on
+51 −0
Original line number Diff line number Diff line
@@ -1838,3 +1838,54 @@ CRYPTO_destroy_dynlockid 2413
CRYPTO_set_dynlock_size                 2414
CRYPTO_set_dynlock_create_callback      2415
CRYPTO_set_dynlock_lock_callback        2416
CRYPTO_get_dynlock_lock_callback        2417
CRYPTO_get_dynlock_destroy_callback     2418
CRYPTO_get_dynlock_value                2419
CRYPTO_get_dynlock_create_callback      2420
ERR_load_ENGINE_strings                 2421
ENGINE_set_DSA                          2422
ENGINE_get_default_RSA                  2423
ENGINE_get_BN_mod_exp                   2424
DSA_get_default_openssl_method          2425
ENGINE_set_DH                           2426
ENGINE_set_default_BN_mod_exp_crt       2427
ENGINE_init                             2428
DH_get_default_openssl_method           2429
RSA_set_default_openssl_method          2430
ENGINE_finish                           2431
ENGINE_get_DH                           2432
ENGINE_set_default_DSA                  2433
ENGINE_get_name                         2434
ENGINE_get_last                         2435
ENGINE_get_prev                         2436
ENGINE_get_default_DH                   2437
ENGINE_get_RSA                          2438
ENGINE_set_default                      2439
ENGINE_get_RAND                         2440
ENGINE_get_first                        2441
ENGINE_by_id                            2442
ENGINE_get_default_BN_mod_exp_crt       2443
RSA_get_default_openssl_method          2444
ENGINE_set_RSA                          2445
ENGINE_set_default_RAND                 2446
ENGINE_set_BN_mod_exp                   2447
ENGINE_remove                           2448
ENGINE_free                             2449
ENGINE_get_BN_mod_exp_crt               2450
ENGINE_get_next                         2451
ENGINE_set_name                         2452
ENGINE_get_default_DSA                  2453
ENGINE_set_default_BN_mod_exp           2454
ENGINE_set_default_RSA                  2455
ENGINE_get_default_RAND                 2456
ENGINE_get_default_BN_mod_exp           2457
ENGINE_set_RAND                         2458
ENGINE_set_id                           2459
ENGINE_set_BN_mod_exp_crt               2460
ENGINE_set_default_DH                   2461
ENGINE_new                              2462
ENGINE_get_id                           2463
DSA_set_default_openssl_method          2464
ENGINE_add                              2465
DH_set_default_openssl_method           2466
ENGINE_get_DSA                          2467