Search in sources :

Example 6 with Attribute

use of net.sourceforge.myvd.types.Attribute in project OpenUnison by TremoloSecurity.

the class AddAttributesFromProvisioningTarget method search.

public void search(SearchInterceptorChain chain, DistinguishedName base, Int scope, Filter filter, ArrayList<Attribute> attributes, Bool typesOnly, Results results, LDAPSearchConstraints constraints) throws LDAPException {
    boolean hasAttribute = attributes.size() == 0 || (attributes.size() == 1 && attributes.get(0).getAttribute().getName().equalsIgnoreCase("*"));
    if (!hasAttribute) {
        for (Attribute attr : attributes) {
            if (attr.getAttribute().getName().equalsIgnoreCase(this.uidAttribute)) {
                hasAttribute = true;
            }
        }
    }
    if (!hasAttribute) {
        Attribute attr = new Attribute(this.uidAttribute);
        ArrayList<Attribute> nattrs = new ArrayList<Attribute>();
        nattrs.add(attr);
        nattrs.addAll(attributes);
        attributes = nattrs;
    }
    chain.nextSearch(base, scope, filter, attributes, typesOnly, results, constraints);
}
Also used : LDAPAttribute(com.novell.ldap.LDAPAttribute) Attribute(net.sourceforge.myvd.types.Attribute) ArrayList(java.util.ArrayList)

Example 7 with Attribute

use of net.sourceforge.myvd.types.Attribute in project OpenUnison by TremoloSecurity.

the class AddGroupsFromProvisioningTarget method search.

public void search(SearchInterceptorChain chain, DistinguishedName base, Int scope, Filter filter, ArrayList<Attribute> attributes, Bool typesOnly, Results results, LDAPSearchConstraints constraints) throws LDAPException {
    boolean hasAttribute = attributes.size() == 0 || (attributes.size() == 1 && attributes.get(0).getAttribute().getName().equalsIgnoreCase("*"));
    if (!hasAttribute) {
        for (Attribute attr : attributes) {
            if (attr.getAttribute().getName().equalsIgnoreCase(this.uidAttribute)) {
                hasAttribute = true;
            }
        }
    }
    if (!hasAttribute) {
        Attribute attr = new Attribute(this.uidAttribute);
        ArrayList<Attribute> nattrs = new ArrayList<Attribute>();
        nattrs.add(attr);
        nattrs.addAll(attributes);
        attributes = nattrs;
    }
    chain.nextSearch(base, scope, filter, attributes, typesOnly, results, constraints);
}
Also used : LDAPAttribute(com.novell.ldap.LDAPAttribute) Attribute(net.sourceforge.myvd.types.Attribute) ArrayList(java.util.ArrayList)

Example 8 with Attribute

use of net.sourceforge.myvd.types.Attribute in project OpenUnison by TremoloSecurity.

the class AuthTOTPInsert method bind.

