#include <stdio.h>
#include <windows.h>
#include <winldap.h>
#include <wchar.h>
#define AUTH_METHOD LDAP_AUTH_SIMPLE
int requested_version = LDAP_VERSION3;
int authCheck( char *host, char *port, PWCHAR bind_dn, PWCHAR bind_pw);
int main(int argc, char **argv);
main(int argc, char **argv)
{
WCHAR oldPassword[128];
if( argc != 4 )
{
printf( "Wrong number of arguments!\n" );
printf( "Usage: p4authenticate [IP] [Port] [user]\n");
printf( "Example: p4authenticate 1.2.3.4 389 bob \n");
exit( -1 );
}
if(strlen(argv[3]) == 0)
{
printf("Error: NULL user names are not allowed.\n");
exit (-1);
}
/* read the password from <stdin> and truncate the newline */
if( fgetws( oldPassword, 128, stdin ) == NULL )
{
printf( "Didn't receive old password!\n" );
exit( -1 );
}
oldPassword[ wcslen(oldPassword) - 1 ] = '\0';
if(wcslen(oldPassword) == 0)
{
printf("Error: NULL passwords are not allowed.\n");
exit (-1);
}
WCHAR wc_dn[128];
MultiByteToWideChar(CP_UTF8, 0, argv[3], -1, wc_dn, 128);
PWCHAR pwc_dn = wc_dn;
PWCHAR pwop = oldPassword;
return( authCheck( argv[1], argv[2], pwc_dn, pwop) );
}
int
authCheck( char *host, char *port, PWCHAR bind_dn, PWCHAR bind_pw)
{
LDAP *ld;
int rc;
int portnumber = atoi( port );
/* Get a handle to an LDAP connection. */
if( ( ld = ldap_initA( host, portnumber ) ) == NULL )
{
printf( "Can't initialize connection to %s : %d\n" , host, portnumber );
return( -1 );
}
ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &requested_version );
/* bind */
rc = ldap_bind_sW( ld, bind_dn, bind_pw, AUTH_METHOD );
/* check result, report errors */
if ( rc != LDAP_SUCCESS )
{
if (lstrcmpiA("Invalid credentials", ldap_err2stringA(rc)) == 0)
{ printf( "Error: Password incorrect (%s).\n", ldap_err2stringA(rc) ); }
else
{ printf("Error: %s.\n",ldap_err2stringA(rc)); }
return( -1 );
}
printf("Success: Password verified.\n");
ldap_unbind( ld );
return( 0 );
}
#
Change
User
Description
Committed
#1
5478
dsteele
Triggers that do not accept null passwords.
The other trigger doesn't work
With null passwords in some environments. In those environments this trigger
should be used instead.