is there a segmentation fault?
Rule *create_rule(Rule *rules, char *target) {
    Rule *curr = check_rule_in_list(rules, target);
    if (curr == NULL) {
        Rule *newRule = malloc(sizeof(Rule));
        strcpy(newRule->target, target);
        newRule->next_rule = NULL;
        newRule->actions = NULL;
        newRule->dependencies = NULL;

        curr = newRule;

        return newRule;
    } else {
        Rule *newRule = malloc(sizeof(Rule));
        strcpy(newRule->target, target);
        newRule->next_rule = NULL;
        newRule->actions = NULL;
        newRule->dependencies = NULL;
        curr->next_rule = newRule;
        return newRule;
    }
}