public void bind(BindInterceptorChain chain, DistinguishedName dn, Password pwd, LDAPConstraints constraints) throws LDAPException {
    DistinguishedName localdn = new DistinguishedName(new DN(dn.getDN().toString()));
    logger.debug("In bind");
    SearchInterceptorChain schain = chain.createSearchChain();
    ArrayList<Attribute> searchattrs = new ArrayList<Attribute>();
    // searchattrs.add(new Attribute(this.attribute));
    logger.debug("searching...");
    Results res = new Results(chain.getInterceptors(), chain.getPos());
    logger.debug("Created res");
    schain.nextSearch(localdn, new Int(0), new Filter("(objectClass=*)"), searchattrs, new Bool(false), res, new LDAPSearchConstraints());
    logger.debug("ran search");
    res.start();
    logger.debug("res started");
    if (!res.hasMore()) {
        logger.debug("user not found");
        throw new LDAPException("Could not find " + localdn.getDN().toString(), LDAPException.NO_SUCH_OBJECT, "Could not find " + localdn.getDN().toString());
    }
    logger.debug("user found");
    LDAPEntry entry = res.next().getEntry();
    LDAPAttribute key = entry.getAttribute(this.attribute);
    if (key == null) {
        logger.debug("No key");
        throw new LDAPException("Invalid Credentials", LDAPException.NO_SUCH_OBJECT, "Invalid Credentials");
    }
    try {
        String keyjson = key.getStringValue();
        if (logger.isDebugEnabled())
            logger.debug("token json : '" + keyjson + "'");
        Gson gson = new Gson();
        Token token = gson.fromJson(new String(Base64.decode(keyjson)), Token.class);
        byte[] iv = org.bouncycastle.util.encoders.Base64.decode(token.getIv());
        IvParameterSpec spec = new IvParameterSpec(iv);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, GlobalEntries.getGlobalEntries().getConfigManager().getSecretKey(this.encyrptionKey), spec);
        byte[] encBytes = org.bouncycastle.util.encoders.Base64.decode(token.getEncryptedRequest());
        String totpJson = new String(cipher.doFinal(encBytes));
        if (logger.isDebugEnabled())
            logger.debug("totp json : '" + totpJson + "'");
        TOTPKey totp = gson.fromJson(totpJson, TOTPKey.class);
        GoogleAuthenticatorConfigBuilder b = new GoogleAuthenticatorConfigBuilder();
        b.setWindowSize(this.window);
        GoogleAuthenticatorConfig cfg = b.build();
        GoogleAuthenticator ga = new GoogleAuthenticator(cfg);
        String spwd = new String(pwd.getValue());
        if (spwd.indexOf(':') == -1) {
            logger.debug("no colon");
            throw new LDAPException("Invalid credentials", LDAPException.INVALID_CREDENTIALS, "Invalid Credentials");
        }
        String scode = spwd.substring(spwd.indexOf(':') + 1);
        int code = Integer.parseInt(scode);
        if (!ga.authorize(totp.getSecretKey(), code)) {
            logger.debug("Verify failed");
            throw new LDAPException("Invalid credentials", LDAPException.INVALID_CREDENTIALS, "Invalid Credentials");
        }
        logger.debug("verify succeeded");
        pwd.setValue(spwd.substring(0, spwd.indexOf(':')).getBytes("UTF-8"));
        chain.nextBind(dn, pwd, constraints);
    } catch (Exception e) {
        logger.error("Could not work", e);
        if (e instanceof LDAPException) {
            throw ((LDAPException) e);
        } else {
            throw new LDAPException("Could not decrypt key", LDAPException.OPERATIONS_ERROR, "Could not decrypt key", e);
        }
    }
}
Also used : LDAPAttribute(com.novell.ldap.LDAPAttribute) Attribute(net.sourceforge.myvd.types.Attribute) LDAPSearchConstraints(com.novell.ldap.LDAPSearchConstraints) ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) DN(com.novell.ldap.util.DN) Token(com.tremolosecurity.json.Token) Int(net.sourceforge.myvd.types.Int) LDAPEntry(com.novell.ldap.LDAPEntry) Bool(net.sourceforge.myvd.types.Bool) SearchInterceptorChain(net.sourceforge.myvd.chain.SearchInterceptorChain) LDAPAttribute(com.novell.ldap.LDAPAttribute) GoogleAuthenticator(com.warrenstrange.googleauth.GoogleAuthenticator) DistinguishedName(net.sourceforge.myvd.types.DistinguishedName) GoogleAuthenticatorConfig(com.warrenstrange.googleauth.GoogleAuthenticatorConfig) GoogleAuthenticatorConfigBuilder(com.warrenstrange.googleauth.GoogleAuthenticatorConfig.GoogleAuthenticatorConfigBuilder) LDAPException(com.novell.ldap.LDAPException) LDAPException(com.novell.ldap.LDAPException) Results(net.sourceforge.myvd.types.Results) Filter(net.sourceforge.myvd.types.Filter) TOTPKey(com.tremolosecurity.proxy.auth.otp.TOTPKey) IvParameterSpec(javax.crypto.spec.IvParameterSpec) Cipher(javax.crypto.Cipher)

Example 9 with Attribute

use of net.sourceforge.myvd.types.Attribute in project OpenUnison by TremoloSecurity.

the class AccessLog method search.

