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
|
Begin Project Dependency
|
||||||
Project_Dep_Name ldapwhoami
|
Project_Dep_Name ldapwhoami
|
||||||
End Project Dependency
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name ldapcompare
|
||||||
|
End Project Dependency
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
@ -239,6 +242,18 @@ Package=<5>
|
||||||
|
|
||||||
Package=<4>
|
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 )
|
"Cd:D:e:h:H:IkKMnO:p:P:qQR:U:vw:WxX:y:Y:zZ")) != EOF )
|
||||||
{
|
{
|
||||||
switch( i ) {
|
switch( i ) {
|
||||||
|
#if 0
|
||||||
case 'E': /* compare controls */
|
case 'E': /* compare controls */
|
||||||
if( version == LDAP_VERSION2 ) {
|
if( version == LDAP_VERSION2 ) {
|
||||||
fprintf( stderr, "%s: -E incompatible with LDAPv%d\n",
|
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 );
|
fprintf( stderr, "Invalid compare control name: %s\n", control );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Common Options */
|
/* Common Options */
|
||||||
case 'C':
|
case 'C':
|
||||||
|
|
@ -195,6 +197,10 @@ main( int argc, char **argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||||
|
if( manageDSAit ) {
|
||||||
|
fprintf( stderr, "manageDSAit control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -206,6 +212,10 @@ main( int argc, char **argv )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||||
|
if( noop ) {
|
||||||
|
fprintf( stderr, "noop control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "noop: no control value expected" );
|
fprintf( stderr, "noop: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,10 @@ main( int argc, char **argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||||
|
if( manageDSAit ) {
|
||||||
|
fprintf( stderr, "manageDSAit control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -207,6 +211,10 @@ main( int argc, char **argv )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||||
|
if( noop ) {
|
||||||
|
fprintf( stderr, "noop control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "noop: no control value expected" );
|
fprintf( stderr, "noop: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
|
||||||
|
|
@ -253,6 +253,10 @@ main( int argc, char **argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||||
|
if( manageDSAit ) {
|
||||||
|
fprintf( stderr, "manageDSAit control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -264,6 +268,10 @@ main( int argc, char **argv )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||||
|
if( noop ) {
|
||||||
|
fprintf( stderr, "noop control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "noop: no control value expected" );
|
fprintf( stderr, "noop: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,10 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||||
|
if( manageDSAit ) {
|
||||||
|
fprintf( stderr, "manageDSAit control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -227,6 +231,10 @@ main(int argc, char **argv)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||||
|
if( noop ) {
|
||||||
|
fprintf( stderr, "noop control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "noop: no control value expected" );
|
fprintf( stderr, "noop: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
|
||||||
|
|
@ -214,6 +214,10 @@ main( int argc, char *argv[] )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||||
|
if( manageDSAit ) {
|
||||||
|
fprintf( stderr, "manageDSAit control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,9 @@ usage( const char *s )
|
||||||
" -b basedn base dn for search\n"
|
" -b basedn base dn for search\n"
|
||||||
" -E [!]<ctrl>[=<ctrlparam>] search controls (! indicates criticality)\n"
|
" -E [!]<ctrl>[=<ctrlparam>] search controls (! indicates criticality)\n"
|
||||||
" [!]mv=<filter> (matched values filter)\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"
|
" -F prefix URL prefix for files (default: %s)\n"
|
||||||
" -l limit time limit (in seconds) for search\n"
|
" -l limit time limit (in seconds) for search\n"
|
||||||
" -L print responses in LDIFv1 format\n"
|
" -L print responses in LDIFv1 format\n"
|
||||||
|
|
@ -190,7 +193,7 @@ main( int argc, char **argv )
|
||||||
int referrals, timelimit, sizelimit, debug;
|
int referrals, timelimit, sizelimit, debug;
|
||||||
int authmethod, version, want_bindpw;
|
int authmethod, version, want_bindpw;
|
||||||
LDAP *ld = NULL;
|
LDAP *ld = NULL;
|
||||||
int valuesReturnFilter;
|
int subentries, valuesReturnFilter;
|
||||||
BerElement *ber = NULL;
|
BerElement *ber = NULL;
|
||||||
struct berval *bvalp = NULL;
|
struct berval *bvalp = NULL;
|
||||||
char *vrFilter = NULL, *control = NULL, *cvalue;
|
char *vrFilter = NULL, *control = NULL, *cvalue;
|
||||||
|
|
@ -198,7 +201,8 @@ main( int argc, char **argv )
|
||||||
|
|
||||||
|
|
||||||
infile = NULL;
|
infile = NULL;
|
||||||
debug = verbose = not = vals2tmp = referrals = valuesReturnFilter =
|
debug = verbose = not = vals2tmp = referrals =
|
||||||
|
subentries = valuesReturnFilter =
|
||||||
attrsonly = manageDSAit = noop = ldif = want_bindpw = 0;
|
attrsonly = manageDSAit = noop = ldif = want_bindpw = 0;
|
||||||
|
|
||||||
prog = lutil_progname( "ldapsearch", argc, argv );
|
prog = lutil_progname( "ldapsearch", argc, argv );
|
||||||
|
|
@ -282,7 +286,7 @@ main( int argc, char **argv )
|
||||||
|
|
||||||
if ( strcasecmp( control, "mv" ) == 0 ) {
|
if ( strcasecmp( control, "mv" ) == 0 ) {
|
||||||
/* ValuesReturnFilter control */
|
/* ValuesReturnFilter control */
|
||||||
if (valuesReturnFilter!=0) {
|
if( valuesReturnFilter ) {
|
||||||
fprintf( stderr, "ValuesReturnFilter previously specified");
|
fprintf( stderr, "ValuesReturnFilter previously specified");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
@ -298,6 +302,24 @@ main( int argc, char **argv )
|
||||||
version = LDAP_VERSION3;
|
version = LDAP_VERSION3;
|
||||||
break;
|
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 {
|
} else {
|
||||||
fprintf( stderr, "Invalid control name: %s\n", control );
|
fprintf( stderr, "Invalid control name: %s\n", control );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -392,6 +414,10 @@ main( int argc, char **argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||||
|
if( manageDSAit ) {
|
||||||
|
fprintf( stderr, "manageDSAit control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -403,6 +429,10 @@ main( int argc, char **argv )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||||
|
if( noop ) {
|
||||||
|
fprintf( stderr, "noop control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "noop: no control value expected" );
|
fprintf( stderr, "noop: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -1051,6 +1081,11 @@ main( int argc, char **argv )
|
||||||
printf("\n# with noop %scontrol",
|
printf("\n# with noop %scontrol",
|
||||||
noop > 1 ? "critical " : "" );
|
noop > 1 ? "critical " : "" );
|
||||||
}
|
}
|
||||||
|
if ( subentries ) {
|
||||||
|
printf("\n# with subentries %scontrol: %s",
|
||||||
|
subentries < 0 ? "critical " : "",
|
||||||
|
abs(subentries) == 1 ? "false" : "true" );
|
||||||
|
}
|
||||||
if ( valuesReturnFilter ) {
|
if ( valuesReturnFilter ) {
|
||||||
printf("\n# with valuesReturnFilter %scontrol: %s",
|
printf("\n# with valuesReturnFilter %scontrol: %s",
|
||||||
valuesReturnFilter > 1 ? "critical " : "", vrFilter );
|
valuesReturnFilter > 1 ? "critical " : "", vrFilter );
|
||||||
|
|
|
||||||
|
|
@ -174,6 +174,10 @@ main( int argc, char *argv[] )
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
if ( strcasecmp( control, "manageDSAit" ) == 0 ) {
|
||||||
|
if( manageDSAit ) {
|
||||||
|
fprintf( stderr, "manageDSAit control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "manageDSAit: no control value expected" );
|
fprintf( stderr, "manageDSAit: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
@ -185,6 +189,10 @@ main( int argc, char *argv[] )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
} else if ( strcasecmp( control, "noop" ) == 0 ) {
|
||||||
|
if( noop ) {
|
||||||
|
fprintf( stderr, "noop control previously specified");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
if( cvalue != NULL ) {
|
if( cvalue != NULL ) {
|
||||||
fprintf( stderr, "noop: no control value expected" );
|
fprintf( stderr, "noop: no control value expected" );
|
||||||
usage(prog);
|
usage(prog);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue