Lines Matching +full:- +full:j
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
56 struct cfjail *j, *dj; in dep_setup() local
70 if ((j = TAILQ_FIRST(&cfjails)) && in dep_setup()
71 (p = j->intparams[IP_DEPEND])) { in dep_setup()
72 TAILQ_FOREACH(s, &p->val, tq) { in dep_setup()
73 if (running_jail(s->s, 0) == NULL) { in dep_setup()
75 "\"%s\"", s->s); in dep_setup()
76 j->flags |= JF_FAILED; in dep_setup()
84 TAILQ_FOREACH(j, &cfjails, tq) in dep_setup()
88 TAILQ_FOREACH(j, &cfjails, tq) in dep_setup()
89 jails_byname[njails++] = j; in dep_setup()
95 TAILQ_FOREACH(j, &cfjails, tq) { in dep_setup()
96 if (j->flags & JF_FAILED) in dep_setup()
98 if ((p = j->intparams[IP_DEPEND])) { in dep_setup()
99 TAILQ_FOREACH(s, &p->val, tq) { in dep_setup()
100 dj = find_jail(s->s); in dep_setup()
103 dep_add(j, dj, 0); in dep_setup()
105 jail_warnx(j, in dep_setup()
107 s->s); in dep_setup()
108 j->flags |= JF_FAILED; in dep_setup()
113 if ((cs = strrchr(j->name, '.'))) in dep_setup()
115 if (plen < (size_t)(cs - j->name + 1)) { in dep_setup()
116 plen = (cs - j->name) + 1; in dep_setup()
119 strlcpy(pname, j->name, plen); in dep_setup()
123 dep_add(j, dj, DF_LIGHT); in dep_setup()
131 while ((j = TAILQ_FIRST(&ready))) { in dep_setup()
132 requeue(j, &cfjails); in dep_setup()
133 dep_done(j, DF_NOFAIL); in dep_setup()
135 while ((j = TAILQ_FIRST(&depend)) != NULL) { in dep_setup()
136 jail_warnx(j, "dependency loop"); in dep_setup()
137 j->flags |= JF_FAILED; in dep_setup()
139 requeue(j, &cfjails); in dep_setup()
140 dep_done(j, DF_NOFAIL); in dep_setup()
141 } while ((j = TAILQ_FIRST(&ready))); in dep_setup()
143 TAILQ_FOREACH(j, &cfjails, tq) in dep_setup()
144 STAILQ_FOREACH(d, &j->dep[DEP_FROM], tq[DEP_FROM]) in dep_setup()
145 d->flags &= ~DF_SEEN; in dep_setup()
155 dep_check(struct cfjail *j) in dep_check() argument
163 if (j->ndeps == 0) in dep_check()
166 if ((rev = JF_DO_STOP(j->flags))) { in dep_check()
173 STAILQ_FOREACH(d, &j->dep[depfrom], tq[depfrom]) { in dep_check()
174 if (d->flags & DF_SEEN) in dep_check()
176 dj = d->j[depto]; in dep_check()
177 if (dj->flags & JF_FAILED) { in dep_check()
178 if (!(j->flags & (JF_DEPEND | JF_FAILED)) && in dep_check()
180 jail_warnx(j, "skipped"); in dep_check()
181 j->flags |= JF_FAILED; in dep_check()
189 if (bits[dj->flags & JF_OP_MASK] <= 1) { in dep_check()
190 if (!(dj->flags & JF_OP_MASK)) { in dep_check()
192 dj->flags |= JF_DEPEND; in dep_check()
196 switch (j->flags & JF_OP_MASK) { in dep_check()
198 dj->flags |= JF_START; in dep_check()
201 if (!(dj->flags & JF_OP_MASK)) in dep_check()
202 dj->flags |= JF_SET; in dep_check()
203 else if (dj->flags & JF_STOP) in dep_check()
204 dj->flags |= JF_START; in dep_check()
208 if (!(dj->flags & JF_STOP)) in dep_check()
210 dj->flags |= JF_STOP; in dep_check()
211 if (dj->flags & JF_SET) in dep_check()
212 dj->flags ^= (JF_START | JF_SET); in dep_check()
218 if (!((d->flags & DF_LIGHT) && in dep_check()
219 (rev ? dj->jid < 0 : dj->jid > 0))) in dep_check()
224 requeue(j, &depend); in dep_check()
232 dep_done(struct cfjail *j, unsigned flags) in dep_done() argument
238 if (JF_DO_STOP(j->flags)) { in dep_done()
245 STAILQ_FOREACH(d, &j->dep[depto], tq[depto]) { in dep_done()
246 if ((d->flags & DF_SEEN) | (flags & ~d->flags & DF_LIGHT)) in dep_done()
248 d->flags |= DF_SEEN; in dep_done()
249 dj = d->j[depfrom]; in dep_done()
250 if (!(flags & DF_NOFAIL) && (j->flags & JF_FAILED) && in dep_done()
251 (j->flags & (JF_OP_MASK | JF_DEPEND)) != in dep_done()
253 if (!(dj->flags & (JF_DEPEND | JF_FAILED)) && in dep_done()
256 dj->flags |= JF_FAILED; in dep_done()
258 if (!--dj->ndeps && dj->queue == &depend) in dep_done()
267 dep_reset(struct cfjail *j) in dep_reset() argument
272 depfrom = JF_DO_STOP(j->flags) ? DEP_TO : DEP_FROM; in dep_reset()
273 j->ndeps = 0; in dep_reset()
274 STAILQ_FOREACH(d, &j->dep[depfrom], tq[depfrom]) in dep_reset()
275 j->ndeps++; in dep_reset()
284 struct cfjail *j; in next_jail() local
286 if (!(j = next_proc(!TAILQ_EMPTY(&ready))) && in next_jail()
287 (j = TAILQ_FIRST(&ready)) && JF_DO_STOP(j->flags) && in next_jail()
288 (j = TAILQ_LAST(&ready, cfjails)) && !JF_DO_STOP(j->flags)) { in next_jail()
289 TAILQ_FOREACH_REVERSE(j, &ready, cfjails, tq) in next_jail()
290 if (JF_DO_STOP(j->flags)) in next_jail()
293 if (j != NULL) in next_jail()
294 requeue(j, &cfjails); in next_jail()
295 return j; in next_jail()
305 struct cfjail *j, *tj; in start_state() local
316 TAILQ_FOREACH_SAFE(j, &cfjails, tq, tj) { in start_state()
317 j->flags = (j->flags & JF_FAILED) | state | in start_state()
319 dep_reset(j); in start_state()
320 requeue(j, j->ndeps ? &depend : &ready); in start_state()
324 * For targets specified singly, or with a non-global wildcard, in start_state()
330 * -R matches its wildcards against currently running in start_state()
347 j = add_jail(); in start_state()
348 j->name = estrdup(namebuf); in start_state()
349 j->jid = jid; in start_state()
350 j->flags = (j->flags & JF_FAILED) | in start_state()
352 dep_reset(j); in start_state()
353 requeue(j, &ready); in start_state()
357 TAILQ_FOREACH_SAFE(j, &cfjails, tq, tj) { in start_state()
358 if (wild_jail_match(j->name, target)) { in start_state()
359 j->flags = (j->flags & JF_FAILED) | in start_state()
361 dep_reset(j); in start_state()
362 requeue(j, &ready); in start_state()
367 j = find_jail(target); in start_state()
368 if (j == NULL && (state & JF_OP_MASK) == JF_STOP) { in start_state()
369 /* Allow -[rR] to specify a currently running jail. */ in start_state()
370 j = running_jail(target, JAIL_DYING); in start_state()
372 if (j == NULL) { in start_state()
374 return -1; in start_state()
376 j->flags = (j->flags & JF_FAILED) | state; in start_state()
377 dep_reset(j); in start_state()
378 requeue(j, &ready); in start_state()
387 requeue(struct cfjail *j, struct cfjails *queue) in requeue() argument
389 if (j->queue != queue) { in requeue()
390 TAILQ_REMOVE(j->queue, j, tq); in requeue()
391 TAILQ_INSERT_TAIL(queue, j, tq); in requeue()
392 j->queue = queue; in requeue()
397 requeue_head(struct cfjail *j, struct cfjails *queue) in requeue_head() argument
399 TAILQ_REMOVE(j->queue, j, tq); in requeue_head()
400 TAILQ_INSERT_HEAD(queue, j, tq); in requeue_head()
401 j->queue = queue; in requeue_head()
413 d->flags = flags; in dep_add()
414 d->j[DEP_FROM] = from; in dep_add()
415 d->j[DEP_TO] = to; in dep_add()
416 STAILQ_INSERT_TAIL(&from->dep[DEP_FROM], d, tq[DEP_FROM]); in dep_add()
417 STAILQ_INSERT_TAIL(&to->dep[DEP_TO], d, tq[DEP_TO]); in dep_add()
426 return strcmp((*((struct cfjail * const *)a))->name, in cmp_jailptr()
427 ((*(struct cfjail * const *)b))->name); in cmp_jailptr()
433 return strcmp((const char *)a, ((*(struct cfjail * const *)b))->name); in cmp_jailptr_name()
487 jail->name = estrdup(jailname); in running_jail()
488 jail->jid = ret; in running_jail()