openldap/servers/slapd/tools/ldif.c

104 lines
1.9 KiB
C
Raw Normal View History

/* $OpenLDAP$ */
/*
* Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
1998-10-25 09:41:42 +08:00
#include "portable.h"
1998-08-09 08:43:13 +08:00
#include <stdio.h>
1999-06-03 08:37:44 +08:00
#include <ac/stdlib.h>
1998-10-25 09:41:42 +08:00
#include <ac/string.h>
#include <ac/socket.h>
1999-06-03 08:37:44 +08:00
#include <ac/unistd.h>
1998-10-25 09:41:42 +08:00
#ifdef HAVE_IO_H
#include <io.h>
#endif
#include <ldap.h>
1998-08-09 08:43:13 +08:00
#include "ldif.h"
static void
usage( char *name )
1998-08-09 08:43:13 +08:00
{
fprintf( stderr, "usage: %s [-b] <attrtype>\n", name );
exit( EXIT_FAILURE );
1998-08-09 08:43:13 +08:00
}
int
main( int argc, char **argv )
1998-08-09 08:43:13 +08:00
{
char buf[BUFSIZ];
char *type, *out;
int len, binary = 0;
1998-08-09 08:43:13 +08:00
if (argc < 2 || argc > 3 ) {
usage( argv[0] );
}
if ( argc == 3 ) {
if ( strcmp( argv[1], "-b" ) != 0 ) {
usage( argv[0] );
}
1999-09-06 12:42:20 +08:00
binary = 1;
type = argv[2];
1998-08-09 08:43:13 +08:00
} else {
if ( strcmp( argv[1], "-b" ) == 0 ) {
usage( argv[0] );
}
type = argv[1];
}
/* if the -b flag was used, read single binary value from stdin */
if ( binary ) {
char *val;
int nread, max, cur;
if (( val = (char *) malloc( BUFSIZ )) == NULL ) {
perror( "malloc" );
return EXIT_FAILURE;
1998-08-09 08:43:13 +08:00
}
max = BUFSIZ;
cur = 0;
while ( (nread = read( 0, buf, BUFSIZ )) != 0 ) {
if ( nread + cur > max ) {
max += BUFSIZ;
if (( val = (char *) realloc( val, max )) ==
NULL ) {
perror( "realloc" );
return EXIT_FAILURE;
1998-08-09 08:43:13 +08:00
}
}
memcpy( val + cur, buf, nread );
cur += nread;
}
if (( out = ldif_put( LDIF_PUT_BINARY, type, val, cur )) == NULL ) {
perror( "ldif_type_and_value" );
return EXIT_FAILURE;
1998-08-09 08:43:13 +08:00
}
fputs( out, stdout );
1999-06-03 08:37:44 +08:00
ber_memfree( out );
1998-08-09 08:43:13 +08:00
free( val );
return EXIT_SUCCESS;
1998-08-09 08:43:13 +08:00
}
/* not binary: one value per line... */
while ( fgets( buf, sizeof(buf), stdin ) != NULL ) {
if( buf[len=strlen(buf)] == '\n') buf[len] = '\0';
if (( out = ldif_put( LDIF_PUT_VALUE, type, buf, strlen( buf ) ))
1998-08-09 08:43:13 +08:00
== NULL ) {
perror( "ldif_type_and_value" );
return EXIT_FAILURE;
1998-08-09 08:43:13 +08:00
}
fputs( out, stdout );
1999-06-03 08:37:44 +08:00
ber_memfree( out );
1998-08-09 08:43:13 +08:00
}
return EXIT_SUCCESS;
1998-08-09 08:43:13 +08:00
}