static char *prog = NULL;
static char *binddn = NULL;
static struct berval passwd = { 0, NULL };
+static char *ldapuri = NULL;
static char *ldaphost = NULL;
static int ldapport = 0;
#ifdef HAVE_CYRUS_SASL
#endif
static int use_tls = 0;
static int not, verbose, contoper;
-static LDAP *ld;
+static LDAP *ld = NULL;
static int domodrdn(
LDAP *ld,
" -D binddn bind DN\n"
" -f file read operations from `file'\n"
" -h host LDAP server\n"
+" -H URI LDAP Uniform Resource Indentifier(s)\n"
" -I use SASL Interactive mode\n"
" -k use Kerberos authentication\n"
" -K like -k, but do only step 1 of the Kerberos bind\n"
authmethod = LDAP_AUTH_SIMPLE;
version = -1;
- prog = (prog = strrchr(argv[0], *LDAP_DIRSEP)) == NULL ? argv[0] : ++prog;
+ prog = (prog = strrchr(argv[0], *LDAP_DIRSEP)) == NULL ? argv[0] : prog + 1;
- while (( i = getopt( argc, argv, "cf:rs:" "Cd:D:h:IkKMnO:p:P:QRU:vw:WxX:Y:Z" )) != EOF ) {
+ while (( i = getopt( argc, argv, "cf:rs:" "Cd:D:h:H:IkKMnO:p:P:QRU:vw:WxX:Y:Z" )) != EOF ) {
switch( i ) {
/* Modrdn Options */
case 'c':
binddn = strdup( optarg );
break;
case 'h': /* ldap host */
+ if( ldapuri != NULL ) {
+ fprintf( stderr, "%s: -h incompatible with -H\n" );
+ return EXIT_FAILURE;
+ }
if( ldaphost != NULL ) {
fprintf( stderr, "%s: -h previously specified\n" );
return EXIT_FAILURE;
}
ldaphost = strdup( optarg );
break;
+ case 'H': /* ldap URI */
+ if( ldaphost != NULL ) {
+ fprintf( stderr, "%s: -H incompatible with -h\n" );
+ return EXIT_FAILURE;
+ }
+ if( ldapport ) {
+ fprintf( stderr, "%s: -H incompatible with -p\n" );
+ return EXIT_FAILURE;
+ }
+ if( ldapuri != NULL ) {
+ fprintf( stderr, "%s: -H previously specified\n" );
+ return EXIT_FAILURE;
+ }
+ ldapuri = strdup( optarg );
+ break;
case 'I':
#ifdef HAVE_CYRUS_SASL
if( version == LDAP_VERSION2 ) {
(void) SIGNAL( SIGPIPE, SIG_IGN );
#endif
- if (( ld = ldap_init( ldaphost, ldapport )) == NULL ) {
- perror( "ldap_init" );
- return( EXIT_FAILURE );
- }
+ if( ( ldaphost != NULL || ldapport ) && ( ldapuri == NULL ) ) {
+ if ( verbose ) {
+ fprintf( stderr, "ldap_init( %s, %d )\n",
+ ldaphost != NULL ? ldaphost : "<DEFAULT>",
+ ldapport );
+ }
+ ld = ldap_init( ldaphost, ldapport );
+
+ } else {
+ if ( verbose ) {
+ fprintf( stderr, "ldap_initialize( %s )\n",
+ ldapuri != NULL ? ldapuri : "<DEFAULT>" );
+ }
+ (void) ldap_initialize( &ld, ldapuri );
+ }
+
+ if( ld == NULL ) {
+ fprintf( stderr, "Could not create LDAP session handle (%d): %s\n",
+ rc, ldap_err2string(rc) );
+ return EXIT_FAILURE;
+ }
/* referrals */
if( ldap_set_option( ld, LDAP_OPT_REFERRALS,
c.ldctl_value.bv_len = 0;
c.ldctl_iscritical = manageDSAit > 1;
- err = ldap_set_option( ld, LDAP_OPT_SERVER_CONTROLS, &ctrls );
+ err = ldap_set_option( ld, LDAP_OPT_SERVER_CONTROLS, ctrls );
if( err != LDAP_OPT_SUCCESS ) {
fprintf( stderr, "Could not set ManageDSAit %scontrol\n",