mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
ITS#6145 free/close before exit
This commit is contained in:
parent
e0bcb7b571
commit
048f24150f
@ -162,12 +162,10 @@ int
|
|||||||
main( int argc, char **argv )
|
main( int argc, char **argv )
|
||||||
{
|
{
|
||||||
char buf[ 4096 ];
|
char buf[ 4096 ];
|
||||||
FILE *fp;
|
FILE *fp = NULL;
|
||||||
LDAP *ld;
|
LDAP *ld;
|
||||||
int rc, retval;
|
int rc, retval;
|
||||||
|
|
||||||
fp = NULL;
|
|
||||||
|
|
||||||
tool_init( TOOL_DELETE );
|
tool_init( TOOL_DELETE );
|
||||||
prog = lutil_progname( "ldapdelete", argc, argv );
|
prog = lutil_progname( "ldapdelete", argc, argv );
|
||||||
|
|
||||||
@ -179,9 +177,9 @@ main( int argc, char **argv )
|
|||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ( optind >= argc ) {
|
if ( optind >= argc ) {
|
||||||
fp = stdin;
|
fp = stdin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ld = tool_conn_setup( 0, &private_conn_setup );
|
ld = tool_conn_setup( 0, &private_conn_setup );
|
||||||
@ -189,7 +187,11 @@ main( int argc, char **argv )
|
|||||||
if ( pw_file || want_bindpw ) {
|
if ( pw_file || want_bindpw ) {
|
||||||
if ( pw_file ) {
|
if ( pw_file ) {
|
||||||
rc = lutil_get_filed_password( pw_file, &passwd );
|
rc = lutil_get_filed_password( pw_file, &passwd );
|
||||||
if( rc ) return EXIT_FAILURE;
|
if( rc ) {
|
||||||
|
if ( fp && fp != stdin )
|
||||||
|
fclose( fp );
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
passwd.bv_val = getpassphrase( _("Enter LDAP Password: ") );
|
passwd.bv_val = getpassphrase( _("Enter LDAP Password: ") );
|
||||||
passwd.bv_len = passwd.bv_val ? strlen( passwd.bv_val ) : 0;
|
passwd.bv_len = passwd.bv_val ? strlen( passwd.bv_val ) : 0;
|
||||||
@ -222,6 +224,8 @@ main( int argc, char **argv )
|
|||||||
retval = rc;
|
retval = rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( fp != stdin )
|
||||||
|
fclose( fp );
|
||||||
}
|
}
|
||||||
|
|
||||||
tool_unbind( ld );
|
tool_unbind( ld );
|
||||||
|
@ -38,8 +38,8 @@
|
|||||||
* This work was originally developed by the University of Michigan
|
* This work was originally developed by the University of Michigan
|
||||||
* (as part of U-MICH LDAP). Additional significant contributors
|
* (as part of U-MICH LDAP). Additional significant contributors
|
||||||
* include:
|
* include:
|
||||||
* Kurt D. Zeilenga
|
* Kurt D. Zeilenga
|
||||||
* Juan C Gomez
|
* Juan C Gomez
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -68,11 +68,11 @@ static int remove_old_RDN = 0;
|
|||||||
|
|
||||||
|
|
||||||
static int domodrdn(
|
static int domodrdn(
|
||||||
LDAP *ld,
|
LDAP *ld,
|
||||||
char *dn,
|
char *dn,
|
||||||
char *rdn,
|
char *rdn,
|
||||||
char *newSuperior,
|
char *newSuperior,
|
||||||
int remove ); /* flag: remove old RDN */
|
int remove ); /* flag: remove old RDN */
|
||||||
|
|
||||||
void
|
void
|
||||||
usage( void )
|
usage( void )
|
||||||
@ -83,7 +83,7 @@ usage( void )
|
|||||||
fprintf( stderr, _(" If not given, the list of modifications is read from stdin or\n"));
|
fprintf( stderr, _(" If not given, the list of modifications is read from stdin or\n"));
|
||||||
fprintf( stderr, _(" from the file specified by \"-f file\" (see man page).\n"));
|
fprintf( stderr, _(" from the file specified by \"-f file\" (see man page).\n"));
|
||||||
fprintf( stderr, _("Rename options:\n"));
|
fprintf( stderr, _("Rename options:\n"));
|
||||||
fprintf( stderr, _(" -r remove old RDN\n"));
|
fprintf( stderr, _(" -r remove old RDN\n"));
|
||||||
fprintf( stderr, _(" -s newsup new superior entry\n"));
|
fprintf( stderr, _(" -s newsup new superior entry\n"));
|
||||||
tool_common_usage();
|
tool_common_usage();
|
||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
@ -127,8 +127,8 @@ handle_private_option( int i )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
case 'r': /* remove old RDN */
|
case 'r': /* remove old RDN */
|
||||||
remove_old_RDN++;
|
remove_old_RDN++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 's': /* newSuperior */
|
case 's': /* newSuperior */
|
||||||
if( protocol == LDAP_VERSION2 ) {
|
if( protocol == LDAP_VERSION2 ) {
|
||||||
@ -136,9 +136,9 @@ handle_private_option( int i )
|
|||||||
prog, protocol );
|
prog, protocol );
|
||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
}
|
}
|
||||||
newSuperior = strdup( optarg );
|
newSuperior = strdup( optarg );
|
||||||
protocol = LDAP_VERSION3;
|
protocol = LDAP_VERSION3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
@ -150,47 +150,53 @@ handle_private_option( int i )
|
|||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *entrydn = NULL, *rdn = NULL, buf[ 4096 ];
|
char *entrydn = NULL, *rdn = NULL, buf[ 4096 ];
|
||||||
FILE *fp;
|
FILE *fp = NULL;
|
||||||
LDAP *ld;
|
LDAP *ld;
|
||||||
int rc, retval, havedn;
|
int rc, retval, havedn;
|
||||||
|
|
||||||
tool_init( TOOL_MODRDN );
|
tool_init( TOOL_MODRDN );
|
||||||
prog = lutil_progname( "ldapmodrdn", argc, argv );
|
prog = lutil_progname( "ldapmodrdn", argc, argv );
|
||||||
|
|
||||||
tool_args( argc, argv );
|
tool_args( argc, argv );
|
||||||
|
|
||||||
havedn = 0;
|
havedn = 0;
|
||||||
if (argc - optind == 2) {
|
if (argc - optind == 2) {
|
||||||
if (( rdn = strdup( argv[argc - 1] )) == NULL ) {
|
if (( rdn = strdup( argv[argc - 1] )) == NULL ) {
|
||||||
perror( "strdup" );
|
perror( "strdup" );
|
||||||
return( EXIT_FAILURE );
|
retval = EXIT_FAILURE;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (( entrydn = strdup( argv[argc - 2] )) == NULL ) {
|
||||||
|
perror( "strdup" );
|
||||||
|
retval = EXIT_FAILURE;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
++havedn;
|
||||||
|
} else if ( argc - optind != 0 ) {
|
||||||
|
fprintf( stderr, _("%s: invalid number of arguments (%d), only two allowed\n"), prog, argc-optind );
|
||||||
|
usage();
|
||||||
}
|
}
|
||||||
if (( entrydn = strdup( argv[argc - 2] )) == NULL ) {
|
|
||||||
perror( "strdup" );
|
|
||||||
return( EXIT_FAILURE );
|
|
||||||
}
|
|
||||||
++havedn;
|
|
||||||
} else if ( argc - optind != 0 ) {
|
|
||||||
fprintf( stderr, _("%s: invalid number of arguments (%d), only two allowed\n"), prog, argc-optind );
|
|
||||||
usage();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( infile != NULL ) {
|
if ( infile != NULL ) {
|
||||||
if (( fp = fopen( infile, "r" )) == NULL ) {
|
if (( fp = fopen( infile, "r" )) == NULL ) {
|
||||||
perror( infile );
|
perror( infile );
|
||||||
return( EXIT_FAILURE );
|
retval = EXIT_FAILURE;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fp = stdin;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
fp = stdin;
|
|
||||||
}
|
|
||||||
|
|
||||||
ld = tool_conn_setup( 0, 0 );
|
ld = tool_conn_setup( 0, 0 );
|
||||||
|
|
||||||
if ( pw_file || want_bindpw ) {
|
if ( pw_file || want_bindpw ) {
|
||||||
if ( pw_file ) {
|
if ( pw_file ) {
|
||||||
rc = lutil_get_filed_password( pw_file, &passwd );
|
rc = lutil_get_filed_password( pw_file, &passwd );
|
||||||
if( rc ) return EXIT_FAILURE;
|
if( rc ) {
|
||||||
|
retval = EXIT_FAILURE;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
passwd.bv_val = getpassphrase( _("Enter LDAP Password: ") );
|
passwd.bv_val = getpassphrase( _("Enter LDAP Password: ") );
|
||||||
passwd.bv_len = passwd.bv_val ? strlen( passwd.bv_val ) : 0;
|
passwd.bv_len = passwd.bv_val ? strlen( passwd.bv_val ) : 0;
|
||||||
@ -201,50 +207,57 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
tool_server_controls( ld, NULL, 0 );
|
tool_server_controls( ld, NULL, 0 );
|
||||||
|
|
||||||
retval = rc = 0;
|
retval = rc = 0;
|
||||||
if (havedn)
|
if (havedn)
|
||||||
retval = domodrdn( ld, entrydn, rdn, newSuperior, remove_old_RDN );
|
retval = domodrdn( ld, entrydn, rdn, newSuperior, remove_old_RDN );
|
||||||
else while ((rc == 0 || contoper) && fgets(buf, sizeof(buf), fp) != NULL) {
|
else while ((rc == 0 || contoper) && fgets(buf, sizeof(buf), fp) != NULL) {
|
||||||
if ( *buf != '\n' ) { /* blank lines optional, skip */
|
if ( *buf != '\n' ) { /* blank lines optional, skip */
|
||||||
buf[ strlen( buf ) - 1 ] = '\0'; /* remove nl */
|
buf[ strlen( buf ) - 1 ] = '\0'; /* remove nl */
|
||||||
|
|
||||||
if ( havedn ) { /* have DN, get RDN */
|
if ( havedn ) { /* have DN, get RDN */
|
||||||
if (( rdn = strdup( buf )) == NULL ) {
|
if (( rdn = strdup( buf )) == NULL ) {
|
||||||
perror( "strdup" );
|
perror( "strdup" );
|
||||||
return( EXIT_FAILURE );
|
retval = EXIT_FAILURE;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
rc = domodrdn(ld, entrydn, rdn, newSuperior, remove_old_RDN );
|
||||||
|
if ( rc != 0 )
|
||||||
|
retval = rc;
|
||||||
|
havedn = 0;
|
||||||
|
free( rdn ); rdn = NULL;
|
||||||
|
free( entrydn ); entrydn = NULL;
|
||||||
|
} else if ( !havedn ) { /* don't have DN yet */
|
||||||
|
if (( entrydn = strdup( buf )) == NULL ) {
|
||||||
|
retval = EXIT_FAILURE;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
++havedn;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rc = domodrdn(ld, entrydn, rdn, newSuperior, remove_old_RDN );
|
|
||||||
if ( rc != 0 )
|
|
||||||
retval = rc;
|
|
||||||
havedn = 0;
|
|
||||||
} else if ( !havedn ) { /* don't have DN yet */
|
|
||||||
if (( entrydn = strdup( buf )) == NULL ) {
|
|
||||||
perror( "strdup" );
|
|
||||||
return( EXIT_FAILURE );
|
|
||||||
}
|
|
||||||
++havedn;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tool_unbind( ld );
|
tool_unbind( ld );
|
||||||
tool_destroy();
|
tool_destroy();
|
||||||
return( retval );
|
fail:
|
||||||
|
if ( fp && fp != stdin ) fclose( fp );
|
||||||
|
if ( entrydn ) free( entrydn );
|
||||||
|
if ( rdn ) free( rdn );
|
||||||
|
return( retval );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int domodrdn(
|
static int domodrdn(
|
||||||
LDAP *ld,
|
LDAP *ld,
|
||||||
char *dn,
|
char *dn,
|
||||||
char *rdn,
|
char *rdn,
|
||||||
char *newSuperior,
|
char *newSuperior,
|
||||||
int remove ) /* flag: remove old RDN */
|
int remove ) /* flag: remove old RDN */
|
||||||
{
|
{
|
||||||
int rc, code, id;
|
int rc, code, id;
|
||||||
char *matcheddn=NULL, *text=NULL, **refs=NULL;
|
char *matcheddn=NULL, *text=NULL, **refs=NULL;
|
||||||
LDAPControl **ctrls = NULL;
|
LDAPControl **ctrls = NULL;
|
||||||
LDAPMessage *res;
|
LDAPMessage *res;
|
||||||
|
|
||||||
if ( verbose ) {
|
if ( verbose ) {
|
||||||
printf( _("Renaming \"%s\"\n"), dn );
|
printf( _("Renaming \"%s\"\n"), dn );
|
||||||
printf( _("\tnew rdn=\"%s\" (%s old rdn)\n"),
|
printf( _("\tnew rdn=\"%s\" (%s old rdn)\n"),
|
||||||
rdn, remove ? _("delete") : _("keep") );
|
rdn, remove ? _("delete") : _("keep") );
|
||||||
@ -318,7 +331,7 @@ static int domodrdn(
|
|||||||
if (ctrls) {
|
if (ctrls) {
|
||||||
tool_print_ctrls( ld, ctrls );
|
tool_print_ctrls( ld, ctrls );
|
||||||
ldap_controls_free( ctrls );
|
ldap_controls_free( ctrls );
|
||||||
}
|
}
|
||||||
|
|
||||||
ber_memfree( text );
|
ber_memfree( text );
|
||||||
ber_memfree( matcheddn );
|
ber_memfree( matcheddn );
|
||||||
|
Loading…
Reference in New Issue
Block a user