xref: /netbsd-src/external/bsd/openldap/dist/include/ldif.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: ldif.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
3d11b170bStron /* $OpenLDAP$ */
42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
52de962bdSlukem  *
6*549b59edSchristos  * Copyright 1998-2021 The OpenLDAP Foundation.
72de962bdSlukem  * All rights reserved.
82de962bdSlukem  *
92de962bdSlukem  * Redistribution and use in source and binary forms, with or without
102de962bdSlukem  * modification, are permitted only as authorized by the OpenLDAP
112de962bdSlukem  * Public License.
122de962bdSlukem  *
132de962bdSlukem  * A copy of this license is available in file LICENSE in the
142de962bdSlukem  * top-level directory of the distribution or, alternatively, at
152de962bdSlukem  * <http://www.OpenLDAP.org/license.html>.
162de962bdSlukem  */
172de962bdSlukem /* Portions Copyright (c) 1996 Regents of the University of Michigan.
182de962bdSlukem  * All rights reserved.
192de962bdSlukem  *
202de962bdSlukem  * Redistribution and use in source and binary forms are permitted
212de962bdSlukem  * provided that this notice is preserved and that due credit is given
222de962bdSlukem  * to the University of Michigan at Ann Arbor. The name of the University
232de962bdSlukem  * may not be used to endorse or promote products derived from this
242de962bdSlukem  * software without specific prior written permission. This software
252de962bdSlukem  * is provided ``as is'' without express or implied warranty.
262de962bdSlukem  */
272de962bdSlukem 
282de962bdSlukem #ifndef _LDIF_H
292de962bdSlukem #define _LDIF_H
302de962bdSlukem 
312de962bdSlukem #include <ldap_cdefs.h>
322de962bdSlukem 
332de962bdSlukem LDAP_BEGIN_DECL
342de962bdSlukem 
352de962bdSlukem /* This is NOT a bogus extern declaration (unlike ldap_debug) */
362de962bdSlukem LDAP_LDIF_V (int) ldif_debug;
372de962bdSlukem 
38*549b59edSchristos #define LDIF_LINE_WIDTH      78      /* default maximum length of LDIF lines */
39d11b170bStron #define LDIF_LINE_WIDTH_MAX  ((ber_len_t)-1) /* maximum length of LDIF lines */
40d11b170bStron #define LDIF_LINE_WIDTH_WRAP(wrap) ((wrap) == 0 ? LDIF_LINE_WIDTH : (wrap))
412de962bdSlukem 
422de962bdSlukem /*
432de962bdSlukem  * Macro to calculate maximum number of bytes that the base64 equivalent
442de962bdSlukem  * of an item that is "len" bytes long will take up.  Base64 encoding
452de962bdSlukem  * uses one byte for every six bits in the value plus up to two pad bytes.
462de962bdSlukem  */
472de962bdSlukem #define LDIF_BASE64_LEN(len)	(((len) * 4 / 3 ) + 3)
482de962bdSlukem 
492de962bdSlukem /*
502de962bdSlukem  * Macro to calculate maximum size that an LDIF-encoded type (length
512de962bdSlukem  * tlen) and value (length vlen) will take up:  room for type + ":: " +
522de962bdSlukem  * first newline + base64 value + continued lines.  Each continued line
532de962bdSlukem  * needs room for a newline and a leading space character.
542de962bdSlukem  */
55*549b59edSchristos #define LDIF_SIZE_NEEDED(nlen,vlen) LDIF_SIZE_NEEDED_WRAP(nlen, vlen, 0)
562de962bdSlukem 
57d11b170bStron #define LDIF_SIZE_NEEDED_WRAP(nlen,vlen,wrap) \
58d11b170bStron     ((nlen) + 4 + LDIF_BASE64_LEN(vlen) \
59376af7d7Schristos     + ((wrap) == 0 ? ((LDIF_BASE64_LEN(vlen) + (nlen) + 3) / ( LDIF_LINE_WIDTH-1 ) * 2 ) : \
60376af7d7Schristos 	((wrap) == LDIF_LINE_WIDTH_MAX ? 0 : ((LDIF_BASE64_LEN(vlen) + (nlen) + 3) / (wrap-1) * 2 ))))
61d11b170bStron 
622de962bdSlukem LDAP_LDIF_F( int )
632de962bdSlukem ldif_parse_line LDAP_P((
642de962bdSlukem 	LDAP_CONST char *line,
652de962bdSlukem 	char **name,
662de962bdSlukem 	char **value,
672de962bdSlukem 	ber_len_t *vlen ));
682de962bdSlukem 
692de962bdSlukem LDAP_LDIF_F( int )
702de962bdSlukem ldif_parse_line2 LDAP_P((
712de962bdSlukem 	char *line,
722de962bdSlukem 	struct berval *type,
732de962bdSlukem 	struct berval *value,
742de962bdSlukem 	int *freeval ));
752de962bdSlukem 
762de962bdSlukem LDAP_LDIF_F( FILE * )
772de962bdSlukem ldif_open_url LDAP_P(( LDAP_CONST char *urlstr ));
782de962bdSlukem 
792de962bdSlukem LDAP_LDIF_F( int )
802de962bdSlukem ldif_fetch_url LDAP_P((
812de962bdSlukem 	LDAP_CONST char *line,
822de962bdSlukem 	char **value,
832de962bdSlukem 	ber_len_t *vlen ));
842de962bdSlukem 
852de962bdSlukem LDAP_LDIF_F( char * )
862de962bdSlukem ldif_getline LDAP_P(( char **next ));
872de962bdSlukem 
882de962bdSlukem LDAP_LDIF_F( int )
892de962bdSlukem ldif_countlines LDAP_P(( LDAP_CONST char *line ));
902de962bdSlukem 
912de962bdSlukem /* ldif_ropen, rclose, read_record - just for reading LDIF files,
922de962bdSlukem  * no special open/close needed to write LDIF files.
932de962bdSlukem  */
942de962bdSlukem typedef struct LDIFFP {
952de962bdSlukem 	FILE *fp;
962de962bdSlukem 	struct LDIFFP *prev;
972de962bdSlukem } LDIFFP;
982de962bdSlukem 
992de962bdSlukem LDAP_LDIF_F( LDIFFP * )
1002de962bdSlukem ldif_open LDAP_P(( LDAP_CONST char *file, LDAP_CONST char *mode ));
1012de962bdSlukem 
102*549b59edSchristos /* ldif_open equivalent that opens ldif stream in memory rather than from file */
103*549b59edSchristos LDAP_LDIF_F( LDIFFP * )
104*549b59edSchristos ldif_open_mem LDAP_P(( char *ldif, size_t size, LDAP_CONST char *mode ));
105*549b59edSchristos 
1062de962bdSlukem LDAP_LDIF_F( void )
1072de962bdSlukem ldif_close LDAP_P(( LDIFFP * ));
1082de962bdSlukem 
1092de962bdSlukem LDAP_LDIF_F( int )
1102de962bdSlukem ldif_read_record LDAP_P((
1112de962bdSlukem 	LDIFFP *fp,
112d11b170bStron 	unsigned long *lineno,
1132de962bdSlukem 	char **bufp,
1142de962bdSlukem 	int *buflen ));
1152de962bdSlukem 
1162de962bdSlukem LDAP_LDIF_F( int )
1172de962bdSlukem ldif_must_b64_encode_register LDAP_P((
1182de962bdSlukem 	LDAP_CONST char *name,
1192de962bdSlukem 	LDAP_CONST char *oid ));
1202de962bdSlukem 
1212de962bdSlukem LDAP_LDIF_F( void )
1222de962bdSlukem ldif_must_b64_encode_release LDAP_P(( void ));
1232de962bdSlukem 
1242de962bdSlukem #define LDIF_PUT_NOVALUE	0x0000	/* no value */
1252de962bdSlukem #define LDIF_PUT_VALUE		0x0001	/* value w/ auto detection */
1262de962bdSlukem #define LDIF_PUT_TEXT		0x0002	/* assume text */
1272de962bdSlukem #define	LDIF_PUT_BINARY		0x0004	/* assume binary (convert to base64) */
1282de962bdSlukem #define LDIF_PUT_B64		0x0008	/* pre-converted base64 value */
1292de962bdSlukem 
1302de962bdSlukem #define LDIF_PUT_COMMENT	0x0010	/* comment */
1312de962bdSlukem #define LDIF_PUT_URL		0x0020	/* url */
1322de962bdSlukem #define LDIF_PUT_SEP		0x0040	/* separator */
1332de962bdSlukem 
1342de962bdSlukem LDAP_LDIF_F( void )
1352de962bdSlukem ldif_sput LDAP_P((
1362de962bdSlukem 	char **out,
1372de962bdSlukem 	int type,
1382de962bdSlukem 	LDAP_CONST char *name,
1392de962bdSlukem 	LDAP_CONST char *val,
1402de962bdSlukem 	ber_len_t vlen ));
1412de962bdSlukem 
142d11b170bStron LDAP_LDIF_F( void )
143d11b170bStron ldif_sput_wrap LDAP_P((
144d11b170bStron 	char **out,
145d11b170bStron 	int type,
146d11b170bStron 	LDAP_CONST char *name,
147d11b170bStron 	LDAP_CONST char *val,
148d11b170bStron 	ber_len_t vlen,
149d11b170bStron         ber_len_t wrap ));
150d11b170bStron 
1512de962bdSlukem LDAP_LDIF_F( char * )
1522de962bdSlukem ldif_put LDAP_P((
1532de962bdSlukem 	int type,
1542de962bdSlukem 	LDAP_CONST char *name,
1552de962bdSlukem 	LDAP_CONST char *val,
1562de962bdSlukem 	ber_len_t vlen ));
1572de962bdSlukem 
158d11b170bStron LDAP_LDIF_F( char * )
159d11b170bStron ldif_put_wrap LDAP_P((
160d11b170bStron 	int type,
161d11b170bStron 	LDAP_CONST char *name,
162d11b170bStron 	LDAP_CONST char *val,
163d11b170bStron 	ber_len_t vlen,
164d11b170bStron 	ber_len_t wrap ));
165d11b170bStron 
1662de962bdSlukem LDAP_LDIF_F( int )
1672de962bdSlukem ldif_is_not_printable LDAP_P((
1682de962bdSlukem 	LDAP_CONST char *val,
1692de962bdSlukem 	ber_len_t vlen ));
1702de962bdSlukem 
1712de962bdSlukem LDAP_END_DECL
1722de962bdSlukem 
1732de962bdSlukem #endif /* _LDIF_H */
174