pkcs15init: profile: handles for 'profile-extention' and 'exclusive-aid' ...
'profile-extention' profile parameter used to load from the separate file the AID dependent profile part. 'exclusive-aid' profile parameter used to introduce the AID for the DF that do not have file-id and that can be selected only by 'DF-NAME' selection. git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5097 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
35a54b511c
commit
1519cb38a1
|
@ -1353,6 +1353,55 @@ do_aid(struct state *cur, int argc, char **argv)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
do_exclusive_aid(struct state *cur, int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct sc_file *file = cur->file->file;
|
||||||
|
const char *name = argv[0];
|
||||||
|
unsigned int len;
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
#ifdef DEBUG_PROFILE
|
||||||
|
printf("do_exclusive_aid(): exclusive-aid '%s'\n", name);
|
||||||
|
printf("do_exclusive_aid(): current file '%s' (path:%s)\n", cur->file->ident, sc_print_path(&file->path));
|
||||||
|
#endif
|
||||||
|
sc_format_path(name, &file->path);
|
||||||
|
if (file->path.len > SC_MAX_AID_SIZE) {
|
||||||
|
parse_error(cur, "Path length is too big\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(file->path.aid.value, file->path.value, file->path.len);
|
||||||
|
file->path.aid.len = file->path.len;
|
||||||
|
|
||||||
|
file->path.len = 0;
|
||||||
|
file->path.type = SC_PATH_TYPE_DF_NAME;
|
||||||
|
|
||||||
|
#ifdef DEBUG_PROFILE
|
||||||
|
printf("do_exclusive_aid(): '%s' exclusive-aid path %s\n", cur->file->ident, sc_print_path(&file->path));
|
||||||
|
#endif
|
||||||
|
if (*name == '=') {
|
||||||
|
len = strlen(++name);
|
||||||
|
if (len > sizeof(file->name)) {
|
||||||
|
parse_error(cur, "AID \"%s\" too long\n", name);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
memcpy(file->name, name, len);
|
||||||
|
file->namelen = len;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
file->namelen = sizeof(file->name);
|
||||||
|
res = sc_hex_to_bin(name, file->name, &file->namelen);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
do_profile_extention(struct state *cur, int argc, char **argv)
|
||||||
|
{
|
||||||
|
return setstr(&cur->file->profile_extention, argv[0]);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse ACL list.
|
* Parse ACL list.
|
||||||
* The way we do this is we first split things like CHV1
|
* The way we do this is we first split things like CHV1
|
||||||
|
@ -1675,6 +1724,10 @@ static struct command fs_commands[] = {
|
||||||
{ "record-length", 1, 1, do_reclength },
|
{ "record-length", 1, 1, do_reclength },
|
||||||
{ "AID", 1, 1, do_aid },
|
{ "AID", 1, 1, do_aid },
|
||||||
{ "ACL", 1, -1, do_acl },
|
{ "ACL", 1, -1, do_acl },
|
||||||
|
/* AID dependent sub-profile */
|
||||||
|
{ "profile-extention", 1, 1, do_profile_extention },
|
||||||
|
/* AID of the DFs without file-id */
|
||||||
|
{ "exclusive-aid", 1, 1, do_exclusive_aid },
|
||||||
|
|
||||||
{ NULL, 0, 0, NULL }
|
{ NULL, 0, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue