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