]> git.sur5r.net Git - openldap/blobdiff - clients/tools/ldapmodrdn.c
Add -H to usage
[openldap] / clients / tools / ldapmodrdn.c
index b93490912092a27151a11877f3bf7efbc61e0dc9..066ebfd6dc805436b5bddd50e55a4be1905341a3 100644 (file)
@@ -35,6 +35,7 @@
 static char *prog = NULL;
 static char    *binddn = NULL;
 static struct berval passwd = { 0, NULL };
+static char    *ldapuri = NULL;
 static char    *ldaphost = NULL;
 static int     ldapport = 0;
 #ifdef HAVE_CYRUS_SASL
@@ -47,7 +48,7 @@ static char   *sasl_secprops = NULL;
 #endif
 static int     use_tls = 0;
 static int     not, verbose, contoper;
-static LDAP    *ld;
+static LDAP    *ld = NULL;
 
 static int domodrdn(
     LDAP       *ld,
@@ -76,6 +77,7 @@ usage( const char *s )
 "  -D binddn  bind DN\n"
 "  -f file    read operations from `file'\n"
 "  -h host    LDAP server\n"
+"  -H URI     LDAP Uniform Resource Indentifier(s)\n"
 "  -I         use SASL Interactive mode\n"
 "  -k         use Kerberos authentication\n"
 "  -K         like -k, but do only step 1 of the Kerberos bind\n"
@@ -114,9 +116,9 @@ main(int argc, char **argv)
     authmethod = LDAP_AUTH_SIMPLE;
        version = -1;
 
-    prog = (prog = strrchr(argv[0], *LDAP_DIRSEP)) == NULL ? argv[0] : ++prog;
+    prog = (prog = strrchr(argv[0], *LDAP_DIRSEP)) == NULL ? argv[0] : prog + 1;
 
-    while (( i = getopt( argc, argv, "cf:rs:" "Cd:D:h:IkKMnO:p:P:QRU:vw:WxX:Y:Z" )) != EOF ) {
+    while (( i = getopt( argc, argv, "cf:rs:" "Cd:D:h:H:IkKMnO:p:P:QRU:vw:WxX:Y:Z" )) != EOF ) {
        switch( i ) {
        /* Modrdn Options */
        case 'c':
@@ -157,12 +159,31 @@ main(int argc, char **argv)
            binddn = strdup( optarg );
            break;
        case 'h':       /* ldap host */
+               if( ldapuri != NULL ) {
+                       fprintf( stderr, "%s: -h incompatible with -H\n" );
+                       return EXIT_FAILURE;
+               }
                if( ldaphost != NULL ) {
                        fprintf( stderr, "%s: -h previously specified\n" );
                        return EXIT_FAILURE;
                }
            ldaphost = strdup( optarg );
            break;
+       case 'H':       /* ldap URI */
+               if( ldaphost != NULL ) {
+                       fprintf( stderr, "%s: -H incompatible with -h\n" );
+                       return EXIT_FAILURE;
+               }
+               if( ldapport ) {
+                       fprintf( stderr, "%s: -H incompatible with -p\n" );
+                       return EXIT_FAILURE;
+               }
+               if( ldapuri != NULL ) {
+                       fprintf( stderr, "%s: -H previously specified\n" );
+                       return EXIT_FAILURE;
+               }
+           ldapuri = strdup( optarg );
+           break;
        case 'I':
 #ifdef HAVE_CYRUS_SASL
                if( version == LDAP_VERSION2 ) {
@@ -515,10 +536,27 @@ main(int argc, char **argv)
        (void) SIGNAL( SIGPIPE, SIG_IGN );
 #endif
 
-    if (( ld = ldap_init( ldaphost, ldapport )) == NULL ) {
-       perror( "ldap_init" );
-       return( EXIT_FAILURE );
-    }
+       if( ( ldaphost != NULL || ldapport ) && ( ldapuri == NULL ) ) {
+               if ( verbose ) {
+                       fprintf( stderr, "ldap_init( %s, %d )\n",
+                               ldaphost != NULL ? ldaphost : "<DEFAULT>",
+                               ldapport );
+               }
+               ld = ldap_init( ldaphost, ldapport );
+
+       } else {
+               if ( verbose ) {
+                       fprintf( stderr, "ldap_initialize( %s )\n",
+                               ldapuri != NULL ? ldapuri : "<DEFAULT>" );
+               }
+               (void) ldap_initialize( &ld, ldapuri );
+       }
+
+       if( ld == NULL ) {
+               fprintf( stderr, "Could not create LDAP session handle (%d): %s\n",
+                       rc, ldap_err2string(rc) );
+               return EXIT_FAILURE;
+       }
 
        /* referrals */
        if( ldap_set_option( ld, LDAP_OPT_REFERRALS,
@@ -607,7 +645,7 @@ main(int argc, char **argv)
                c.ldctl_value.bv_len = 0;
                c.ldctl_iscritical = manageDSAit > 1;
 
-               err = ldap_set_option( ld, LDAP_OPT_SERVER_CONTROLS, &ctrls );
+               err = ldap_set_option( ld, LDAP_OPT_SERVER_CONTROLS, ctrls );
 
                if( err != LDAP_OPT_SUCCESS ) {
                        fprintf( stderr, "Could not set ManageDSAit %scontrol\n",