public void search(SearchInterceptorChain chain, DistinguishedName base, Int scope, Filter filter, ArrayList<Attribute> attributes, Bool typesOnly, Results results, LDAPSearchConstraints constraints) throws LDAPException {
    long start = System.currentTimeMillis();
    long end = 0;
    int result = -1;
    Int op = new Int(0);
    Int con = new Int(0);
    Int nentries = new Int(0);
    this.getOpNum(chain.getSession(), con, op);
    StringBuffer buf = new StringBuffer();
    Iterator<Attribute> it = attributes.iterator();
    while (it.hasNext()) {
        buf.append(it.next().getAttribute().getName()).append(' ');
    }
    buf = new StringBuffer("SRCH op=").append(op.getValue()).append(" con=").append(con.getValue()).append(" base='").append(base.getDN()).append("' filter='").append(filter.getRoot().toString()).append("' scope='").append(scope.getValue()).append("' attribs='").append(buf).append("'");
    StringBuffer b = new StringBuffer();
    b.append(AccessLog.ACCESS_LOG_SRCH_BEGIN).append(this.name);
    chain.getRequest().put(b.toString(), start);
    b.setLength(0);
    b.append(AccessLog.ACCESS_LOG_SRCH_CON).append(this.name);
    chain.getRequest().put(b.toString(), con);
    b.setLength(0);
    b.append(AccessLog.ACCESS_LOG_SRCH_OP).append(this.name);
    chain.getRequest().put(b.toString(), op);
    b.setLength(0);
    b.append(AccessLog.ACCESS_LOG_SRCH_COUNT).append(this.name);
    chain.getRequest().put(b.toString(), nentries);
    logger.info(buf.toString());
    try {
        chain.nextSearch(base, scope, filter, attributes, typesOnly, results, constraints);
        result = 0;
    } catch (LDAPException le) {
        result = le.getResultCode();
        throw le;
    } finally {
        end = System.currentTimeMillis();
        if (result == -1) {
            result = LDAPException.OPERATIONS_ERROR;
        }
        buf.setLength(0);
        buf.append("RESULT op=").append(op.getValue()).append(" con=").append(con.getValue()).append(" result=").append(result).append(" time=").append(end - start);
        logger.info(buf.toString());
    }
}
Also used : LDAPException(com.novell.ldap.LDAPException) Attribute(net.sourceforge.myvd.types.Attribute) Int(net.sourceforge.myvd.types.Int)

Example 10 with Attribute

use of net.sourceforge.myvd.types.Attribute in project OpenUnison by TremoloSecurity.

the class MongoInsert method search.

