Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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
}