X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=clients%2Ftools%2Fldapmodrdn.c;h=4c77b6fbeded977bcf677ea7422867e531268501;hb=9bc2cd3987b0bf5b86c2b9be417d7119f2e9d623;hp=0d7ba818bbe1fc6d5aaf841c4435fa5be638f8c9;hpb=78f9fb45d41cd62fdfe9382c674d8fe680b4c17e;p=openldap diff --git a/clients/tools/ldapmodrdn.c b/clients/tools/ldapmodrdn.c index 0d7ba818bb..4c77b6fbed 100644 --- a/clients/tools/ldapmodrdn.c +++ b/clients/tools/ldapmodrdn.c @@ -1,22 +1,48 @@ +/* ldapmodrdn.c - generic program to modify an entry's RDN using LDAP */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file - */ -/* ldapmodrdn.c - generic program to modify an entry's RDN using LDAP. +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2006 The OpenLDAP Foundation. + * Portions Copyright 1998-2003 Kurt D. Zeilenga. + * Portions Copyright 1998-2001 Net Boolean Incorporated. + * Portions Copyright 2001-2003 IBM Corporation. + * 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. * - * Support for MODIFYDN REQUEST V3 (newSuperior) by: - * - * Copyright 1999, Juan C. Gomez, All rights reserved. + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ +/* Portions Copyright 1999, Juan C. Gomez, All rights reserved. * This software is not subject to any license of Silicon Graphics * Inc. or Purdue University. * * Redistribution and use in source and binary forms are permitted * without restriction or fee of any kind as long as this notice * is preserved. + */ +/* Portions Copyright (c) 1992-1996 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). Additional significant contributors + * include: + * Kurt D. Zeilenga + * Juan C Gomez */ + #include "portable.h" #include @@ -26,6 +52,7 @@ #include #include #include +#include #include #include "lutil.h" @@ -34,10 +61,6 @@ #include "common.h" -#define _OLV_APP "ldapmodrdn" -#define _OLV_STATIC -#include "ol_version.h" - static char *newSuperior = NULL; static int remove_old_RDN = 0; @@ -53,23 +76,21 @@ static int domodrdn( void usage( void ) { - fprintf( stderr, -"Rename LDAP entries\n\n" -"usage: %s [options] [dn rdn]\n" -" dn rdn: If given, rdn will replace the RDN of the entry specified by DN\n" -" If not given, the list of modifications is read from stdin or\n" -" from the file specified by \"-f file\" (see man page).\n" -"Rename options:\n" -" -r remove old RDN\n" -" -s newsup new superior entry\n" - , prog ); + fprintf( stderr, _("Rename LDAP entries\n\n")); + fprintf( stderr, _("usage: %s [options] [dn rdn]\n"), prog); + fprintf( stderr, _(" dn rdn: If given, rdn will replace the RDN of the entry specified by DN\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, _("Rename options:\n")); + fprintf( stderr, _(" -r remove old RDN\n")); + fprintf( stderr, _(" -s newsup new superior entry\n")); tool_common_usage(); exit( EXIT_FAILURE ); } const char options[] = "rs:" - "cCd:D:e:f:h:H:IkKMnO:p:P:QR:U:vVw:WxX:y:Y:Z"; + "cd:D:e:f:h:H:IkKMnO:p:P:QR:U:vVw:WxX:y:Y:Z"; int handle_private_option( int i ) @@ -78,9 +99,9 @@ handle_private_option( int i ) #if 0 int crit; char *control, *cvalue; - case 'E': /* modrdn controls */ + case 'E': /* modrdn extensions */ if( protocol == LDAP_VERSION2 ) { - fprintf( stderr, "%s: -E incompatible with LDAPv%d\n", + fprintf( stderr, _("%s: -E incompatible with LDAPv%d\n"), prog, version ); exit( EXIT_FAILURE ); } @@ -100,7 +121,7 @@ handle_private_option( int i ) if ( (cvalue = strchr( control, '=' )) != NULL ) { *cvalue++ = '\0'; } - fprintf( stderr, "Invalid modrdn control name: %s\n", control ); + fprintf( stderr, _("Invalid modrdn extension name: %s\n"), control ); usage(); #endif @@ -110,7 +131,7 @@ handle_private_option( int i ) case 's': /* newSuperior */ if( protocol == LDAP_VERSION2 ) { - fprintf( stderr, "%s: -X incompatible with LDAPv%d\n", + fprintf( stderr, _("%s: -X incompatible with LDAPv%d\n"), prog, protocol ); exit( EXIT_FAILURE ); } @@ -133,6 +154,7 @@ main(int argc, char **argv) LDAP *ld; int rc, retval, havedn; + tool_init( TOOL_MODRDN ); prog = lutil_progname( "ldapmodrdn", argc, argv ); tool_args( argc, argv ); @@ -149,8 +171,7 @@ main(int argc, char **argv) } ++havedn; } else if ( argc - optind != 0 ) { - fprintf( stderr, "%s: invalid number of arguments (%d), " - "only two allowed\n", prog, argc-optind ); + fprintf( stderr, _("%s: invalid number of arguments (%d), only two allowed\n"), prog, argc-optind ); usage(); } @@ -170,21 +191,20 @@ main(int argc, char **argv) rc = lutil_get_filed_password( pw_file, &passwd ); if( rc ) return EXIT_FAILURE; } 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; } } tool_bind( ld ); - if ( authzid || manageDSAit || noop ) - tool_server_controls( ld, NULL, 0 ); + tool_server_controls( ld, NULL, 0 ); retval = rc = 0; if (havedn) retval = domodrdn( ld, entrydn, rdn, newSuperior, remove_old_RDN ); else while ((rc == 0 || contoper) && fgets(buf, sizeof(buf), fp) != NULL) { - if ( *buf != '\0' ) { /* blank lines optional, skip */ + if ( *buf != '\n' ) { /* blank lines optional, skip */ buf[ strlen( buf ) - 1 ] = '\0'; /* remove nl */ if ( havedn ) { /* have DN, get RDN */ @@ -206,8 +226,8 @@ main(int argc, char **argv) } } - ldap_unbind( ld ); - + tool_unbind( ld ); + tool_destroy(); return( retval ); } @@ -223,15 +243,15 @@ static int domodrdn( LDAPMessage *res; if ( verbose ) { - printf( "Renaming \"%s\"\n", dn ); - printf( "\tnew rdn=\"%s\" (%s old rdn)\n", - rdn, remove ? "delete" : "keep" ); + printf( _("Renaming \"%s\"\n"), dn ); + printf( _("\tnew rdn=\"%s\" (%s old rdn)\n"), + rdn, remove ? _("delete") : _("keep") ); if( newSuperior != NULL ) { - printf("\tnew parent=\"%s\"\n", newSuperior); + printf(_("\tnew parent=\"%s\"\n"), newSuperior); } } - if( not ) return LDAP_SUCCESS; + if( dont ) return LDAP_SUCCESS; rc = ldap_rename( ld, dn, rdn, newSuperior, remove, NULL, NULL, &id ); @@ -242,10 +262,25 @@ static int domodrdn( return rc; } - rc = ldap_result( ld, LDAP_RES_ANY, LDAP_MSG_ALL, NULL, &res ); - if ( rc < 0 ) { - ldap_perror( ld, "ldapmodrdn: ldap_result" ); - return rc; + for ( ; ; ) { + struct timeval tv = { 0, 0 }; + + if ( tool_check_abandon( ld, id ) ) { + return LDAP_CANCELLED; + } + + tv.tv_sec = 0; + tv.tv_usec = 100000; + + rc = ldap_result( ld, LDAP_RES_ANY, LDAP_MSG_ALL, &tv, &res ); + if ( rc < 0 ) { + tool_perror( "ldap_result", rc, NULL, NULL, NULL, NULL ); + return rc; + } + + if ( rc != 0 ) { + break; + } } rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, NULL, 1 ); @@ -259,21 +294,21 @@ static int domodrdn( if( verbose || code != LDAP_SUCCESS || (matcheddn && *matcheddn) || (text && *text) || (refs && *refs) ) { - printf( "Rename Result: %s (%d)\n", + printf( _("Rename Result: %s (%d)\n"), ldap_err2string( code ), code ); if( text && *text ) { - printf( "Additional info: %s\n", text ); + printf( _("Additional info: %s\n"), text ); } if( matcheddn && *matcheddn ) { - printf( "Matched DN: %s\n", matcheddn ); + printf( _("Matched DN: %s\n"), matcheddn ); } if( refs ) { int i; for( i=0; refs[i]; i++ ) { - printf("Referral: %s\n", refs[i] ); + printf(_("Referral: %s\n"), refs[i] ); } } }