]> git.sur5r.net Git - openldap/commitdiff
Allow arbitrary exop data to be base64 encoded
authorLuke Howard <lukeh@openldap.org>
Sat, 11 Feb 2006 00:51:08 +0000 (00:51 +0000)
committerLuke Howard <lukeh@openldap.org>
Sat, 11 Feb 2006 00:51:08 +0000 (00:51 +0000)
Argument matches LDIF, ie <oid|oid:data|oid::b64data>

clients/tools/ldapexop.c

index a972f9745a7a5cc37781821e8150ac02ab580ad0..0ffe42dd5ee2733673d422e5c38e419300458008 100644 (file)
@@ -42,7 +42,7 @@ 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 );
 }
@@ -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 );