Add client-side subentries control support.

Make sure client controls are not specified multiple times.
NT port updates.
This commit is contained in:
Kurt Zeilenga 2002-08-30 07:05:12 +00:00
parent 8b2fa75a89
commit 4ce42af196
8 changed files with 100 additions and 4 deletions

View file

@ -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
}}}
###############################################################################

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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 );

View file

@ -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);