lxc_log_define(lxc_seccomp, lxc);
-static int parse_config_v1(FILE *f, struct lxc_conf *conf)
+static int parse_config_v1(FILE *f, char *line, size_t *line_bufsz, struct lxc_conf *conf)
{
int ret = 0;
- size_t line_bufsz = 0;
- char *line = NULL;
- while (getline(&line, &line_bufsz, f) != -1) {
+ while (getline(&line, line_bufsz, f) != -1) {
int nr;
ret = sscanf(line, "%d", &nr);
* write
* close
*/
-static int parse_config_v2(FILE *f, char *line, struct lxc_conf *conf)
+static int parse_config_v2(FILE *f, char *line, size_t *line_bufsz, struct lxc_conf *conf)
{
int ret;
char *p;
enum lxc_hostarch_t cur_rule_arch, native_arch;
- size_t line_bufsz = 0;
bool blacklist = false;
- char *rule_line = NULL;
uint32_t default_policy_action = -1, default_rule_action = -1;
struct seccomp_v2_rule rule;
struct scmp_ctx_info {
#endif
}
- while (getline(&rule_line, &line_bufsz, f) != -1) {
+ while (getline(&line, line_bufsz, f) != -1) {
if (line[0] == '#')
continue;
}
}
- free(rule_line);
+ free(line);
return 0;
bad_arch:
if (ctx.contexts[2])
seccomp_release(ctx.contexts[2]);
- free(rule_line);
+ free(line);
return -1;
}
*/
static int parse_config(FILE *f, struct lxc_conf *conf)
{
- char line[MAXPATHLEN];
+ char *line = NULL;
+ size_t line_bufsz = 0;
int ret, version;
ret = fscanf(f, "%d\n", &version);
return -1;
}
- if (!fgets(line, MAXPATHLEN, f)) {
+ if (getline(&line, &line_bufsz, f) == -1) {
ERROR("Invalid config file");
- return -1;
+ goto bad_line;
}
if (version == 1 && !strstr(line, "whitelist")) {
ERROR("Only whitelist policy is supported");
- return -1;
+ goto bad_line;
}
if (strstr(line, "debug")) {
ERROR("Debug not yet implemented");
- return -1;
+ goto bad_line;
}
if (version == 1)
- return parse_config_v1(f, conf);
+ return parse_config_v1(f, line, &line_bufsz, conf);
- return parse_config_v2(f, line, conf);
+ return parse_config_v2(f, line, &line_bufsz, conf);
+
+bad_line:
+ free(line);
+ return -1;
}
/*