added flags to sc_context_t
- is initialized in sc_context_create with parm->flags - removes members paranoid_memory and enable_default_driver
This commit is contained in:
parent
edc839e072
commit
7cec500e54
|
@ -39,8 +39,8 @@ OPENSC_VS_FF_PRODUCT_NAME="VS_FF_PRODUCT_NAME"
|
||||||
# (Code changed: REVISION++)
|
# (Code changed: REVISION++)
|
||||||
# (Oldest interface removed: OLDEST++)
|
# (Oldest interface removed: OLDEST++)
|
||||||
# (Interfaces added: CURRENT++, REVISION=0)
|
# (Interfaces added: CURRENT++, REVISION=0)
|
||||||
OPENSC_LT_CURRENT="3"
|
OPENSC_LT_CURRENT="4"
|
||||||
OPENSC_LT_OLDEST="3"
|
OPENSC_LT_OLDEST="4"
|
||||||
OPENSC_LT_REVISION="0"
|
OPENSC_LT_REVISION="0"
|
||||||
OPENSC_LT_AGE="0"
|
OPENSC_LT_AGE="0"
|
||||||
OPENSC_LT_AGE="$((${OPENSC_LT_CURRENT}-${OPENSC_LT_OLDEST}))"
|
OPENSC_LT_AGE="$((${OPENSC_LT_CURRENT}-${OPENSC_LT_OLDEST}))"
|
||||||
|
|
|
@ -218,7 +218,8 @@ int sc_connect_card(sc_reader_t *reader, sc_card_t **card_out)
|
||||||
if (ops == NULL || ops->match_card == NULL) {
|
if (ops == NULL || ops->match_card == NULL) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (!ctx->enable_default_driver && !strcmp("default", drv->short_name)) {
|
else if (!(ctx->flags & SC_CTX_FLAG_ENABLE_DEFAULT_DRIVER)
|
||||||
|
&& !strcmp("default", drv->short_name)) {
|
||||||
sc_log(ctx , "ignore 'default' card driver");
|
sc_log(ctx , "ignore 'default' card driver");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,8 +186,7 @@ static void set_defaults(sc_context_t *ctx, struct _sc_ctx_options *opts)
|
||||||
if (ctx->debug_file && (ctx->debug_file != stderr && ctx->debug_file != stdout))
|
if (ctx->debug_file && (ctx->debug_file != stderr && ctx->debug_file != stdout))
|
||||||
fclose(ctx->debug_file);
|
fclose(ctx->debug_file);
|
||||||
ctx->debug_file = stderr;
|
ctx->debug_file = stderr;
|
||||||
ctx->paranoid_memory = 0;
|
ctx->flags = 0;
|
||||||
ctx->enable_default_driver = 0;
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
/* Override the default debug log for OpenSC.tokend to be different from PKCS#11.
|
/* Override the default debug log for OpenSC.tokend to be different from PKCS#11.
|
||||||
|
@ -258,11 +257,13 @@ load_parameters(sc_context_t *ctx, scconf_block *block, struct _sc_ctx_options *
|
||||||
sc_ctx_log_to_file(ctx, val);
|
sc_ctx_log_to_file(ctx, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->paranoid_memory = scconf_get_bool (block, "paranoid-memory",
|
if (scconf_get_bool (block, "paranoid-memory",
|
||||||
ctx->paranoid_memory);
|
ctx->flags & SC_CTX_FLAG_PARANOID_MEMORY))
|
||||||
|
ctx->flags |= SC_CTX_FLAG_PARANOID_MEMORY;
|
||||||
|
|
||||||
ctx->enable_default_driver = scconf_get_bool (block, "enable_default_driver",
|
if (scconf_get_bool (block, "enable_default_driver",
|
||||||
ctx->enable_default_driver);
|
ctx->flags & SC_CTX_FLAG_ENABLE_DEFAULT_DRIVER))
|
||||||
|
ctx->flags |= SC_CTX_FLAG_ENABLE_DEFAULT_DRIVER;
|
||||||
|
|
||||||
val = scconf_get_str(block, "force_card_driver", NULL);
|
val = scconf_get_str(block, "force_card_driver", NULL);
|
||||||
if (val) {
|
if (val) {
|
||||||
|
@ -710,7 +711,9 @@ int sc_context_create(sc_context_t **ctx_out, const sc_context_param_t *parm)
|
||||||
return SC_ERROR_OUT_OF_MEMORY;
|
return SC_ERROR_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx->flags = parm->flags;
|
||||||
set_defaults(ctx, &opts);
|
set_defaults(ctx, &opts);
|
||||||
|
|
||||||
list_init(&ctx->readers);
|
list_init(&ctx->readers);
|
||||||
list_attributes_seeker(&ctx->readers, reader_list_seeker);
|
list_attributes_seeker(&ctx->readers, reader_list_seeker);
|
||||||
/* set thread context and create mutex object (if specified) */
|
/* set thread context and create mutex object (if specified) */
|
||||||
|
|
|
@ -647,15 +647,17 @@ typedef struct {
|
||||||
* process indicates that shall the reader shall ignore those resources when
|
* process indicates that shall the reader shall ignore those resources when
|
||||||
* calling sc_disconnect_card.
|
* calling sc_disconnect_card.
|
||||||
*/
|
*/
|
||||||
#define SC_TERMINATE 0x00000001
|
#define SC_CTX_FLAG_TERMINATE 0x00000001
|
||||||
|
#define SC_CTX_FLAG_PARANOID_MEMORY 0x00000002
|
||||||
|
#define SC_CTX_FLAG_DEBUG_MEMORY 0x00000004
|
||||||
|
#define SC_CTX_FLAG_ENABLE_DEFAULT_DRIVER 0x00000008
|
||||||
|
|
||||||
typedef struct sc_context {
|
typedef struct sc_context {
|
||||||
scconf_context *conf;
|
scconf_context *conf;
|
||||||
scconf_block *conf_blocks[3];
|
scconf_block *conf_blocks[3];
|
||||||
char *app_name;
|
char *app_name;
|
||||||
int debug;
|
int debug;
|
||||||
int paranoid_memory;
|
unsigned long flags;
|
||||||
int enable_default_driver;
|
|
||||||
|
|
||||||
FILE *debug_file;
|
FILE *debug_file;
|
||||||
char *debug_filename;
|
char *debug_filename;
|
||||||
|
@ -729,7 +731,7 @@ typedef struct {
|
||||||
* dependend configuration data). If NULL the name "default"
|
* dependend configuration data). If NULL the name "default"
|
||||||
* will be used. */
|
* will be used. */
|
||||||
const char *app_name;
|
const char *app_name;
|
||||||
/** flags, currently unused */
|
/** context flags */
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
/** mutex functions to use (optional) */
|
/** mutex functions to use (optional) */
|
||||||
sc_thread_context_t *thread_ctx;
|
sc_thread_context_t *thread_ctx;
|
||||||
|
|
|
@ -116,7 +116,7 @@ static int refresh_attributes(sc_reader_t *reader)
|
||||||
u8 cmd[5], rbuf[256], sad, dad;
|
u8 cmd[5], rbuf[256], sad, dad;
|
||||||
unsigned short lr;
|
unsigned short lr;
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
cmd[0] = CTBCS_CLA;
|
cmd[0] = CTBCS_CLA;
|
||||||
|
@ -162,7 +162,7 @@ static int ctapi_internal_transmit(sc_reader_t *reader,
|
||||||
unsigned short lr;
|
unsigned short lr;
|
||||||
char rv;
|
char rv;
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
if (control)
|
if (control)
|
||||||
|
@ -241,7 +241,7 @@ static int ctapi_connect(sc_reader_t *reader)
|
||||||
unsigned short lr;
|
unsigned short lr;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
cmd[0] = CTBCS_CLA;
|
cmd[0] = CTBCS_CLA;
|
||||||
|
@ -290,7 +290,7 @@ static int ctapi_release(sc_reader_t *reader)
|
||||||
struct ctapi_private_data *priv = GET_PRIV_DATA(reader);
|
struct ctapi_private_data *priv = GET_PRIV_DATA(reader);
|
||||||
|
|
||||||
|
|
||||||
if (!(reader->ctx->magic & SC_TERMINATE))
|
if (!(reader->ctx->flags & SC_CTX_FLAG_TERMINATE))
|
||||||
priv->funcs.CT_close(priv->ctn);
|
priv->funcs.CT_close(priv->ctn);
|
||||||
|
|
||||||
free(priv);
|
free(priv);
|
||||||
|
|
|
@ -154,7 +154,7 @@ static int openct_reader_release(sc_reader_t *reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
||||||
if (data) {
|
if (data) {
|
||||||
if (data->h && !(reader->ctx->magic & SC_TERMINATE))
|
if (data->h && !(reader->ctx->flags & SC_CTX_FLAG_TERMINATE))
|
||||||
ct_reader_disconnect(data->h);
|
ct_reader_disconnect(data->h);
|
||||||
sc_mem_clear(data, sizeof(*data));
|
sc_mem_clear(data, sizeof(*data));
|
||||||
reader->drv_data = NULL;
|
reader->drv_data = NULL;
|
||||||
|
@ -174,7 +174,7 @@ static int openct_reader_detect_card_presence(sc_reader_t *reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
reader->flags = 0;
|
reader->flags = 0;
|
||||||
|
@ -200,7 +200,7 @@ openct_reader_connect(sc_reader_t *reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
if (data->h)
|
if (data->h)
|
||||||
|
@ -262,7 +262,7 @@ openct_reader_internal_transmit(sc_reader_t *reader,
|
||||||
struct driver_data *data = (struct driver_data *) reader->drv_data;
|
struct driver_data *data = (struct driver_data *) reader->drv_data;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
/* Hotplug check */
|
/* Hotplug check */
|
||||||
|
@ -333,7 +333,7 @@ static int openct_reader_perform_verify(sc_reader_t *reader, struct sc_pin_cmd_d
|
||||||
u8 buf[254];
|
u8 buf[254];
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
/* Hotplug check */
|
/* Hotplug check */
|
||||||
|
@ -394,7 +394,7 @@ static int openct_reader_lock(sc_reader_t *reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
/* Hotplug check */
|
/* Hotplug check */
|
||||||
|
@ -423,7 +423,7 @@ static int openct_reader_unlock(sc_reader_t *reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_VERBOSE);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
/* Not connected */
|
/* Not connected */
|
||||||
|
|
|
@ -184,7 +184,7 @@ static int pcsc_internal_transmit(sc_reader_t *reader,
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
||||||
card = priv->pcsc_card;
|
card = priv->pcsc_card;
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
sSendPci.dwProtocol = opensc_proto_to_pcsc(reader->active_protocol);
|
sSendPci.dwProtocol = opensc_proto_to_pcsc(reader->active_protocol);
|
||||||
|
@ -287,7 +287,7 @@ static int refresh_attributes(sc_reader_t *reader)
|
||||||
|
|
||||||
sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "%s check", reader->name);
|
sc_debug(reader->ctx, SC_LOG_DEBUG_NORMAL, "%s check", reader->name);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
if (priv->reader_state.szReader == NULL) {
|
if (priv->reader_state.szReader == NULL) {
|
||||||
|
@ -511,7 +511,7 @@ static int pcsc_disconnect(sc_reader_t * reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
||||||
|
|
||||||
if (!(reader->ctx->magic & SC_TERMINATE))
|
if (!(reader->ctx->flags & SC_CTX_FLAG_TERMINATE))
|
||||||
priv->gpriv->SCardDisconnect(priv->pcsc_card, priv->gpriv->disconnect_action);
|
priv->gpriv->SCardDisconnect(priv->pcsc_card, priv->gpriv->disconnect_action);
|
||||||
reader->flags = 0;
|
reader->flags = 0;
|
||||||
return SC_SUCCESS;
|
return SC_SUCCESS;
|
||||||
|
@ -525,7 +525,7 @@ static int pcsc_lock(sc_reader_t *reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
rv = priv->gpriv->SCardBeginTransaction(priv->pcsc_card);
|
rv = priv->gpriv->SCardBeginTransaction(priv->pcsc_card);
|
||||||
|
@ -565,7 +565,7 @@ static int pcsc_unlock(sc_reader_t *reader)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
rv = priv->gpriv->SCardEndTransaction(priv->pcsc_card, priv->gpriv->transaction_end_action);
|
rv = priv->gpriv->SCardEndTransaction(priv->pcsc_card, priv->gpriv->transaction_end_action);
|
||||||
|
@ -611,7 +611,7 @@ static int pcsc_cancel(sc_context_t *ctx)
|
||||||
|
|
||||||
SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
|
SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
|
||||||
|
|
||||||
if (ctx->magic & SC_TERMINATE)
|
if (ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
@ -766,7 +766,7 @@ static int pcsc_finish(sc_context_t *ctx)
|
||||||
SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
|
SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_NORMAL);
|
||||||
|
|
||||||
if (gpriv) {
|
if (gpriv) {
|
||||||
if (gpriv->pcsc_ctx != -1 && !(ctx->magic & SC_TERMINATE))
|
if (gpriv->pcsc_ctx != -1 && !(ctx->flags & SC_CTX_FLAG_TERMINATE))
|
||||||
gpriv->SCardReleaseContext(gpriv->pcsc_ctx);
|
gpriv->SCardReleaseContext(gpriv->pcsc_ctx);
|
||||||
if (gpriv->dlhandle != NULL)
|
if (gpriv->dlhandle != NULL)
|
||||||
sc_dlclose(gpriv->dlhandle);
|
sc_dlclose(gpriv->dlhandle);
|
||||||
|
@ -1662,7 +1662,7 @@ pcsc_pin_cmd(sc_reader_t *reader, struct sc_pin_cmd_data *data)
|
||||||
|
|
||||||
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
SC_FUNC_CALLED(reader->ctx, SC_LOG_DEBUG_NORMAL);
|
||||||
|
|
||||||
if (reader->ctx->magic & SC_TERMINATE)
|
if (reader->ctx->flags & SC_CTX_FLAG_TERMINATE)
|
||||||
return SC_ERROR_NOT_ALLOWED;
|
return SC_ERROR_NOT_ALLOWED;
|
||||||
|
|
||||||
if (priv->gpriv->SCardControl == NULL)
|
if (priv->gpriv->SCardControl == NULL)
|
||||||
|
|
|
@ -806,7 +806,7 @@ void *sc_mem_alloc_secure(sc_context_t *ctx, size_t len)
|
||||||
locked = 1;
|
locked = 1;
|
||||||
#endif
|
#endif
|
||||||
if (!locked) {
|
if (!locked) {
|
||||||
if (ctx->paranoid_memory) {
|
if (ctx->flags & SC_CTX_FLAG_PARANOID_MEMORY) {
|
||||||
sc_do_log (ctx, 0, NULL, 0, NULL, "cannot lock memory, failing allocation because paranoid set");
|
sc_do_log (ctx, 0, NULL, 0, NULL, "cannot lock memory, failing allocation because paranoid set");
|
||||||
free (pointer);
|
free (pointer);
|
||||||
pointer = NULL;
|
pointer = NULL;
|
||||||
|
|
|
@ -206,7 +206,7 @@ CK_RV C_Initialize(CK_VOID_PTR pInitArgs)
|
||||||
/* Handle fork() exception */
|
/* Handle fork() exception */
|
||||||
if (current_pid != initialized_pid) {
|
if (current_pid != initialized_pid) {
|
||||||
if (context)
|
if (context)
|
||||||
context->magic |= SC_TERMINATE;
|
context->flags |= SC_CTX_FLAG_TERMINATE;
|
||||||
C_Finalize(NULL_PTR);
|
C_Finalize(NULL_PTR);
|
||||||
}
|
}
|
||||||
initialized_pid = current_pid;
|
initialized_pid = current_pid;
|
||||||
|
|
|
@ -1836,7 +1836,7 @@ int main(int argc, char * const argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->enable_default_driver = 1;
|
ctx->flags |= SC_CTX_FLAG_ENABLE_DEFAULT_DRIVER;
|
||||||
|
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
ctx->debug = verbose;
|
ctx->debug = verbose;
|
||||||
|
|
|
@ -758,7 +758,7 @@ int main(int argc, char * const argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->enable_default_driver = 1;
|
ctx->flags |= SC_CTX_FLAG_ENABLE_DEFAULT_DRIVER;
|
||||||
|
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
ctx->debug = verbose;
|
ctx->debug = verbose;
|
||||||
|
|
Loading…
Reference in New Issue