4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
25 * All symbols and functions in this header file and library are private to Sun
26 * Microsystems. The only guarantee that is made is that if your application
27 * uses them, it will break on upgrade.
34 #include <sys/tsol/tndb.h>
40 #define TNRHTP_PATH "/etc/security/tsol/tnrhtp"
41 #define TNRHDB_PATH "/etc/security/tsol/tnrhdb"
42 #define TNZONECFG_PATH "/etc/security/tsol/tnzonecfg"
44 #define TNDB_COMMA ", \t"
45 #define TN_RESERVED ",#;"
48 * String parsing routines
50 * These functions are in four logical groups: one for template (tnrhtp)
51 * entries, one for remote host (tnrhdb) entries, one for zone configuration
52 * (tnzonecfg) entries, and a fourth for routing attributes.
54 * In each group, there are functions that parse from a string or database, and
55 * a function to free returned entries. The parsing functions all take a
56 * pointer to an integer and a pointer to a character pointer for returning
57 * errors. On error, the returned entry pointer is NULL, the integer is set to
58 * one of the LTSNET_* errors below, and the character pointer points to the
59 * location of the error. (For the functions that iterate on a database, this
60 * points into static storage in the library. This storage is associated with
63 * The functions that do look-ups based on a value (name or address) do not
64 * return errors other than "not found," which is signaled by a return value of
68 /* Template entry parsing */
69 extern tsol_tpent_t
*tsol_gettpbyname(const char *);
70 extern tsol_tpent_t
*tsol_gettpent(void);
71 extern tsol_tpent_t
*tsol_fgettpent(FILE *, boolean_t
*);
72 extern void tsol_freetpent(tsol_tpent_t
*);
73 extern void tsol_settpent(int);
74 extern void tsol_endtpent(void);
75 extern int str_to_tpstr(const char *, int, void *, char *, int);
76 extern tsol_tpent_t
*tpstr_to_ent(tsol_tpstr_t
*, int *, char **);
78 /* Remote host entry parsing */
79 extern tsol_rhent_t
*tsol_getrhbyaddr(const void *, size_t, int);
80 extern tsol_rhent_t
*tsol_getrhent(void);
81 extern tsol_rhent_t
*tsol_fgetrhent(FILE *, boolean_t
*);
82 extern void tsol_freerhent(tsol_rhent_t
*);
83 extern void tsol_setrhent(int);
84 extern void tsol_endrhent(void);
85 extern int str_to_rhstr(const char *, int, void *, char *, int);
86 extern tsol_rhent_t
*rhstr_to_ent(tsol_rhstr_t
*, int *, char **);
87 extern tsol_host_type_t
tsol_getrhtype(char *);
90 /* Zone configuration parsing */
91 extern tsol_zcent_t
*tsol_sgetzcent(const char *, int *, char **);
92 extern void tsol_freezcent(tsol_zcent_t
*);
94 /* Routing attribute parsing */
95 extern char *sl_to_str(const m_label_t
*);
97 extern const char *rtsa_to_str(const struct rtsa_s
*, char *, size_t);
98 extern boolean_t
rtsa_keyword(const char *, struct rtsa_s
*, int *, char **);
99 extern const char *parse_entry(char *, size_t, const char *, const char *);
101 /* Convert LTSNET_* to a printable string */
102 extern const char *tsol_strerror(int, int);
104 /* System calls; these return -1 on error and set errno */
105 extern int tnrhtp(int, tsol_tpent_t
*);
106 extern int tnrh(int, tsol_rhent_t
*);
107 extern int tnmlp(int, tsol_mlpent_t
*);
110 * Errors that can occur in the parsing routines. Note that not all errors are
111 * possible with every routine. Must be kept in sync with list in misc.c.
113 #define LTSNET_NONE 0 /* No error */
114 #define LTSNET_SYSERR 1 /* System error; see errno */
115 #define LTSNET_EMPTY 2 /* Empty string or end of list */
116 #define LTSNET_ILL_ENTRY 3 /* Entry is malformed */
117 #define LTSNET_NO_NAME 4 /* Missing name */
118 #define LTSNET_NO_ATTRS 5 /* Missing template attributes */
119 #define LTSNET_ILL_NAME 6 /* Illegal name */
120 #define LTSNET_ILL_KEYDELIM 7 /* Illegal keyword delimiter */
121 #define LTSNET_ILL_KEY 8 /* Unknown keyword */
122 #define LTSNET_DUP_KEY 9 /* Duplicate keyword */
123 #define LTSNET_ILL_VALDELIM 10 /* Illegal value delimiter */
124 #define LTSNET_NO_HOSTTYPE 11 /* Missing host type */
125 #define LTSNET_ILL_HOSTTYPE 12 /* Illegal host type */
126 #define LTSNET_NO_LABEL 13 /* Missing label */
127 #define LTSNET_ILL_LABEL 14 /* Illegal label */
128 #define LTSNET_NO_RANGE 15 /* Missing label range */
129 #define LTSNET_ILL_RANGE 16 /* Illegal label range */
130 #define LTSNET_NO_LOWERBOUND 17 /* No lower bound in range */
131 #define LTSNET_ILL_LOWERBOUND 18 /* Illegal lower bound in range */
132 #define LTSNET_NO_UPPERBOUND 19 /* No upper bound in range */
133 #define LTSNET_ILL_UPPERBOUND 20 /* Illegal upper bound in range */
134 #define LTSNET_NO_DOI 21 /* Missing DOI */
135 #define LTSNET_ILL_DOI 22 /* Illegal DOI */
136 #define LTSNET_SET_TOO_BIG 23 /* Too many entries in set */
137 #define LTSNET_NO_ADDR 24 /* Missing address/network */
138 #define LTSNET_ILL_ADDR 25 /* Illegal address/network */
139 #define LTSNET_ILL_FLAG 26 /* Illegal flag */
140 #define LTSNET_ILL_MLP 27 /* Illegal MLP specification */
141 #define LTSNET_BAD_TYPE 28 /* Unacceptable keyword for type */
147 #endif /* _LIBTSNET_H */