MCPcopy Create free account
hub / github.com/F-Stack/f-stack / biba_parse

Function biba_parse

freebsd/security/mac_biba/mac_biba.c:688–739  ·  view source on GitHub ↗

* Note: destructively consumes the string, make a local copy before calling * if that's a problem. */

Source from the content-addressed store, hash-verified

686 * if that's a problem.
687 */
688static int
689biba_parse(struct mac_biba *mb, char *string)
690{
691 char *rangehigh, *rangelow, *effective;
692 int error;
693
694 effective = strsep(&string, "(");
695 if (*effective == '\0')
696 effective = NULL;
697
698 if (string != NULL) {
699 rangelow = strsep(&string, "-");
700 if (string == NULL)
701 return (EINVAL);
702 rangehigh = strsep(&string, ")");
703 if (string == NULL)
704 return (EINVAL);
705 if (*string != '\0')
706 return (EINVAL);
707 } else {
708 rangelow = NULL;
709 rangehigh = NULL;
710 }
711
712 KASSERT((rangelow != NULL && rangehigh != NULL) ||
713 (rangelow == NULL && rangehigh == NULL),
714 ("biba_parse: range mismatch"));
715
716 bzero(mb, sizeof(*mb));
717 if (effective != NULL) {
718 error = biba_parse_element(&mb->mb_effective, effective);
719 if (error)
720 return (error);
721 mb->mb_flags |= MAC_BIBA_FLAG_EFFECTIVE;
722 }
723
724 if (rangelow != NULL) {
725 error = biba_parse_element(&mb->mb_rangelow, rangelow);
726 if (error)
727 return (error);
728 error = biba_parse_element(&mb->mb_rangehigh, rangehigh);
729 if (error)
730 return (error);
731 mb->mb_flags |= MAC_BIBA_FLAG_RANGE;
732 }
733
734 error = biba_valid(mb);
735 if (error)
736 return (error);
737
738 return (0);
739}
740
741static int
742biba_internalize_label(struct label *label, char *element_name,

Callers 1

biba_internalize_labelFunction · 0.85

Calls 4

strsepFunction · 0.85
bzeroFunction · 0.85
biba_parse_elementFunction · 0.85
biba_validFunction · 0.85

Tested by

no test coverage detected