]> git.sur5r.net Git - openldap/blobdiff - clients/tools/ldapexop.c
fix type format
[openldap] / clients / tools / ldapexop.c
index a972f9745a7a5cc37781821e8150ac02ab580ad0..03ec8fae01977b2cb3544c5d632fc26fb2e76e2c 100644 (file)
@@ -42,14 +42,14 @@ void
 usage( void )
 {
        fprintf( stderr, _("Issue LDAP extended operations\n\n"));
-       fprintf( stderr, _("usage: %s [options] [oid[:data]]\n"), prog);
+       fprintf( stderr, _("usage: %s [options] <oid|oid:data|oid::b64data>\n"), prog);
        tool_common_usage();
        exit( EXIT_FAILURE );
 }
 
 
 const char options[] = ""
-       "d:D:e:h:H:InO:p:QR:U:vVw:WxX:y:Y:Z";
+       "d:D:e:h:H:InO:o:p:QR:U:vVw:WxX:y:Y:Z";
 
 int
 handle_private_option( int i )
@@ -190,17 +190,32 @@ main( int argc, char *argv[] )
                }
 
                p = strchr( argv[ 0 ], ':' );
+               if ( p == argv[ 0 ] ) {
+                       usage();
+               }
+
                if ( p != NULL )
                        *p++ = '\0';
 
                if ( tool_is_oid( argv[ 0 ] ) ) {
-                       struct berval reqdata;
-
-                       if ( p ) {
-                               reqdata.bv_val = p;
-                               reqdata.bv_len = strlen( reqdata.bv_val );
+                       struct berval   reqdata;
+                       struct berval   type;
+                       struct berval   value;
+                       int             freeval;
+
+                       if ( p != NULL ) {
+                               p[ -1 ] = ':';
+                               ldif_parse_line2( argv[ 0 ], &type, &value, &freeval );
+                               p[ -1 ] = '\0';
+
+                               if ( freeval ) {
+                                       reqdata = value;
+                               } else {
+                                       ber_dupbv( &reqdata, &value );
+                               }
                        }
 
+
                        tool_server_controls( ld, NULL, 0 );
 
                        rc = ldap_extended_operation( ld, argv[ 0 ], p ? &reqdata : NULL, NULL, NULL, &id );