Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Marvin Scholz
libaacs
Commits
f888ebf5
Commit
f888ebf5
authored
Oct 20, 2013
by
npzacs
Browse files
Avoid empty config entries
parent
d1fd1027
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/file/keydbcfg-parser.y
View file @
f888ebf5
...
...
@@ -66,12 +66,13 @@ enum
};
static dk_list *new_dk_list(void);
static dk_list *add_dk_list_entry(dk_list *list, char *key, char *node);
static pk_list *new_pk_list(void);
static pk_list *add_pk_list_entry(pk_list *list, char *key);
static cert_list *new_cert_list(void);
static cert_list *add_cert_list(cert_list *list, char *host_priv_key,
char *host_cert);
static void add_dk_entry(config_file *cf, char *key, char *node);
static void add_pk_entry(config_file *cf, char *key);
static void add_cert_entry(config_file *cf, char *host_priv_key, char *host_cert);
static title_entry_list *new_title_entry_list(void);
static int add_entry(title_entry_list *list, int type, char *entry);
static digit_key_pair_list *new_digit_key_pair_list(void);
...
...
@@ -79,7 +80,7 @@ static digit_key_pair_list *add_digit_key_pair_entry(digit_key_pair_list *list,
int type, unsigned int digit, char *key);
static int add_date_entry(title_entry_list *list, unsigned int year,
unsigned int month, unsigned int day);
void yyerror (void *scanner,
dk_list *dklist, pk_list *pklist, cert_list *clist
,
void yyerror (void *scanner,
config_file *cf
,
title_entry_list *celist, digit_key_pair_list *dkplist,
const char *msg);
extern int libaacs_yyget_lineno (void *scanner);
...
...
@@ -97,9 +98,7 @@ extern int libaacs_yyget_lineno (void *scanner);
%yacc
%lex-param{void *scanner}
%parse-param{void *scanner}
%parse-param{dk_list *dklist}
%parse-param{pk_list *pklist}
%parse-param{cert_list *clist}
%parse-param{config_file *cf}
%parse-param{title_entry_list *celist}
%parse-param{digit_key_pair_list *dkplist}
...
...
@@ -171,11 +170,11 @@ config_entry
dk_entry
: newline_list ENTRY_ID_DK device_key PUNCT_VERTICAL_BAR device_node NEWLINE
{
dklist =
add_dk_
list_
entry(
dklist
, $3, $5);
add_dk_entry(
cf
, $3, $5);
}
| ENTRY_ID_DK device_key PUNCT_VERTICAL_BAR device_node NEWLINE
{
dklist =
add_dk_
list_
entry(
dklist
, $2, $4);
add_dk_entry(
cf
, $2, $4);
}
;
...
...
@@ -192,11 +191,11 @@ device_node
pk_entry
: newline_list ENTRY_ID_PK hexstring_list NEWLINE
{
pklist =
add_pk_
list_
entry(
pklist
, $3);
add_pk_entry(
cf
, $3);
}
| ENTRY_ID_PK hexstring_list NEWLINE
{
pklist =
add_pk_
list_
entry(
pklist
, $2);
add_pk_entry(
cf
, $2);
}
;
...
...
@@ -206,22 +205,22 @@ host_cert_entry
/* host_nonce and host_key_point are ignored, keep this for backward compatibility */
X_FREE($7);
X_FREE($9);
clist =
add_cert_
list(clist
, $3, $5);
add_cert_
entry(cf
, $3, $5);
}
| ENTRY_ID_HC host_priv_key PUNCT_VERTICAL_BAR host_cert PUNCT_VERTICAL_BAR host_nonce PUNCT_VERTICAL_BAR host_key_point NEWLINE
{
/* host_nonce and host_key_point are ignored, keep this for backward compatibility */
X_FREE($6);
X_FREE($8);
clist =
add_cert_
list(clist
, $2, $4);
add_cert_
entry(cf
, $2, $4);
}
| newline_list ENTRY_ID_HC host_priv_key PUNCT_VERTICAL_BAR host_cert NEWLINE
{
clist =
add_cert_
list(clist
, $3, $5);
add_cert_
entry(cf
, $3, $5);
}
| ENTRY_ID_HC host_priv_key PUNCT_VERTICAL_BAR host_cert NEWLINE
{
clist =
add_cert_
list(clist
, $2, $4);
add_cert_
entry(cf
, $2, $4);
}
;
...
...
@@ -248,13 +247,21 @@ host_key_point
title_entry
: newline_list disc_info entry_list NEWLINE
{
if (!cf->list) {
celist = cf->list = new_title_entry_list();
} else {
celist->next = new_title_entry_list();
celist = celist->next;
}
}
| disc_info entry_list NEWLINE
{
if (!cf->list) {
celist = cf->list = new_title_entry_list();
} else {
celist->next = new_title_entry_list();
celist = celist->next;
}
}
;
...
...
@@ -446,24 +453,12 @@ int keydbcfg_parse_config(config_file *cfgfile, const char *path)
if (!fp)
return 0;
dk_list *head_dklist = new_dk_list();
pk_list *head_pklist = new_pk_list();
cert_list *head_clist = new_cert_list();
title_entry_list *head_celist = new_title_entry_list();
digit_key_pair_list *dkplist = NULL;
void *scanner;
libaacs_yylex_init(&scanner);
libaacs_yyset_in(fp, scanner);
int retval = yyparse(scanner, head_dklist, head_pklist, head_clist,
head_celist, dkplist);
int retval = yyparse(scanner, cfgfile, NULL, NULL);
libaacs_yylex_destroy(scanner);
cfgfile->dkl = head_dklist;
cfgfile->pkl = head_pklist;
cfgfile->host_cert_list = head_clist;
cfgfile->list = head_celist;
fclose(fp);
if (retval)
...
...
@@ -547,27 +542,26 @@ static dk_list *new_dk_list(void)
}
/* Function to add dk to config file */
static
dk_list *
add_dk_
list_
entry(
dk_list *list
, char *key, char *node)
static
void
add_dk_entry(
config_file *cf
, char *key, char *node)
{
if (!list)
{
printf("Error: No dk list passed as parameter.\n");
return NULL;
}
if (strlen(key) != 32) {
fprintf(stderr, "ignoring bad DK entry %s\n", key);
X_FREE(key);
return
list
;
return;
}
list->key = key;
list->node = strtoul(node, NULL, 16);
list->next = new_dk_list();
dk_list *entry = cf->dkl;
if (!entry) {
entry = cf->dkl = new_dk_list();
} else {
for (; entry->next; entry = entry->next);
entry->next = new_dk_list();
entry = entry->next;
}
entry->key = key;
entry->node = strtoul(node, NULL, 16);
X_FREE(node);
return list->next;
}
/* Function to return new pk_list object */
...
...
@@ -579,24 +573,24 @@ static pk_list *new_pk_list(void)
}
/* Function to add pk to config file */
static
pk_list *
add_pk_
list_
entry(
pk_list *list
, char *key)
static
void
add_pk_entry(
config_file *cf
, char *key)
{
if (!list)
{
printf("Error: No pk list passed as parameter.\n");
return NULL;
}
if (strlen(key) != 32) {
fprintf(stderr, "ignoring bad PK entry %s\n", key);
X_FREE(key);
return
list
;
return;
}
list->key = key;
list->next = new_pk_list();
pk_list *entry = cf->pkl;
if (!entry) {
entry = cf->pkl = new_pk_list();
} else {
for (; entry->next; entry = entry->next);
entry->next = new_pk_list();
entry = entry->next;
}
return list->next
;
entry->key = key
;
}
/* Function to create new certificate list */
...
...
@@ -615,34 +609,32 @@ static cert_list *new_cert_list(void)
}
/* Function to add certificate list entry into config file object */
static cert_list *add_cert_list(cert_list *list, char *host_priv_key,
char *host_cert)
static void add_cert_entry(config_file *cf, char *host_priv_key, char *host_cert)
{
if (!list)
{
printf("Error: no certificate list object passed as parameter.\n");
return NULL;
}
if (strlen(host_priv_key) != 40) {
fprintf(stderr, "ignoring bad private key entry %s\n", host_priv_key);
X_FREE(host_priv_key);
X_FREE(host_cert);
return
list
;
return;
}
if (strlen(host_cert) != 184) {
fprintf(stderr, "ignoring bad certificate entry %s\n", host_cert);
X_FREE(host_priv_key);
X_FREE(host_cert);
return
list
;
return;
}
list->host_priv_key = host_priv_key;
list->host_cert = host_cert;
list->next = new_cert_list();
cert_list *entry = cf->host_cert_list;
if (!entry) {
entry = cf->host_cert_list = new_cert_list();
} else {
for (; entry->next; entry = entry->next);
entry->next = new_cert_list();
entry = entry->next;
}
return list->next;
entry->host_priv_key = host_priv_key;
entry->host_cert = host_cert;
}
/* Function that returns pointer to new title entry list */
...
...
@@ -768,7 +760,7 @@ static int add_date_entry(title_entry_list *list, unsigned int year,
}
/* Our definition of yyerror */
void yyerror (void *scanner,
dk_list *dklist, pk_list *pklist, cert_list *clist
,
void yyerror (void *scanner,
config_file *cf
,
title_entry_list *celist, digit_key_pair_list *dkplist,
const char *msg)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment