X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibrewrite%2Frewrite.c;h=621a6f213f0490dca6c288e60623afea61da1036;hb=c3e28a5488a8011ef0352f48fca85c48679205ba;hp=927e1e382c6db330de2bf2f3959c01cf80cceece;hpb=fbba83b20f3a645b2dc19b8ec4a0026f71f5b15c;p=openldap diff --git a/libraries/librewrite/rewrite.c b/libraries/librewrite/rewrite.c index 927e1e382c..621a6f213f 100644 --- a/libraries/librewrite/rewrite.c +++ b/libraries/librewrite/rewrite.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2003 The OpenLDAP Foundation. + * Copyright 2000-2007 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,12 +30,14 @@ #include #include +#include +#include int ldap_debug; int ldap_syslog; int ldap_syslog_level; -char * +static void apply( FILE *fin, const char *rewriteContext, @@ -57,11 +59,14 @@ apply( rewrite_session_init( info, cookie ); - string = strdup( arg ); + string = (char *)arg; for ( sep = strchr( rewriteContext, ',' ); rewriteContext != NULL; rewriteContext = sep, - sep ? sep = strchr( rewriteContext, ',' ) : NULL ) { + sep ? sep = strchr( rewriteContext, ',' ) : NULL ) + { + char *errmsg = ""; + if ( sep != NULL ) { sep[ 0 ] = '\0'; sep++; @@ -70,38 +75,76 @@ apply( rc = rewrite_session( info, rewriteContext, string, cookie, &result ); - fprintf( stdout, "%s -> %s\n", string, - ( result ? result : "unwilling to perform" ) ); + switch ( rc ) { + case REWRITE_REGEXEC_OK: + errmsg = "ok"; + break; + + case REWRITE_REGEXEC_ERR: + errmsg = "error"; + break; + + case REWRITE_REGEXEC_STOP: + errmsg = "stop"; + break; + + case REWRITE_REGEXEC_UNWILLING: + errmsg = "unwilling to perform"; + break; + + default: + if (rc >= REWRITE_REGEXEC_USER) { + errmsg = "user-defined"; + } else { + errmsg = "unknown"; + } + break; + } + + fprintf( stdout, "%s -> %s [%d:%s]\n", string, + ( result ? result : "(null)" ), + rc, errmsg ); if ( result == NULL ) { break; } - free( string ); + if ( string != arg && string != result ) { + free( string ); + } string = result; } - free( string ); + if ( result && result != arg ) { + free( result ); + } rewrite_session_delete( info, cookie ); rewrite_info_delete( &info ); - - return result; } int main( int argc, char *argv[] ) { - FILE *fin = NULL; - char *rewriteContext = REWRITE_DEFAULT_CONTEXT; + FILE *fin = NULL; + char *rewriteContext = REWRITE_DEFAULT_CONTEXT; + int debug = 0; while ( 1 ) { - int opt = getopt( argc, argv, "f:hr:" ); + int opt = getopt( argc, argv, "d:f:hr:" ); if ( opt == EOF ) { break; } switch ( opt ) { + case 'd': + if ( lutil_atoi( &debug, optarg ) != 0 ) { + fprintf( stderr, "illegal log level '%s'\n", + optarg ); + exit( EXIT_FAILURE ); + } + break; + case 'f': fin = fopen( optarg, "r" ); if ( fin == NULL ) { @@ -132,6 +175,11 @@ main( int argc, char *argv[] ) } } + if ( debug != 0 ) { + ber_set_option(NULL, LBER_OPT_DEBUG_LEVEL, &debug); + ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &debug); + } + if ( optind >= argc ) { return -1; }