145916cd2Sjpk /* 245916cd2Sjpk * CDDL HEADER START 345916cd2Sjpk * 445916cd2Sjpk * The contents of this file are subject to the terms of the 545916cd2Sjpk * Common Development and Distribution License (the "License"). 645916cd2Sjpk * You may not use this file except in compliance with the License. 745916cd2Sjpk * 845916cd2Sjpk * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 945916cd2Sjpk * or http://www.opensolaris.org/os/licensing. 1045916cd2Sjpk * See the License for the specific language governing permissions 1145916cd2Sjpk * and limitations under the License. 1245916cd2Sjpk * 1345916cd2Sjpk * When distributing Covered Code, include this CDDL HEADER in each 1445916cd2Sjpk * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1545916cd2Sjpk * If applicable, add the following below this CDDL HEADER, with the 1645916cd2Sjpk * fields enclosed by brackets "[]" replaced with your own identifying 1745916cd2Sjpk * information: Portions Copyright [yyyy] [name of copyright owner] 1845916cd2Sjpk * 1945916cd2Sjpk * CDDL HEADER END 2045916cd2Sjpk */ 2145916cd2Sjpk /* 22*909c1a33Ston * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 2345916cd2Sjpk * Use is subject to license terms. 2445916cd2Sjpk * 2545916cd2Sjpk * All symbols and functions in this header file and library are private to Sun 2645916cd2Sjpk * Microsystems. The only guarantee that is made is that if your application 2745916cd2Sjpk * uses them, it will break on upgrade. 2845916cd2Sjpk */ 2945916cd2Sjpk 3045916cd2Sjpk #ifndef _LIBTSNET_H 3145916cd2Sjpk #define _LIBTSNET_H 3245916cd2Sjpk 3345916cd2Sjpk #pragma ident "%Z%%M% %I% %E% SMI" 3445916cd2Sjpk 3545916cd2Sjpk #include <stdio.h> 3645916cd2Sjpk #include <sys/tsol/tndb.h> 3745916cd2Sjpk 3845916cd2Sjpk #ifdef __cplusplus 3945916cd2Sjpk extern "C" { 4045916cd2Sjpk #endif 4145916cd2Sjpk 4245916cd2Sjpk #define TNRHTP_PATH "/etc/security/tsol/tnrhtp" 4345916cd2Sjpk #define TNRHDB_PATH "/etc/security/tsol/tnrhdb" 4445916cd2Sjpk #define TNZONECFG_PATH "/etc/security/tsol/tnzonecfg" 4545916cd2Sjpk 4645916cd2Sjpk #define TNDB_COMMA ", \t" 471f041b17Ston #define TN_RESERVED ",#;" 4845916cd2Sjpk 4945916cd2Sjpk /* 5045916cd2Sjpk * String parsing routines 5145916cd2Sjpk * 5245916cd2Sjpk * These functions are in four logical groups: one for template (tnrhtp) 5345916cd2Sjpk * entries, one for remote host (tnrhdb) entries, one for zone configuration 5445916cd2Sjpk * (tnzonecfg) entries, and a fourth for routing attributes. 5545916cd2Sjpk * 5645916cd2Sjpk * In each group, there are functions that parse from a string or database, and 5745916cd2Sjpk * a function to free returned entries. The parsing functions all take a 5845916cd2Sjpk * pointer to an integer and a pointer to a character pointer for returning 5945916cd2Sjpk * errors. On error, the returned entry pointer is NULL, the integer is set to 6045916cd2Sjpk * one of the LTSNET_* errors below, and the character pointer points to the 6145916cd2Sjpk * location of the error. (For the functions that iterate on a database, this 6245916cd2Sjpk * points into static storage in the library. This storage is associated with 6345916cd2Sjpk * the iterator.) 6445916cd2Sjpk * 6545916cd2Sjpk * The functions that do look-ups based on a value (name or address) do not 6645916cd2Sjpk * return errors other than "not found," which is signaled by a return value of 6745916cd2Sjpk * NULL. 6845916cd2Sjpk */ 6945916cd2Sjpk 7045916cd2Sjpk /* Template entry parsing */ 7145916cd2Sjpk extern tsol_tpent_t *tsol_gettpbyname(const char *); 7245916cd2Sjpk extern tsol_tpent_t *tsol_gettpent(void); 73*909c1a33Ston extern tsol_tpent_t *tsol_fgettpent(FILE *, boolean_t *); 7445916cd2Sjpk extern void tsol_freetpent(tsol_tpent_t *); 7545916cd2Sjpk extern void tsol_settpent(int); 7645916cd2Sjpk extern void tsol_endtpent(void); 7745916cd2Sjpk extern int str_to_tpstr(const char *, int, void *, char *, int); 7845916cd2Sjpk extern tsol_tpent_t *tpstr_to_ent(tsol_tpstr_t *, int *, char **); 7945916cd2Sjpk 8045916cd2Sjpk /* Remote host entry parsing */ 8145916cd2Sjpk extern tsol_rhent_t *tsol_getrhbyaddr(const void *, size_t, int); 8245916cd2Sjpk extern tsol_rhent_t *tsol_getrhent(void); 83*909c1a33Ston extern tsol_rhent_t *tsol_fgetrhent(FILE *, boolean_t *); 8445916cd2Sjpk extern void tsol_freerhent(tsol_rhent_t *); 8545916cd2Sjpk extern void tsol_setrhent(int); 8645916cd2Sjpk extern void tsol_endrhent(void); 8745916cd2Sjpk extern int str_to_rhstr(const char *, int, void *, char *, int); 8845916cd2Sjpk extern tsol_rhent_t *rhstr_to_ent(tsol_rhstr_t *, int *, char **); 8945916cd2Sjpk extern tsol_host_type_t tsol_getrhtype(char *); 9045916cd2Sjpk 9145916cd2Sjpk 9245916cd2Sjpk /* Zone configuration parsing */ 9345916cd2Sjpk extern tsol_zcent_t *tsol_sgetzcent(const char *, int *, char **); 9445916cd2Sjpk extern void tsol_freezcent(tsol_zcent_t *); 9545916cd2Sjpk 9645916cd2Sjpk /* Routing attribute parsing */ 9745916cd2Sjpk extern const char *sl_to_str(const bslabel_t *); 9845916cd2Sjpk struct rtsa_s; 9945916cd2Sjpk extern const char *rtsa_to_str(const struct rtsa_s *, char *, size_t); 10045916cd2Sjpk extern boolean_t rtsa_keyword(const char *, struct rtsa_s *, int *, char **); 10145916cd2Sjpk extern const char *parse_entry(char *, size_t, const char *, const char *); 10245916cd2Sjpk 10345916cd2Sjpk /* Convert LTSNET_* to a printable string */ 10445916cd2Sjpk extern const char *tsol_strerror(int, int); 10545916cd2Sjpk 10645916cd2Sjpk /* System calls; these return -1 on error and set errno */ 10745916cd2Sjpk extern int tnrhtp(int, tsol_tpent_t *); 10845916cd2Sjpk extern int tnrh(int, tsol_rhent_t *); 10945916cd2Sjpk extern int tnmlp(int, tsol_mlpent_t *); 11045916cd2Sjpk 11145916cd2Sjpk /* 11245916cd2Sjpk * Errors that can occur in the parsing routines. Note that not all errors are 11345916cd2Sjpk * possible with every routine. Must be kept in sync with list in misc.c. 11445916cd2Sjpk */ 11545916cd2Sjpk #define LTSNET_NONE 0 /* No error */ 11645916cd2Sjpk #define LTSNET_SYSERR 1 /* System error; see errno */ 11745916cd2Sjpk #define LTSNET_EMPTY 2 /* Empty string or end of list */ 11845916cd2Sjpk #define LTSNET_ILL_ENTRY 3 /* Entry is malformed */ 11945916cd2Sjpk #define LTSNET_NO_NAME 4 /* Missing name */ 12045916cd2Sjpk #define LTSNET_NO_ATTRS 5 /* Missing template attributes */ 12145916cd2Sjpk #define LTSNET_ILL_NAME 6 /* Illegal name */ 12245916cd2Sjpk #define LTSNET_ILL_KEYDELIM 7 /* Illegal keyword delimiter */ 12345916cd2Sjpk #define LTSNET_ILL_KEY 8 /* Unknown keyword */ 12445916cd2Sjpk #define LTSNET_DUP_KEY 9 /* Duplicate keyword */ 12545916cd2Sjpk #define LTSNET_ILL_VALDELIM 10 /* Illegal value delimiter */ 12645916cd2Sjpk #define LTSNET_NO_HOSTTYPE 11 /* Missing host type */ 12745916cd2Sjpk #define LTSNET_ILL_HOSTTYPE 12 /* Illegal host type */ 12845916cd2Sjpk #define LTSNET_NO_LABEL 13 /* Missing label */ 12945916cd2Sjpk #define LTSNET_ILL_LABEL 14 /* Illegal label */ 13045916cd2Sjpk #define LTSNET_NO_RANGE 15 /* Missing label range */ 13145916cd2Sjpk #define LTSNET_ILL_RANGE 16 /* Illegal label range */ 13245916cd2Sjpk #define LTSNET_NO_LOWERBOUND 17 /* No lower bound in range */ 13345916cd2Sjpk #define LTSNET_ILL_LOWERBOUND 18 /* Illegal lower bound in range */ 13445916cd2Sjpk #define LTSNET_NO_UPPERBOUND 19 /* No upper bound in range */ 13545916cd2Sjpk #define LTSNET_ILL_UPPERBOUND 20 /* Illegal upper bound in range */ 13645916cd2Sjpk #define LTSNET_NO_DOI 21 /* Missing DOI */ 13745916cd2Sjpk #define LTSNET_ILL_DOI 22 /* Illegal DOI */ 13845916cd2Sjpk #define LTSNET_SET_TOO_BIG 23 /* Too many entries in set */ 13945916cd2Sjpk #define LTSNET_NO_ADDR 24 /* Missing address/network */ 14045916cd2Sjpk #define LTSNET_ILL_ADDR 25 /* Illegal address/network */ 14145916cd2Sjpk #define LTSNET_ILL_FLAG 26 /* Illegal flag */ 14245916cd2Sjpk #define LTSNET_ILL_MLP 27 /* Illegal MLP specification */ 14345916cd2Sjpk #define LTSNET_BAD_TYPE 28 /* Unacceptable keyword for type */ 14445916cd2Sjpk 14545916cd2Sjpk #ifdef __cplusplus 14645916cd2Sjpk } 14745916cd2Sjpk #endif 14845916cd2Sjpk 14945916cd2Sjpk #endif /* _LIBTSNET_H */ 150