static int shell_cf( ConfigArgs *c ) { struct shellinfo *si = (struct shellinfo *) c->be->be_private; char ***arr = &si->si_bind; if ( c->op == SLAP_CONFIG_EMIT ) { struct berval bv; if ( !arr[c->type] ) return 1; bv.bv_val = ldap_charray2str( arr[c->type], " " ); bv.bv_len = strlen( bv.bv_val ); ber_bvarray_add( &c->rvalue_vals, &bv ); } else if ( c->op == LDAP_MOD_DELETE ) { ldap_charray_free( arr[c->type] ); arr[c->type] = NULL; } else { arr[c->type] = ldap_charray_dup( &c->argv[1] ); } return 0; }
int main( int argc, char **argv ) { char *filtpattern, **attrs; int rc, optind, i, first, free_filtpattern; LDAP *ld; #ifdef SOLARIS_LDAP_CMD char *locale = setlocale(LC_ALL, ""); textdomain(TEXT_DOMAIN); ldaptool_require_binddn = 0; #endif /* SOLARIS_LDAP_CMD */ free_filtpattern = 0; deref = LDAP_DEREF_NEVER; allow_binary = vals2tmp = attrsonly = 0; minimize_base64 = produce_file_urls = 0; ldif = 1; fold = 1; sizelimit = timelimit = 0; scope = LDAP_SCOPE_SUBTREE; server_sort = 0; #ifdef notdef #ifdef HPUX11 #ifndef __LP64__ _main( argc, argv); #endif /* __LP64_ */ #endif /* HPUX11 */ #endif ldaptool_reset_control_array( ldaptool_request_ctrls ); #ifdef HAVE_SASL_OPTIONS #ifdef SOLARIS_LDAP_CMD optind = ldaptool_process_args( argc, argv, "ABLTU1etuxra:b:F:G:l:S:s:z:C:", 0, options_callback ); #else optind = ldaptool_process_args( argc, argv, "ABLTU1etuxa:b:F:G:l:S:s:z:C:c:", 0, options_callback ); #endif /* SOLARIS_LDAP_CMD */ #else optind = ldaptool_process_args( argc, argv, "ABLTU1eotuxa:b:F:G:l:S:s:z:C:c:", 0, options_callback ); #endif /* HAVE_SASL_OPTIONS */ if ( optind == -1 ) { usage(); } if ( base == NULL ) { if (( base = getenv( "LDAP_BASEDN" )) == NULL ) { usage(); } } if ( sortattr ) { for ( sortsize = 0; sortattr[sortsize] != NULL; sortsize++ ) { ; /* NULL */ } sortsize++; /* add in the final NULL field */ skipsortattr = (int *) malloc( sortsize * sizeof(int *) ); if ( skipsortattr == NULL ) { fprintf( stderr, gettext("Out of memory\n") ); exit( LDAP_NO_MEMORY ); } memset( (char *) skipsortattr, 0, sortsize * sizeof(int *) ); } else if ( server_sort ) { server_sort = 0; /* ignore this option if no sortattrs were given */ } if ( argc - optind < 1 ) { if ( ldaptool_fp == NULL ) { usage(); } attrs = NULL; filtpattern = "%s"; } else { /* there are additional args (filter + attrs) */ if ( ldaptool_fp == NULL || strstr( argv[ optind ], "%s" ) != NULL ) { filtpattern = ldaptool_local2UTF8( argv[ optind ] ); /* since local2UTF8 always allocates something, we should free it */ free_filtpattern = 1; ++optind; } else { filtpattern = "%s"; } if ( argv[ optind ] == NULL ) { attrs = NULL; } else if ( sortattr == NULL || *sortattr == '\0' || server_sort) { attrs = &argv[ optind ]; } else { attrs = ldap_charray_dup( &argv[ optind ] ); if ( attrs == NULL ) { fprintf( stderr, gettext("Out of memory\n") ); exit( LDAP_NO_MEMORY ); } for ( i = 0; i < (sortsize - 1); i++ ) { if ( !ldap_charray_inlist( attrs, sortattr[i] ) ) { if ( ldap_charray_add( &attrs, sortattr[i] ) != 0 ) { fprintf( stderr, gettext("Out of memory\n") ); exit( LDAP_NO_MEMORY ); } /* * attribute in the search list only for the purpose of * sorting */ skipsortattr[i] = 1; } } } } ld = ldaptool_ldap_init( 0 ); if ( !ldaptool_not ) { ldap_set_option( ld, LDAP_OPT_DEREF, &deref ); ldap_set_option( ld, LDAP_OPT_TIMELIMIT, &timelimit ); ldap_set_option( ld, LDAP_OPT_SIZELIMIT, &sizelimit ); } ldaptool_bind( ld ); if ( ldaptool_verbose ) { printf( gettext("filter pattern: %s\nreturning: "), filtpattern ); if ( attrs == NULL ) { printf( gettext("ALL") ); } else { for ( i = 0; attrs[ i ] != NULL; ++i ) { printf( "%s ", attrs[ i ] ); } } putchar( '\n' ); } if ( ldaptool_fp == NULL ) { char *conv; conv = ldaptool_local2UTF8( base ); rc = dosearch( ld, conv, scope, attrs, attrsonly, filtpattern, "" ); if( conv != NULL ) free( conv ); } else { int done = 0; rc = LDAP_SUCCESS; first = 1; while ( rc == LDAP_SUCCESS && !done ) { char *linep = NULL; int increment = 0; int c, index; /* allocate initial block of memory */ if ((linep = (char *)malloc(BUFSIZ)) == NULL) { fprintf( stderr, gettext("Out of memory\n") ); exit( LDAP_NO_MEMORY ); } increment++; index = 0; while ((c = fgetc( ldaptool_fp )) != '\n' && c != EOF) { /* check if we will overflow the buffer */ if ((c != EOF) && (index == ((increment * BUFSIZ) -1))) { /* if we did, add another BUFSIZ worth of bytes */ if ((linep = (char *) realloc(linep, (increment + 1) * BUFSIZ)) == NULL) { fprintf( stderr, gettext("Out of memory\n") ); exit( LDAP_NO_MEMORY ); } increment++; } linep[index++] = c; } if (c == EOF) { done = 1; break; } linep[index] = '\0'; if ( !first ) { putchar( '\n' ); } else { first = 0; } rc = dosearch( ld, base, scope, attrs, attrsonly, filtpattern, linep ); free (linep); } } ldaptool_cleanup( ld ); if (free_filtpattern != 0 && filtpattern != NULL) { free (filtpattern); } /* check for and report output error */ fflush( stdout ); rc = ldaptool_check_ferror( stdout, rc, gettext("output error (output might be incomplete)") ); return( rc ); }
static Slapi_PBlock * plugin_pblock_new( int type, int argc, char *argv[] ) { Slapi_PBlock *pPlugin = NULL; Slapi_PluginDesc *pPluginDesc = NULL; lt_dlhandle hdLoadHandle; int rc; char **av2 = NULL, **ppPluginArgv; char *path = argv[2]; char *initfunc = argv[3]; pPlugin = slapi_pblock_new(); if ( pPlugin == NULL ) { rc = LDAP_NO_MEMORY; goto done; } slapi_pblock_set( pPlugin, SLAPI_PLUGIN_TYPE, (void *)&type ); slapi_pblock_set( pPlugin, SLAPI_PLUGIN_ARGC, (void *)&argc ); av2 = ldap_charray_dup( argv ); if ( av2 == NULL ) { rc = LDAP_NO_MEMORY; goto done; } if ( argc > 0 ) { ppPluginArgv = &av2[4]; } else { ppPluginArgv = NULL; } slapi_pblock_set( pPlugin, SLAPI_PLUGIN_ARGV, (void *)ppPluginArgv ); slapi_pblock_set( pPlugin, SLAPI_X_CONFIG_ARGV, (void *)av2 ); rc = slapi_int_load_plugin( pPlugin, path, initfunc, 1, NULL, &hdLoadHandle ); if ( rc != 0 ) { goto done; } if ( slapi_pblock_get( pPlugin, SLAPI_PLUGIN_DESCRIPTION, (void **)&pPluginDesc ) == 0 && pPluginDesc != NULL ) { slapi_log_error(SLAPI_LOG_TRACE, "plugin_pblock_new", "Registered plugin %s %s [%s] (%s)\n", pPluginDesc->spd_id, pPluginDesc->spd_version, pPluginDesc->spd_vendor, pPluginDesc->spd_description); } done: if ( rc != 0 && pPlugin != NULL ) { slapi_pblock_destroy( pPlugin ); pPlugin = NULL; if ( av2 != NULL ) { ldap_charray_free( av2 ); } } return pPlugin; }
int shell_back_db_config( BackendDB *be, const char *fname, int lineno, int argc, char **argv ) { struct shellinfo *si = (struct shellinfo *) be->be_private; if ( si == NULL ) { fprintf( stderr, "%s: line %d: shell backend info is null!\n", fname, lineno ); return( 1 ); } /* command + args to exec for binds */ if ( strcasecmp( argv[0], "bind" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"bind <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_bind = ldap_charray_dup( &argv[1] ); /* command + args to exec for unbinds */ } else if ( strcasecmp( argv[0], "unbind" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"unbind <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_unbind = ldap_charray_dup( &argv[1] ); /* command + args to exec for searches */ } else if ( strcasecmp( argv[0], "search" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"search <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_search = ldap_charray_dup( &argv[1] ); /* command + args to exec for compares */ } else if ( strcasecmp( argv[0], "compare" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"compare <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_compare = ldap_charray_dup( &argv[1] ); /* command + args to exec for modifies */ } else if ( strcasecmp( argv[0], "modify" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"modify <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_modify = ldap_charray_dup( &argv[1] ); /* command + args to exec for modrdn */ } else if ( strcasecmp( argv[0], "modrdn" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"modrdn <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_modrdn = ldap_charray_dup( &argv[1] ); /* command + args to exec for add */ } else if ( strcasecmp( argv[0], "add" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"add <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_add = ldap_charray_dup( &argv[1] ); /* command + args to exec for delete */ } else if ( strcasecmp( argv[0], "delete" ) == 0 ) { if ( argc < 2 ) { fprintf( stderr, "%s: line %d: missing executable in \"delete <executable>\" line\n", fname, lineno ); return( 1 ); } si->si_delete = ldap_charray_dup( &argv[1] ); /* anything else */ } else { return SLAP_CONF_UNKNOWN; } return 0; }