X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fetest.c;h=d5ad1d31ad6df9bf5c18f570eebfe854f496da72;hb=f2958fe7ef5185f879aab3fd057717733f9635b3;hp=66ae72d585204741647835d737f47a81ecce426f;hpb=dc07e765f263ef459dcd2afd1ece01cfc85a0edd;p=openldap diff --git a/libraries/liblber/etest.c b/libraries/liblber/etest.c index 66ae72d585..d5ad1d31ad 100644 --- a/libraries/liblber/etest.c +++ b/libraries/liblber/etest.c @@ -1,17 +1,39 @@ -/* test.c - lber encoding test program */ -/* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* etest.c - lber encoding test program */ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2012 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ -/* Portions - * Copyright (c) 1990 Regents of the University of Michigan. +/* Portions Copyright (c) 1990 Regents of the University of Michigan. * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that this notice is preserved and that due credit is given + * to the University of Michigan at Ann Arbor. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. This software + * is provided ``as is'' without express or implied warranty. + */ +/* ACKNOWLEDGEMENTS: + * This work was originally developed by the University of Michigan + * (as part of U-MICH LDAP). */ #include "portable.h" #include +#include + #include #include #include @@ -20,31 +42,43 @@ #include #endif /* HAVE_CONSOLE_H */ -#include +#include "lber.h" -static void usage( char *name ) +static void usage( const char *name ) { fprintf( stderr, "usage: %s fmtstring\n", name ); } +static char* getbuf( void ) { + char *p; + static char buf[1024]; + + if ( fgets( buf, sizeof(buf), stdin ) == NULL ) return NULL; + + if ( (p = strchr( buf, '\n' )) != NULL ) *p = '\0'; + + return buf; +} + int main( int argc, char **argv ) { -#ifdef notdef - int i, len; - char *s, *p; -#endif - int fd, num; - Seqorset *sos = NULL; + char *s; + int tag; + + int fd, rc; BerElement *ber; Sockbuf *sb; + /* enable debugging */ + int ival = -1; + ber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &ival ); + if ( argc < 2 ) { usage( argv[0] ); - exit( 1 ); + return( EXIT_FAILURE ); } - #ifdef HAVE_CONSOLE_H ccommand( &argv ); cshow( stdout ); @@ -52,131 +86,96 @@ main( int argc, char **argv ) if (( fd = open( "lber-test", O_WRONLY|O_CREAT|O_TRUNC|O_BINARY )) < 0 ) { perror( "open" ); - exit( 1 ); + return( EXIT_FAILURE ); } + #else fd = fileno(stdout); -#endif /* MACOS */ +#endif - sb = ber_sockbuf_alloc_fd( fd); + sb = ber_sockbuf_alloc(); + ber_sockbuf_add_io( sb, &ber_sockbuf_io_fd, LBER_SBIOD_LEVEL_PROVIDER, + (void *)&fd ); if( sb == NULL ) { - perror( "lber_sockbuf_alloc_fd" ); - exit( 1 ); + perror( "ber_sockbuf_alloc_fd" ); + return( EXIT_FAILURE ); } if ( (ber = ber_alloc_t( LBER_USE_DER )) == NULL ) { perror( "ber_alloc" ); - exit( 1 ); + return( EXIT_FAILURE ); } -#ifndef notdef - num = 7; - if ( ber_printf( ber, "{ti}", 0x1f44, num ) == -1 ) { - fprintf( stderr, "ber_printf returns -1" ); - exit( 1 ); + fprintf(stderr, "encode: start\n" ); + if( ber_printf( ber, "{" /*}*/ ) ) { + perror( "ber_printf {" /*}*/ ); + return( EXIT_FAILURE ); } -#else for ( s = argv[1]; *s; s++ ) { - if ( fgets( buf, sizeof(buf), stdin ) == NULL ) - break; - if ( (p = strchr( buf, '\n' )) != NULL ) - *p = '\0'; + char *buf; + char fmt[2]; + + fmt[0] = *s; + fmt[1] = '\0'; + fprintf(stderr, "encode: %s\n", fmt ); switch ( *s ) { case 'i': /* int */ case 'b': /* boolean */ - i = atoi( buf ); - if ( ber_printf( ber, "i", i ) == -1 ) { - fprintf( stderr, "ber_printf i\n" ); - exit( 1 ); - } - break; - case 'e': /* enumeration */ - i = va_arg( ap, int ); - rc = ber_put_enum( ber, i, (char)ber->ber_tag ); + buf = getbuf(); + rc = ber_printf( ber, fmt, atoi(buf) ); break; case 'n': /* null */ - rc = ber_put_null( ber, (char)ber->ber_tag ); + case '{': /* begin sequence */ + case '}': /* end sequence */ + case '[': /* begin set */ + case ']': /* end set */ + rc = ber_printf( ber, fmt ); break; case 'o': /* octet string (non-null terminated) */ - s = va_arg( ap, char * ); - len = va_arg( ap, int ); - rc = ber_put_ostring( ber, s, len, (char)ber->ber_tag ); + case 'B': /* bit string */ + buf = getbuf(); + rc = ber_printf( ber, fmt, buf, strlen(buf) ); break; case 's': /* string */ - s = va_arg( ap, char * ); - rc = ber_put_string( ber, s, (char)ber->ber_tag ); + buf = getbuf(); + rc = ber_printf( ber, fmt, buf ); break; - - case 'B': /* bit string */ - s = va_arg( ap, char * ); - len = va_arg( ap, int ); /* in bits */ - rc = ber_put_bitstring( ber, s, len, (char)ber->ber_tag ); - break; - case 't': /* tag for the next element */ - ber->ber_tag = va_arg( ap, int ); - ber->ber_usertag = 1; - break; - - case 'v': /* vector of strings */ - if ( (ss = va_arg( ap, char ** )) == NULL ) - break; - for ( i = 0; ss[i] != NULL; i++ ) { - if ( (rc = ber_put_string( ber, ss[i], - (char)ber->ber_tag )) == -1 ) - break; - } - break; - - case 'V': /* sequences of strings + lengths */ - if ( (bv = va_arg( ap, struct berval ** )) == NULL ) - break; - for ( i = 0; bv[i] != NULL; i++ ) { - if ( (rc = ber_put_ostring( ber, bv[i]->bv_val, - bv[i]->bv_len, (char)ber->ber_tag )) == -1 ) - break; - } - break; - - case '{': /* begin sequence */ - rc = ber_start_seq( ber, (char)ber->ber_tag ); - break; - - case '}': /* end sequence */ - rc = ber_put_seqorset( ber ); - break; - - case '[': /* begin set */ - rc = ber_start_set( ber, (char)ber->ber_tag ); - break; - - case ']': /* end set */ - rc = ber_put_seqorset( ber ); + buf = getbuf(); + tag = atoi(buf); + rc = ber_printf( ber, fmt, tag ); break; default: -#ifdef LDAP_LIBUI - fprintf( stderr, "unknown fmt %c\n", *fmt ); -#endif /* LDAP_LIBUI */ + fprintf( stderr, "encode: unknown fmt %c\n", *fmt ); rc = -1; break; } + + if( rc == -1 ) { + perror( "ber_printf" ); + return( EXIT_FAILURE ); } } -#endif - if ( ber_flush( sb, ber, 1 ) == -1 ) { - perror( "ber_flush" ); - exit( 1 ); + fprintf(stderr, "encode: end\n" ); + if( ber_printf( ber, /*{*/ "N}" ) == -1 ) { + perror( /*{*/ "ber_printf }" ); + return( EXIT_FAILURE ); + } + + if ( ber_flush2( sb, ber, LBER_FLUSH_FREE_ALWAYS ) == -1 ) { + perror( "ber_flush2" ); + return( EXIT_FAILURE ); } ber_sockbuf_free( sb ); - return( 0 ); + return( EXIT_SUCCESS ); }