Lines Matching refs:jp

59 static int jailparam_type(struct jailparam *jp);
77 struct jailparam *jp;
87 jp = alloca(njp * sizeof(struct jailparam));
90 if (jailparam_init(jp + njp, name) < 0)
92 if (jailparam_import(jp + njp++, value) < 0)
96 jid = jailparam_set(jp, njp, flags);
97 jailparam_free(jp, njp);
101 jailparam_free(jp, njp);
114 struct jailparam *jp, *jp_lastjid, *jp_jid, *jp_name, *jp_key;
126 jp = alloca(njp * sizeof(struct jailparam));
132 if (jailparam_init(jp + njp, name) < 0) {
136 if (!strcmp(jp[njp].jp_name, "lastjid")) {
137 jp_lastjid = jp + njp;
139 } else if (!strcmp(jp[njp].jp_name, "jid")) {
140 jp_jid = jp + njp;
142 } if (!strcmp(jp[njp].jp_name, "name")) {
143 jp_name = jp + njp;
166 jid = jailparam_get(jp, njp, flags);
172 if (jp + i != jp_key) {
174 if ((jp[i].jp_ctltype & CTLTYPE) == CTLTYPE_STRING)
175 strcpy(valarg, jp[i].jp_value);
177 value = jailparam_export(jp + i);
185 jailparam_free(jp, njp);
190 jailparam_free(jp, njp);
201 struct jailparam *jp, *tjp;
209 jp = malloc(nlist * sizeof(*jp));
210 if (jp == NULL) {
248 tjp = realloc(jp, nlist * sizeof(*jp));
251 jp = tjp;
253 if (jailparam_init(jp + njp, buf + sizeof(SJPARAM)) < 0)
257 jp = realloc(jp, njp * sizeof(*jp));
258 *jpp = jp;
262 jailparam_free(jp, njp);
263 free(jp);
271 jailparam_init(struct jailparam *jp, const char *name)
274 memset(jp, 0, sizeof(*jp));
275 jp->jp_name = strdup(name);
276 if (jp->jp_name == NULL) {
280 if (jailparam_type(jp) < 0) {
281 jailparam_free(jp, 1);
282 jp->jp_name = NULL;
283 jp->jp_value = NULL;
294 jailparam_import(struct jailparam *jp, const char *value)
302 if ((jp->jp_ctltype & CTLTYPE) == CTLTYPE_STRING) {
303 jp->jp_value = strdup(value);
304 if (jp->jp_value == NULL) {
311 if (jp->jp_elemlen) {
313 jp->jp_value = strdup("");
314 if (jp->jp_value == NULL) {
318 jp->jp_valuelen = 0;
323 jp->jp_valuelen = jp->jp_elemlen * nval;
325 jp->jp_value = malloc(jp->jp_valuelen);
326 if (jp->jp_value == NULL) {
333 switch (jp->jp_ctltype & CTLTYPE) {
335 if (jp->jp_flags & (JP_BOOL | JP_NOBOOL)) {
337 avalue, fw, &((int *)jp->jp_value)[i])) {
341 jp->jp_name, fw, avalue);
347 if (jp->jp_flags & JP_JAILSYS) {
353 ((int *)jp->jp_value)[i] = JAIL_SYS_NEW;
357 &((int *)jp->jp_value)[i])) {
361 jp->jp_name, fw, avalue);
367 ((int *)jp->jp_value)[i] = strtol(avalue, &ep, 10);
372 jp->jp_name, fw, avalue);
378 ((unsigned *)jp->jp_value)[i] =
382 ((long *)jp->jp_value)[i] = strtol(avalue, &ep, 10);
385 ((unsigned long *)jp->jp_value)[i] =
389 ((int64_t *)jp->jp_value)[i] =
393 ((uint64_t *)jp->jp_value)[i] =
399 switch (jp->jp_structtype) {
402 &((struct in_addr *)jp->jp_value)[i]) != 1)
407 jp->jp_name, tvalue);
414 &((struct in6_addr *)jp->jp_value)[i]) != 1)
419 jp->jp_name, tvalue);
431 "unknown type for %s", jp->jp_name);
440 free(jp->jp_value);
441 jp->jp_value = NULL;
467 jailparam_import_raw(struct jailparam *jp, void *value, size_t valuelen)
470 jp->jp_value = value;
471 jp->jp_valuelen = valuelen;
472 jp->jp_flags |= JP_RAWVALUE;
480 jailparam_set(struct jailparam *jp, unsigned njp, int flags)
490 jiov[i].iov_base = jp[j].jp_name;
491 jiov[i].iov_len = strlen(jp[j].jp_name) + 1;
493 if (jp[j].jp_flags & (JP_BOOL | JP_NOBOOL)) {
500 if (jp[j].jp_value != NULL &&
501 jp[j].jp_valuelen == sizeof(int) &&
502 !*(int *)jp[j].jp_value) {
504 nname = jp[j].jp_flags & JP_BOOL
505 ? noname(jp[j].jp_name)
506 : nononame(jp[j].jp_name);
520 if (jp[j].jp_value == NULL && jp[j].jp_valuelen > 0 &&
521 jailparam_import(jp + j, "") < 0) {
526 jiov[i].iov_base = jp[j].jp_value;
528 (jp[j].jp_ctltype & CTLTYPE) == CTLTYPE_STRING
529 ? strlen(jp[j].jp_value) + 1
530 : jp[j].jp_valuelen;
548 if ((jp[j].jp_flags & (JP_BOOL | JP_NOBOOL)) &&
549 jp[j].jp_value != NULL &&
550 jp[j].jp_valuelen == sizeof(int) &&
551 !*(int *)jp[j].jp_value)
557 jailparam_get(struct jailparam *jp, unsigned njp, int flags)
572 if (!strcmp(jp[j].jp_name, "lastjid"))
573 jp_lastjid = jp + j;
574 else if (!strcmp(jp[j].jp_name, "jid"))
575 jp_jid = jp + j;
576 else if (!strcmp(jp[j].jp_name, "name"))
577 jp_name = jp + j;
578 else if (jp[j].jp_elemlen && !(jp[j].jp_flags & JP_RAWVALUE)) {
580 jiov[ai].iov_base = jp[j].jp_name;
581 jiov[ai].iov_len = strlen(jp[j].jp_name) + 1;
619 if (jp[j].jp_elemlen && !(jp[j].jp_flags & JP_RAWVALUE)) {
621 jiov[ai].iov_len += jp[j].jp_elemlen * ARRAY_SLOP;
622 if (jp[j].jp_valuelen >= jiov[ai].iov_len)
623 jiov[ai].iov_len = jp[j].jp_valuelen;
625 jp[j].jp_valuelen = jiov[ai].iov_len;
626 if (jp[j].jp_value != NULL)
627 free(jp[j].jp_value);
628 jp[j].jp_value = malloc(jp[j].jp_valuelen);
629 if (jp[j].jp_value == NULL) {
635 jiov[ai].iov_base = jp[j].jp_value;
638 } else if (jp + j != jp_key) {
639 jiov[i].iov_base = jp[j].jp_name;
640 jiov[i].iov_len = strlen(jp[j].jp_name) + 1;
642 if (jp[j].jp_value == NULL &&
643 !(jp[j].jp_flags & JP_RAWVALUE)) {
644 jp[j].jp_value = malloc(jp[j].jp_valuelen);
645 if (jp[j].jp_value == NULL) {
651 jiov[i].iov_base = jp[j].jp_value;
652 jiov[i].iov_len = jp[j].jp_valuelen;
667 if (jp[j].jp_elemlen &&
668 !(jp[j].jp_flags & JP_RAWVALUE)) {
678 if (jp[j].jp_elemlen &&
679 !(jp[j].jp_flags & JP_RAWVALUE)) {
682 jp[j].jp_elemlen * ARRAY_SLOP;
683 if (jp[j].jp_valuelen >= jiov[ai].iov_len)
684 jiov[ai].iov_len = jp[j].jp_valuelen;
686 jp[j].jp_valuelen = jiov[ai].iov_len;
687 if (jp[j].jp_value != NULL)
688 free(jp[j].jp_value);
689 jp[j].jp_value =
691 if (jp[j].jp_value == NULL) {
697 jiov[ai].iov_base = jp[j].jp_value;
707 if (jp[j].jp_elemlen && !(jp[j].jp_flags & JP_RAWVALUE)) {
709 jp[j].jp_valuelen = jiov[ai].iov_len;
711 } else if (jp + j != jp_key) {
713 jp[j].jp_valuelen = jiov[i].iov_len;
724 jailparam_export(struct jailparam *jp)
732 if ((jp->jp_ctltype & CTLTYPE) == CTLTYPE_STRING) {
733 value = strdup(jp->jp_value);
738 nval = jp->jp_elemlen ? jp->jp_valuelen / jp->jp_elemlen : 1;
749 switch (jp->jp_ctltype & CTLTYPE) {
751 ival = ((int *)jp->jp_value)[i];
752 if ((jp->jp_flags & (JP_BOOL | JP_NOBOOL)) &&
758 if ((jp->jp_flags & JP_JAILSYS) &&
769 ((unsigned *)jp->jp_value)[i]);
773 ((long *)jp->jp_value)[i]);
777 ((unsigned long *)jp->jp_value)[i]);
781 (intmax_t)((int64_t *)jp->jp_value)[i]);
785 (uintmax_t)((uint64_t *)jp->jp_value)[i]);
788 switch (jp->jp_structtype) {
791 &((struct in_addr *)jp->jp_value)[i],
800 &((struct in6_addr *)jp->jp_value)[i],
814 "unknown type for %s", jp->jp_name);
843 jailparam_free(struct jailparam *jp, unsigned njp)
848 free(jp[j].jp_name);
849 if (!(jp[j].jp_flags & JP_RAWVALUE))
850 free(jp[j].jp_value);
858 jailparam_type(struct jailparam *jp)
870 name = jp->jp_name;
872 jp->jp_valuelen = sizeof(int);
873 jp->jp_ctltype = CTLTYPE_INT | CTLFLAG_WR;
896 "unknown parameter: %s", jp->jp_name);
908 jp->jp_flags |= JP_NOBOOL;
919 jp->jp_ctltype = desc.i;
921 if (jp->jp_flags & JP_NOBOOL) {
923 jp->jp_valuelen = sizeof(int);
942 jp->jp_flags |= JP_BOOL;
944 jp->jp_flags |= JP_JAILSYS;
946 jp->jp_valuelen = sizeof(int);
950 jp->jp_valuelen = sizeof(long);
954 jp->jp_valuelen = sizeof(int64_t);
966 jp->jp_valuelen = strtoul(desc.s, NULL, 10);
970 jp->jp_structtype = JPS_IN_ADDR;
971 jp->jp_valuelen = sizeof(struct in_addr);
973 jp->jp_structtype = JPS_IN6_ADDR;
974 jp->jp_valuelen = sizeof(struct in6_addr);
978 NULL, &jp->jp_valuelen, NULL, 0) < 0) {
1015 "unknown type for %s", jp->jp_name);
1020 jp->jp_elemlen = jp->jp_valuelen;
1021 jp->jp_valuelen = 0;