diff options
Diffstat (limited to 'src/starter/invokecharon.c')
-rw-r--r-- | src/starter/invokecharon.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/starter/invokecharon.c b/src/starter/invokecharon.c index 1a03dff20..02239daf1 100644 --- a/src/starter/invokecharon.c +++ b/src/starter/invokecharon.c @@ -102,7 +102,10 @@ starter_start_charon (starter_config_t *cfg, bool debug) struct stat stb; int argc = 1; char *arg[] = { - CHARON_CMD, NULL, NULL, NULL + CHARON_CMD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; if (!debug) @@ -114,6 +117,36 @@ starter_start_charon (starter_config_t *cfg, bool debug) arg[argc++] = "--strictcrlpolicy"; } + { /* parse debug string */ + char *pos, *level, *buf_pos, type[4], buffer[512]; + pos = cfg->setup.charondebug; + buf_pos = buffer; + while (pos && sscanf(pos, "%4s %d,", type, &level) == 2) + { + snprintf(buf_pos, buffer + sizeof(buffer) - buf_pos, "--debug-%s", type); + arg[argc++] = buf_pos; + buf_pos += strlen(buf_pos) + 1; + if (buf_pos >= buffer + sizeof(buffer)) + { + break; + } + snprintf(buf_pos, buffer + sizeof(buffer) - buf_pos, "%d", level); + arg[argc++] = buf_pos; + buf_pos += strlen(buf_pos) + 1; + if (buf_pos >= buffer + sizeof(buffer)) + { + break; + } + + /* get next */ + pos = strchr(pos, ','); + if (pos) + { + pos++; + } + } + } + if (_charon_pid) { plog("starter_start_charon(): charon already started..."); |