#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ldap.h>
#include <sasl/sasl.h>


int main(int argc, char **argv)
{
	LDAP *ld;
	int  result;
	int  desired_version = LDAP_VERSION3;
	char *ldap_uri      = "ldap://ldap.example.com";

	ldap_initialize(&ld, ldap_uri);
	if ( ld == NULL ) {
		perror( "ldap_init failed" );
		exit( EXIT_FAILURE );
	}

	if (ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &desired_version) != LDAP_OPT_SUCCESS)
	{
		ldap_perror(ld, "ldap_set_option failed!");
		exit(EXIT_FAILURE);
	}

	/* Check the current max_ssf parameter */
	sasl_ssf_t before_ssf = -1; /* indicates we dont know what it is */
	ldap_get_option(ld, LDAP_OPT_X_SASL_SSF_MAX, &before_ssf);
	printf( "LDAP_OPT_X_SASL_SSF_MAX before setting = %d\n", before_ssf );

	/* Try to set ssf to 0 */
	sasl_ssf_t max_ssf = 0;
	printf( "setting max ssf to %d\n", max_ssf );
	if (ldap_set_option(ld, LDAP_OPT_X_SASL_SSF_MAX, &max_ssf) != LDAP_OPT_SUCCESS)
	{
		//ldap_perror(&ld, "ldap_set_option failed!");
		perror( "ldap_set_option failed" );

		int errno;
		char *info;
		ldap_get_option( ld, LDAP_OPT_ERROR_NUMBER, &errno);
		// convert errno as a string
		printf( "errno: %i\n", errno);
		printf( "errno string: %s\n",
			ldap_err2string(errno));
		exit(EXIT_FAILURE);
	}

	/* Now check if max ssf is really 0 */
	sasl_ssf_t after_ssf = -1; /* indicates we dont know what it is */
	ldap_get_option(ld,LDAP_OPT_X_SASL_SSF_MAX, &after_ssf);
	printf( "LDAP_OPT_X_SASL_SSF_MAX after setting = %d\n", after_ssf );

	return 0;
}

