int TestParsing( ) { // WELL FORMED Expr try { ctkLDAPExpr ldap( "(cn=Babs Jensen)" ); ldap = ctkLDAPExpr( "(!(cn=Tim Howes))" ); ldap = ctkLDAPExpr( "(&(" + ctkPluginConstants::OBJECTCLASS + "=Person)(|(sn=Jensen)(cn=Babs J*)))" ); ldap = ctkLDAPExpr( "(o=univ*of*mich*)" ); ldap = ctkLDAPExpr( "(cn=Babs Jensen)" ); } catch ( std::invalid_argument &e ) { std::cerr << e.what() << std::endl; return EXIT_FAILURE; } // MALFORMED Expre try { ctkLDAPExpr ldap( "cn=Babs Jensen)" ); return EXIT_FAILURE; } catch ( std::invalid_argument &e ) { // Nothing to do int i = 0; } return EXIT_SUCCESS; }
int TestEvaluate( ) { // EVALUATE try { ctkLDAPExpr ldap( "(cn=Babs Jensen)" ); ctkDictionary dict; bool eval = false; // Several values dict.insert( "cn", "Babs Jensen" ); dict.insert( "unused", "Jansen" ); eval = ldap.evaluate( dict, true ); if ( !eval ) { return EXIT_FAILURE; } // WILDCARD ldap = ctkLDAPExpr( "(cn=Babs *)" ); dict.clear(); dict.insert( "cn", "Babs Jensen" ); eval = ldap.evaluate( dict, true ); if ( !eval ) { return EXIT_FAILURE; } // NOT FOUND ldap = ctkLDAPExpr( "(cn=Babs *)" ); dict.clear(); dict.insert( "unused", "New" ); eval = ldap.evaluate( dict, true ); if ( eval ) { return EXIT_FAILURE; } // QList with integer values ldap = ctkLDAPExpr( " ( |(cn=Babs *)(sn=1) )" ); dict.clear(); QList<QVariant> list; list.append( "Babs Jensen" ); list.append( "1" ); dict.insert( "sn", list ); eval = ldap.evaluate( dict, true ); if ( !eval ) { return EXIT_FAILURE; } } catch ( std::invalid_argument &e ) { std::cerr << e.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }
int AuthUser::match_ldap(const char* line) { #ifdef HAVE_LDAP for(;;) { std::string u(""); int n = gridftpd::input_escaped_string(line,u,' ','"'); if(n == 0) break; line+=n; try { Arc::URL url(u.c_str()); if(url.Protocol() != "ldap") return AAA_FAILURE; std::string usersn(""); gridftpd::LdapQuery ldap(url.Host(), url.Port(), false, usersn); logger.msg(Arc::INFO, "Connecting to %s:%i", url.Host(), url.Port()); logger.msg(Arc::INFO, "Quering at %s", url.Path()); std::vector<std::string> attrs; attrs.push_back("description"); try { ldap.Query(url.Path(),"",attrs,gridftpd::LdapQuery::onelevel); } catch (gridftpd::LdapQueryError& e) { logger.msg(Arc::ERROR, "Failed to query LDAP server %s", u); return AAA_FAILURE; }; result_t r(subject.c_str()); try { ldap.Result(&result_callback,&r) ; } catch (gridftpd::LdapQueryError& e) { logger.msg(Arc::ERROR, "Failed to get results from LDAP server %s", u); return AAA_FAILURE; }; if(r.decision==AAA_POSITIVE_MATCH) { // just a placeholder default_voms_=NULL; default_vo_=NULL; default_role_=NULL; default_capability_=NULL; default_vgroup_=NULL; }; return r.decision; } catch (std::exception& e) { return AAA_FAILURE; }; }; return AAA_NO_MATCH; #else logger.msg(Arc::ERROR, "LDAP authorization is not supported"); return AAA_FAILURE; #endif }