mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-20 22:59:34 -05:00
Add client-side subentries control support.
Make sure client controls are not specified multiple times. NT port updates.
This commit is contained in:
parent
8b2fa75a89
commit
4ce42af196
8 changed files with 100 additions and 4 deletions
|
|
@ -155,6 +155,9 @@ Package=<4>
|
|||
Begin Project Dependency
|
||||
Project_Dep_Name ldapwhoami
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name ldapcompare
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
|
@ -239,6 +242,18 @@ Package=<5>
|
|||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name liblber
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name libldap
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name liblutil
|
||||
End Project Dependency
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name libldif
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ main( int argc, char **argv )
|
|||
"Cd:D:e:h:H:IkKMnO:p:P:qQR:U:vw:WxX:y:Y:zZ")) != EOF )
|
||||
{
|
||||
switch( i ) {
|
||||
#if 0
|
||||
case 'E': /* compare controls */
|
||||
if( version == LDAP_VERSION2 ) {
|
||||
fprintf( stderr, "%s: -E incompatible with LDAPv%d\n",
|
||||
|
|
@ -155,6 +156,7 @@ main( int argc, char **argv )
|
|||
fprintf( stderr, "Invalid compare control name: %s\n", control );
|
||||
usage(prog);
|
||||
return EXIT_FAILURE;
|
||||
#endif
|
||||
|
||||
/* Common Options */
|
||||
case 'C':
|
||||
|
|
@ -195,6 +197,10 @@ main( int argc, char **argv )
|
|||
}
|
||||
|
||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||
if( manageDSAit ) {
|
||||
fprintf( stderr, "manageDSAit control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
@ -206,6 +212,10 @@ main( int argc, char **argv )
|
|||
break;
|
||||
|
||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||
if( noop ) {
|
||||
fprintf( stderr, "noop control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "noop: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
|
|||
|
|
@ -196,6 +196,10 @@ main( int argc, char **argv )
|
|||
}
|
||||
|
||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||
if( manageDSAit ) {
|
||||
fprintf( stderr, "manageDSAit control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
@ -207,6 +211,10 @@ main( int argc, char **argv )
|
|||
break;
|
||||
|
||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||
if( noop ) {
|
||||
fprintf( stderr, "noop control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "noop: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
|
|||
|
|
@ -253,6 +253,10 @@ main( int argc, char **argv )
|
|||
}
|
||||
|
||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||
if( manageDSAit ) {
|
||||
fprintf( stderr, "manageDSAit control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
@ -264,6 +268,10 @@ main( int argc, char **argv )
|
|||
break;
|
||||
|
||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||
if( noop ) {
|
||||
fprintf( stderr, "noop control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "noop: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
|
|||
|
|
@ -216,6 +216,10 @@ main(int argc, char **argv)
|
|||
}
|
||||
|
||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||
if( manageDSAit ) {
|
||||
fprintf( stderr, "manageDSAit control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
@ -227,6 +231,10 @@ main(int argc, char **argv)
|
|||
break;
|
||||
|
||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||
if( noop ) {
|
||||
fprintf( stderr, "noop control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "noop: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
|
|||
|
|
@ -214,6 +214,10 @@ main( int argc, char *argv[] )
|
|||
}
|
||||
|
||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||
if( manageDSAit ) {
|
||||
fprintf( stderr, "manageDSAit control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,9 @@ usage( const char *s )
|
|||
" -b basedn base dn for search\n"
|
||||
" -E [!]<ctrl>[=<ctrlparam>] search controls (! indicates criticality)\n"
|
||||
" [!]mv=<filter> (matched values filter)\n"
|
||||
#ifdef LDAP_CONTROL_SUBENTRIES
|
||||
" [!]subentries[=true|false] (subentries)\n"
|
||||
#endif
|
||||
" -F prefix URL prefix for files (default: %s)\n"
|
||||
" -l limit time limit (in seconds) for search\n"
|
||||
" -L print responses in LDIFv1 format\n"
|
||||
|
|
@ -190,7 +193,7 @@ main( int argc, char **argv )
|
|||
int referrals, timelimit, sizelimit, debug;
|
||||
int authmethod, version, want_bindpw;
|
||||
LDAP *ld = NULL;
|
||||
int valuesReturnFilter;
|
||||
int subentries, valuesReturnFilter;
|
||||
BerElement *ber = NULL;
|
||||
struct berval *bvalp = NULL;
|
||||
char *vrFilter = NULL, *control = NULL, *cvalue;
|
||||
|
|
@ -198,7 +201,8 @@ main( int argc, char **argv )
|
|||
|
||||
|
||||
infile = NULL;
|
||||
debug = verbose = not = vals2tmp = referrals = valuesReturnFilter =
|
||||
debug = verbose = not = vals2tmp = referrals =
|
||||
subentries = valuesReturnFilter =
|
||||
attrsonly = manageDSAit = noop = ldif = want_bindpw = 0;
|
||||
|
||||
prog = lutil_progname( "ldapsearch", argc, argv );
|
||||
|
|
@ -282,7 +286,7 @@ main( int argc, char **argv )
|
|||
|
||||
if ( strcasecmp( control, "mv" ) == 0 ) {
|
||||
/* ValuesReturnFilter control */
|
||||
if (valuesReturnFilter!=0) {
|
||||
if( valuesReturnFilter ) {
|
||||
fprintf( stderr, "ValuesReturnFilter previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
|
@ -298,6 +302,24 @@ main( int argc, char **argv )
|
|||
version = LDAP_VERSION3;
|
||||
break;
|
||||
|
||||
#ifdef LDAP_CONTROL_SUBENTRIES
|
||||
} else if ( strcasecmp( control, "subentries" ) == 0 ) {
|
||||
if( subentries ) {
|
||||
fprintf( stderr, "subentries control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue == NULL || strcasecmp( cvalue, "true") == 0 ) {
|
||||
subentries = 2;
|
||||
} else if ( strcasecmp( cvalue, "false") == 0 ) {
|
||||
subentries = 1;
|
||||
} else {
|
||||
fprintf( stderr,
|
||||
"subentries control value \"%s\" invalid\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( crit ) subentries *= -1;
|
||||
#endif
|
||||
|
||||
} else {
|
||||
fprintf( stderr, "Invalid control name: %s\n", control );
|
||||
usage(prog);
|
||||
|
|
@ -392,6 +414,10 @@ main( int argc, char **argv )
|
|||
}
|
||||
|
||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||
if( manageDSAit ) {
|
||||
fprintf( stderr, "manageDSAit control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
@ -403,6 +429,10 @@ main( int argc, char **argv )
|
|||
break;
|
||||
|
||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||
if( noop ) {
|
||||
fprintf( stderr, "noop control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "noop: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
@ -1051,6 +1081,11 @@ main( int argc, char **argv )
|
|||
printf("\n# with noop %scontrol",
|
||||
noop > 1 ? "critical " : "" );
|
||||
}
|
||||
if ( subentries ) {
|
||||
printf("\n# with subentries %scontrol: %s",
|
||||
subentries < 0 ? "critical " : "",
|
||||
abs(subentries) == 1 ? "false" : "true" );
|
||||
}
|
||||
if ( valuesReturnFilter ) {
|
||||
printf("\n# with valuesReturnFilter %scontrol: %s",
|
||||
valuesReturnFilter > 1 ? "critical " : "", vrFilter );
|
||||
|
|
|
|||
|
|
@ -174,6 +174,10 @@ main( int argc, char *argv[] )
|
|||
}
|
||||
|
||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||
if( manageDSAit ) {
|
||||
fprintf( stderr, "manageDSAit control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
@ -185,6 +189,10 @@ main( int argc, char *argv[] )
|
|||
break;
|
||||
|
||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||
if( noop ) {
|
||||
fprintf( stderr, "noop control previously specified");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if( cvalue != NULL ) {
|
||||
fprintf( stderr, "noop: no control value expected" );
|
||||
usage(prog);
|
||||
|
|
|
|||
Loading…
Reference in a new issue