45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * CDDL HEADER START
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * The contents of this file are subject to the terms of the
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * Common Development and Distribution License (the "License").
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * You may not use this file except in compliance with the License.
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * See the License for the specific language governing permissions
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * and limitations under the License.
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * When distributing Covered Code, include this CDDL HEADER in each
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * If applicable, add the following below this CDDL HEADER, with the
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * fields enclosed by brackets "[]" replaced with your own identifying
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * information: Portions Copyright [yyyy] [name of copyright owner]
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * CDDL HEADER END
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * Use is subject to license terms.
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * From "misc.c 5.15 00/05/31 SMI; TSOL 2.x"
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * Miscellaneous user interfaces to trusted label functions.
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * Parse off an entry from a line. Entry is stored in 'outbuf'. Returned
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * value is a pointer to the first unprocessed input character from 'instr'.
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpkconst char *
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpkparse_entry(char *outbuf, size_t outlen, const char *instr,
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk const char *delimit)
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * User may specify outlen as 0 to skip over a field without storing
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * it anywhere. Otherwise, we need at least one byte for the
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk * terminating NUL plus one byte to store another byte from instr.
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire if ((label_to_str(sl, &sl_str, M_LABEL, DEF_NAMES) != 0) &&
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire (label_to_str(sl, &sl_str, M_INTERNAL, DEF_NAMES) != 0))
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpkconst char *
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpkrtsa_to_str(const struct rtsa_s *rtsa, char *line, size_t len)
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk for (i = 1; mask != 0 && i != 0 && slen < len - 1; i <<= 1) {
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk if (!(i & mask))
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk switch (i & mask) {
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire sl_str = sl_to_str(&rtsa->rtsa_slrange.lower_bound);
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire sl_str = sl_to_str(&rtsa->rtsa_slrange.upper_bound);
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpkrtsa_keyword(const char *options, struct rtsa_s *sp, int *errp, char **errstrp)
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk valptr = parse_entry(attrbuf, sizeof (attrbuf), options, ",=");
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk for (keyword = rtsa_keywords; *keyword != NULL; keyword++)
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk switch (key) {
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire m_label_free(min_sl); /* in case of duplicate */
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire m_label_free(max_sl); /* in case of duplicate */
7b0bedd42192a2f6bcd6fc4b637d23892303a962Ric Aleshire m_label_free(min_sl); /* in case of duplicate */
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk /* Defaults to CIPSO if not specified */
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk /* If RTSA_CIPSO is specified, RTSA_DOI must be specified */
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk /* SL range must be specified */
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk /* SL range must have upper bound dominating lower bound */
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk/* Keep in sync with libtsnet.h */
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "No error",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "System error",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Empty string or end of list",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Entry is malformed",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Missing name",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Missing attributes",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal name",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal keyword delimiter",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Unknown keyword",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Duplicate keyword",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal value delimiter",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Missing host type",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal host type",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Missing label",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal label",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Missing label range",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal label range",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "No lower bound in range",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal lower bound in range",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "No upper bound in range",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal upper bound in range",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Missing DOI",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal DOI",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Too many entries in set",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal flag",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Illegal MLP specification",
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpk "Unacceptable keyword for type"
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpkstatic const int tsol_nerr = sizeof (tsol_errlist) / sizeof (*tsol_errlist);
45916cd2fec6e79bca5dee0421bd39e3c2910d1ejpkconst char *