public void search(SearchInterceptorChain chain, DistinguishedName base, Int scope, Filter filter, ArrayList<Attribute> attributes, Bool typesOnly, Results results, LDAPSearchConstraints constraints) throws LDAPException {
    boolean addBase = false;
    boolean addCollection = false;
    boolean oneEntry = false;
    boolean listCollections = false;
    boolean searchUsers = false;
    Bson mongoFilter = null;
    Filter filterToUser = null;
    try {
        filterToUser = new Filter((FilterNode) filter.getRoot().clone());
    } catch (CloneNotSupportedException e) {
    }
    String localBase = this.getLocalBase(base.getDN().toString());
    String collectionName = this.getCollection(localBase);
    Attribute rdn = null;
    if (!localBase.isEmpty()) {
        rdn = this.getRDN(localBase);
    }
    if (scope.getValue() == 0) {
        if (localBase.isEmpty()) {
            addBase = true;
        } else if (rdn == null) {
            addCollection = true;
        } else {
            oneEntry = true;
        }
    } else if (scope.getValue() == 1) {
        addBase = false;
        if (localBase.isEmpty()) {
            listCollections = true;
        } else {
            searchUsers = true;
        }
    } else {
        // scope == 2
        addBase = true;
        if (localBase.isEmpty()) {
            listCollections = true;
        }
        searchUsers = true;
    }
    // create results
    ArrayList<Entry> res = new ArrayList<Entry>();
    StringBuffer b = new StringBuffer();
    if (addBase) {
        this.addToEntry(new Entry(EntryUtil.createBaseEntry(new DN(this.nameSpace.getBase().getDN().toString()))), filter, res);
    }
    if (listCollections) {
        for (String ou : mongo.getDatabase(this.database).listCollectionNames()) {
            b.setLength(0);
            b.append("ou=").append(ou).append(",").append(this.nameSpace.getBase().getDN().toString());
            this.addToEntry(new Entry(EntryUtil.createBaseEntry(new DN(b.toString()))), filter, res);
        }
    }
    if (addCollection) {
        boolean found = false;
        for (String ou : mongo.getDatabase(this.database).listCollectionNames()) {
            if (ou.equalsIgnoreCase(collectionName)) {
                b.setLength(0);
                b.append("ou=").append(ou).append(",").append(this.nameSpace.getBase().getDN().toString());
                this.addToEntry(new Entry(EntryUtil.createBaseEntry(new DN(b.toString()))), filter, res);
                found = true;
            }
        }
        if (!found) {
            throw new LDAPException("Could not find object", LDAPException.NO_SUCH_OBJECT, LDAPException.resultCodeToString(LDAPException.NO_SUCH_OBJECT));
        }
    }
    if (oneEntry) {
        boolean found = false;
        for (String ou : mongo.getDatabase(this.database).listCollectionNames()) {
            if (ou.equalsIgnoreCase(collectionName)) {
                found = true;
            }
        }
        if (!found) {
            throw new LDAPException("Could not find object", LDAPException.NO_SUCH_OBJECT, LDAPException.resultCodeToString(LDAPException.NO_SUCH_OBJECT));
        }
        // first see if we get results with the filter
        ArrayList<FilterNode> children = new ArrayList<FilterNode>();
        children.add(new FilterNode(FilterType.EQUALS, rdn.getAttribute().getName(), rdn.getAttribute().getStringValue()));
        children.add(filterToUser.getRoot());
        FilterNode and = new FilterNode(FilterType.AND, children);
        mongoFilter = this.convertFilterToMongo(and);
        FindIterable<Document> searchRes = mongo.getDatabase(this.database).getCollection(collectionName).find(mongoFilter);
        if (searchRes == null) {
            // nothing, need to know if the object exists or if its just the filter that didn't match
            searchRes = mongo.getDatabase(this.database).getCollection(collectionName).find(eq(rdn.getAttribute().getName(), rdn.getAttribute().getStringValue()));
            if (searchRes == null) {
                throw new LDAPException("Could not find object", LDAPException.NO_SUCH_OBJECT, LDAPException.resultCodeToString(LDAPException.NO_SUCH_OBJECT));
            }
        } else {
            Document doc = searchRes.first();
            if (doc == null) {
                // nothing, need to know if the object exists or if its just the filter that didn't match
                searchRes = mongo.getDatabase(this.database).getCollection(collectionName).find(eq(rdn.getAttribute().getName(), rdn.getAttribute().getStringValue()));
                if (searchRes.first() == null) {
                    throw new LDAPException("Could not find object", LDAPException.NO_SUCH_OBJECT, LDAPException.resultCodeToString(LDAPException.NO_SUCH_OBJECT));
                }
            } else {
                res.add(createEntry(doc, collectionName));
            }
        }
    }
    if (searchUsers) {
        mongoFilter = this.convertFilterToMongo(filter.getRoot());
        if (collectionName != null) {
            boolean found = false;
            for (String ou : mongo.getDatabase(this.database).listCollectionNames()) {
                if (ou.equalsIgnoreCase(collectionName)) {
                    found = true;
                }
            }
            if (!found) {
                throw new LDAPException("Could not find object", LDAPException.NO_SUCH_OBJECT, LDAPException.resultCodeToString(LDAPException.NO_SUCH_OBJECT));
            }
            FindIterable<Document> searchRes = mongo.getDatabase(this.database).getCollection(collectionName).find(mongoFilter);
            for (Document doc : searchRes) {
                res.add(createEntry(doc, collectionName));
            }
        } else {
            for (String ou : mongo.getDatabase(this.database).listCollectionNames()) {
                FindIterable<Document> searchRes = mongo.getDatabase(this.database).getCollection(ou).find(mongoFilter);
                for (Document doc : searchRes) {
                    res.add(createEntry(doc, ou));
                }
            }
        }
    }
    chain.addResult(results, new IteratorEntrySet(res.iterator()), base, scope, filterToUser, attributes, typesOnly, constraints);
}
Also used : LDAPAttribute(com.novell.ldap.LDAPAttribute) Attribute(net.sourceforge.myvd.types.Attribute) FilterNode(net.sourceforge.myvd.types.FilterNode) ArrayList(java.util.ArrayList) DN(com.novell.ldap.util.DN) Document(org.bson.Document) Bson(org.bson.conversions.Bson) IteratorEntrySet(net.sourceforge.myvd.util.IteratorEntrySet) Entry(net.sourceforge.myvd.types.Entry) LDAPEntry(com.novell.ldap.LDAPEntry) LDAPException(com.novell.ldap.LDAPException) Filter(net.sourceforge.myvd.types.Filter)

Aggregations

Attribute (net.sourceforge.myvd.types.Attribute)10 LDAPAttribute (com.novell.ldap.LDAPAttribute)8 ArrayList (java.util.ArrayList)6 LDAPException (com.novell.ldap.LDAPException)5 Filter (net.sourceforge.myvd.types.Filter)4 LDAPEntry (com.novell.ldap.LDAPEntry)3 Int (net.sourceforge.myvd.types.Int)3 LDAPSearchConstraints (com.novell.ldap.LDAPSearchConstraints)2 DN (com.novell.ldap.util.DN)2 SearchInterceptorChain (net.sourceforge.myvd.chain.SearchInterceptorChain)2 Bool (net.sourceforge.myvd.types.Bool)2 DistinguishedName (net.sourceforge.myvd.types.DistinguishedName)2 Entry (net.sourceforge.myvd.types.Entry)2 FilterNode (net.sourceforge.myvd.types.FilterNode)2 Results (net.sourceforge.myvd.types.Results)2 SelectRequest (com.amazonaws.services.simpledb.model.SelectRequest)1 SelectResult (com.amazonaws.services.simpledb.model.SelectResult)1 Gson (com.google.gson.Gson)1 Token (com.tremolosecurity.json.Token)1 User (com.tremolosecurity.provisioning.core.User)1