char **before;
char **after;
char **wants;
+ char **wanted_by;
char **conflicts;
bool has_lsb;
bool reload;
_cleanup_fclose_ FILE *f = NULL;
_cleanup_free_ char *before = NULL;
_cleanup_free_ char *after = NULL;
+ _cleanup_free_ char *wants = NULL;
_cleanup_free_ char *conflicts = NULL;
int r;
if (!after)
return log_oom();
+ wants = strv_join(s->wants, " ");
+ if (!wants)
+ return log_oom();
+
conflicts = strv_join(s->conflicts, " ");
if (!conflicts)
return log_oom();
fprintf(f, "Before=%s\n", before);
if (!isempty(after))
fprintf(f, "After=%s\n", after);
+ if (!isempty(wants))
+ fprintf(f, "Wants=%s\n", wants);
if (!isempty(conflicts))
fprintf(f, "Conflicts=%s\n", conflicts);
if (s->reload)
fprintf(f, "ExecReload=%s reload\n", s->path);
- STRV_FOREACH(p, s->wants) {
+ STRV_FOREACH(p, s->wanted_by) {
r = add_symlink(s->name, *p);
if (r < 0)
log_error_unit(s->name, "Failed to create 'Wants' symlink to %s: %s", *p, strerror(-r));
} else if (state == LSB || state == LSB_DESCRIPTION) {
if (startswith_no_case(t, "Provides:")) {
- char *i, *w;
+ const char *word, *state_;
size_t z;
state = LSB;
- FOREACH_WORD_QUOTED(w, z, t+9, i) {
+ FOREACH_WORD_QUOTED(word, z, t+9, state_) {
_cleanup_free_ char *n = NULL, *m = NULL;
- n = strndup(w, z);
+ n = strndup(word, z);
if (!n)
return -ENOMEM;
r = strv_extend(&s->wants, m);
if (r < 0)
return log_oom();
+ if (streq(m, SPECIAL_NETWORK_ONLINE_TARGET)) {
+ r = strv_extend(&s->before, SPECIAL_NETWORK_TARGET);
+ if (r < 0)
+ return log_oom();
+ }
}
if (r < 0)
"[%s:%u] Failed to add LSB Provides name %s, ignoring: %s",
s->path, line, m, strerror(-r));
}
+ if (!isempty(state_))
+ log_error_unit(s->name,
+ "[%s:%u] Trailing garbage in Provides, ignoring.",
+ s->path, line);
} else if (startswith_no_case(t, "Required-Start:") ||
startswith_no_case(t, "Should-Start:") ||
startswith_no_case(t, "X-Start-Before:") ||
startswith_no_case(t, "X-Start-After:")) {
- char *i, *w;
+ const char *word, *state_;
size_t z;
state = LSB;
- FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
+ FOREACH_WORD_QUOTED(word, z, strchr(t, ':')+1, state_) {
_cleanup_free_ char *n = NULL, *m = NULL;
bool is_before;
- n = strndup(w, z);
+ n = strndup(word, z);
if (!n)
return -ENOMEM;
"[%s:%u] Failed to add dependency on %s, ignoring: %s",
s->path, line, m, strerror(-r));
}
+ if (!isempty(state_))
+ log_error_unit(s->name,
+ "[%s:%u] Trailing garbage in %*s, ignoring.",
+ s->path, line,
+ (int)(strchr(t, ':') - t), t);
} else if (startswith_no_case(t, "Description:")) {
char *d, *j;
r = strv_extend(&service->before, rcnd_table[i].target);
if (r < 0)
return log_oom();
- r = strv_extend(&service->wants, rcnd_table[i].target);
+ r = strv_extend(&service->wanted_by, rcnd_table[i].target);
if (r < 0)
return log_oom();
}