Search in sources :

Example 1 with FilterNode

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

the class OktaInsert method cleanFilter.

private boolean cleanFilter(FilterNode root) {
    FilterType op;
    // filter.append('(');
    String comp = null;
    ArrayList<FilterNode> children;
    Iterator<FilterNode> filterIt;
    String attribName = null;
    boolean isFirst = true;
    op = root.getType();
    switch(op) {
        case AND:
        case OR:
            ArrayList<FilterNode> toRemove = new ArrayList<FilterNode>();
            children = root.getChildren();
            for (FilterNode node : children) {
                if (!cleanFilter(node)) {
                    toRemove.add(node);
                }
            }
            if (!toRemove.isEmpty()) {
                children.removeAll(toRemove);
            }
            return !children.isEmpty();
        case NOT:
            return cleanFilter(root.getNot());
        case EQUALS:
            {
                if (root.getName().equalsIgnoreCase("objectclass")) {
                    return false;
                }
                break;
            }
        case PRESENCE:
            // presence search seems broken in okta,skip it
            return false;
    }
    return true;
}
Also used : FilterType(net.sourceforge.myvd.types.FilterType) FilterNode(net.sourceforge.myvd.types.FilterNode) ArrayList(java.util.ArrayList)

Example 2 with FilterNode

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

the class OktaInsert method stringFilter.

private String stringFilter(FilterNode root, StringBuffer filter) {
    FilterType op;
    // filter.append('(');
    String comp = null;
    ArrayList<FilterNode> children;
    Iterator<FilterNode> filterIt;
    String attribName = null;
    boolean isFirst = true;
    op = root.getType();
    switch(op) {
        case AND:
            HashMap<String, ArrayList<FilterNode>> attribs = new HashMap<String, ArrayList<FilterNode>>();
            // first sort the nodes into "buckets"
            children = root.getChildren();
            filterIt = children.iterator();
            while (filterIt.hasNext()) {
                FilterNode node = filterIt.next();
                if (node.getType() == FilterType.AND) {
                    ArrayList<FilterNode> ands = attribs.get("&");
                    if (ands == null) {
                        ands = new ArrayList<FilterNode>();
                        attribs.put("&", ands);
                    }
                    ands.add(node);
                } else if (node.getType() == FilterType.OR) {
                    ArrayList<FilterNode> ors = attribs.get("|");
                    if (ors == null) {
                        ors = new ArrayList<FilterNode>();
                        attribs.put("|", ors);
                    }
                    ors.add(node);
                } else if (node.getType() == FilterType.NOT) {
                    ArrayList<FilterNode> nots = attribs.get("!");
                    if (nots == null) {
                        nots = new ArrayList<FilterNode>();
                        attribs.put("!", nots);
                    }
                    nots.add(node);
                } else {
                    ArrayList<FilterNode> attribNodes = attribs.get(node.getName());
                    if (attribNodes == null) {
                        attribNodes = new ArrayList<FilterNode>();
                        attribs.put(node.getName(), attribNodes);
                    }
                    attribNodes.add(node);
                }
            }
            filter.append(" ( ");
            Iterator<String> itBuckets = attribs.keySet().iterator();
            while (itBuckets.hasNext()) {
                String attrib = itBuckets.next();
                ArrayList<FilterNode> nodes = attribs.get(attrib);
                if (attrib.equals("&")) {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter);
                        if (itNodes.hasNext()) {
                            filter.append(" and ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" and ");
                    }
                } else if (attrib.equals("|")) {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter);
                        if (itNodes.hasNext()) {
                            filter.append(" and ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" and ");
                    }
                } else if (attrib.equals("!")) {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter);
                        if (itNodes.hasNext()) {
                            filter.append(" and ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" and ");
                    }
                } else {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter);
                        if (itNodes.hasNext()) {
                            filter.append(" or ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" and ");
                    }
                }
            }
            filter.append(" ) ");
            break;
        case OR:
            filter.append(" ( ");
            children = root.getChildren();
            filterIt = children.iterator();
            while (filterIt.hasNext()) {
                stringFilter(filterIt.next(), filter);
                if (filterIt.hasNext()) {
                    filter.append(" or ");
                }
            }
            filter.append(" ) ");
            break;
        case NOT:
            filter.append(" NOT ( ");
            stringFilter(root.getNot(), filter);
            filter.append(" ) ");
            break;
        case EQUALS:
            {
                if (root.getName().equalsIgnoreCase("objectclass")) {
                    filter.append(" profile.displayName pr ");
                } else {
                    attribName = root.getName();
                    if (attribName == null) {
                        filter.append(" 1 = 0 ");
                    } else {
                        filter.append("profile.").append(attribName).append(" eq \"").append(root.getValue()).append("\" ");
                    }
                }
                break;
            }
        case GREATER_THEN:
            {
                attribName = root.getName();
                filter.append("profile.").append(attribName).append(" gt \"").append(root.getValue()).append("\" ");
                break;
            }
        case LESS_THEN:
            {
                attribName = root.getName();
                filter.append("profile.").append(attribName).append(" lt \"").append(root.getValue()).append("\" ");
                break;
            }
        case PRESENCE:
            if (root.getName().equalsIgnoreCase("objectclass")) {
                filter.append(" 1=1 ");
            } else {
                filter.append("profile.").append(attribName).append(" pr ");
            }
            break;
        /*case APPROX_MATCH:
                        filter.append((String)itr.next());
                        filter.append("~=");
                        byte[] value = (byte[])itr.next();
                        filter.append(byteString(value));
                        
                        if (comp != null && itr.hasNext()) {
                        	filter.append(comp);
                        }
                        
                        break;
                    case LDAPSearchRequest.EXTENSIBLE_MATCH:
                        String oid = (String)itr.next();

                        filter.append((String)itr.next());
                        filter.append(':');
                        filter.append(oid);
                        filter.append(":=");
                        filter.append((String)itr.next());
                        
                        if (comp != null && itr.hasNext()) {
                        	filter.append(comp);
                        }
                        
                        break;*/
        case SUBSTR:
            {
                attribName = root.getName();
                filter.append(attribName);
                filter.append(" LIKE '");
                boolean noStarLast = false;
                filter.append(root.getValue().replace('*', '%')).append('\'');
                break;
            }
    }
    if (comp != null) {
        filter.append(')');
    }
    return attribName;
}
Also used : FilterType(net.sourceforge.myvd.types.FilterType) HashMap(java.util.HashMap) FilterNode(net.sourceforge.myvd.types.FilterNode) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator)

Example 3 with FilterNode

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

the class AmazonDynamoDB method addBaseToFilter.

private Filter addBaseToFilter(DistinguishedName base, Filter filter) {
    String rdnName, rdnVal;
    RDN rdn = (RDN) base.getDN().getRDNs().get(0);
    rdnName = rdn.getType();
    rdnVal = rdn.getValue();
    ArrayList<FilterNode> ands = new ArrayList<FilterNode>();
    ands.add(new FilterNode(FilterType.EQUALS, rdnName, rdnVal));
    try {
        ands.add((FilterNode) filter.getRoot().clone());
    } catch (CloneNotSupportedException e) {
    }
    FilterNode newroot = new FilterNode(FilterType.AND, ands);
    filter = new Filter(newroot);
    return filter;
}
Also used : Filter(net.sourceforge.myvd.types.Filter) FilterNode(net.sourceforge.myvd.types.FilterNode) ArrayList(java.util.ArrayList) RDN(com.novell.ldap.util.RDN)

Example 4 with FilterNode

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

the class AmazonDynamoDB method search.

@Override
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 addUser = false;
    boolean addGroups = false;
    boolean searchUsers = false;
    boolean searchGroups = false;
    Filter filterToUser = null;
    Iterator<Item> userResults = null;
    Iterator<Item> groupResults = null;
    try {
        filterToUser = new Filter((FilterNode) filter.getRoot().clone());
    } catch (CloneNotSupportedException e) {
    }
    if (scope.getValue() == 0) {
        if (base.getDN().equals(this.baseDN)) {
            addBase = true;
        } else if (base.getDN().equals(this.userDN)) {
            addUser = true;
        } else if (base.getDN().equals(this.groupDN)) {
            addGroups = true;
        } else if (base.getDN().toString().endsWith(this.userDN.toString())) {
            searchUsers = true;
            filterToUser = this.addBaseToFilter(base, filterToUser);
        } else if (base.getDN().toString().endsWith(this.groupDN.toString())) {
            searchGroups = true;
            filterToUser = this.addBaseToFilter(base, filterToUser);
        } else {
            throw new LDAPException("Object not found", LDAPException.NO_SUCH_OBJECT, base.getDN().toString());
        }
    } else if (scope.getValue() == 1) {
        if (base.getDN().equals(this.baseDN)) {
            addUser = true;
            addGroups = true;
        } else if (base.getDN().equals(userDN)) {
            searchUsers = true;
        // filterToUser = this.addBaseToFilter(base, filterToUser);
        } else if (base.getDN().equals(groupDN)) {
            searchGroups = true;
        // filterToUser = this.addBaseToFilter(base, filterToUser);
        }
    } else if (scope.getValue() == 2) {
        if (base.getDN().equals(this.baseDN)) {
            addBase = true;
            addUser = true;
            addGroups = true;
            searchUsers = true;
            searchGroups = true;
        // filterToUser = this.addBaseToFilter(base, filterToUser);
        } else if (base.getDN().equals(userDN) || base.getDN().toString().endsWith(this.userDN.toString())) {
            searchUsers = true;
        // filterToUser = this.addBaseToFilter(base, filterToUser);
        } else if (base.getDN().equals(groupDN) || base.getDN().toString().endsWith(this.groupDN.toString())) {
            searchGroups = true;
        // filterToUser = this.addBaseToFilter(base, filterToUser);
        }
    }
    ArrayList<Entry> baseEntries = new ArrayList<Entry>();
    if (addBase) {
        baseEntries.add(new Entry(EntryUtil.createBaseEntry(this.baseDN)));
    }
    if (addUser) {
        baseEntries.add(new Entry(EntryUtil.createBaseEntry(this.userDN)));
    }
    if (addGroups) {
        baseEntries.add(new Entry(EntryUtil.createBaseEntry(this.groupDN)));
    }
}
Also used : Item(com.amazonaws.services.simpledb.model.Item) Entry(net.sourceforge.myvd.types.Entry) LDAPException(com.novell.ldap.LDAPException) Filter(net.sourceforge.myvd.types.Filter) FilterNode(net.sourceforge.myvd.types.FilterNode) ArrayList(java.util.ArrayList)

Example 5 with FilterNode

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

the class AmazonSimpleDB method stringFilter.

private String stringFilter(FilterNode root, StringBuffer filter, ArrayList<Object> vals) {
    FilterType op;
    // filter.append('(');
    String comp = null;
    ArrayList<FilterNode> children;
    Iterator<FilterNode> filterIt;
    String attribName = null;
    boolean isFirst = true;
    op = root.getType();
    switch(op) {
        case AND:
            HashMap<String, ArrayList<FilterNode>> attribs = new HashMap<String, ArrayList<FilterNode>>();
            // first sort the nodes into "buckets"
            children = root.getChildren();
            filterIt = children.iterator();
            while (filterIt.hasNext()) {
                FilterNode node = filterIt.next();
                if (node.getType() == FilterType.AND) {
                    ArrayList<FilterNode> ands = attribs.get("&");
                    if (ands == null) {
                        ands = new ArrayList<FilterNode>();
                        attribs.put("&", ands);
                    }
                    ands.add(node);
                } else if (node.getType() == FilterType.OR) {
                    ArrayList<FilterNode> ors = attribs.get("|");
                    if (ors == null) {
                        ors = new ArrayList<FilterNode>();
                        attribs.put("|", ors);
                    }
                    ors.add(node);
                } else if (node.getType() == FilterType.NOT) {
                    ArrayList<FilterNode> nots = attribs.get("!");
                    if (nots == null) {
                        nots = new ArrayList<FilterNode>();
                        attribs.put("!", nots);
                    }
                    nots.add(node);
                } else {
                    ArrayList<FilterNode> attribNodes = attribs.get(node.getName().toLowerCase());
                    if (attribNodes == null) {
                        attribNodes = new ArrayList<FilterNode>();
                        attribs.put(node.getName(), attribNodes);
                    }
                    attribNodes.add(node);
                }
            }
            filter.append(" ( ");
            Iterator<String> itBuckets = attribs.keySet().iterator();
            while (itBuckets.hasNext()) {
                String attrib = itBuckets.next();
                ArrayList<FilterNode> nodes = attribs.get(attrib);
                if (attrib.equals("&")) {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter, vals);
                        if (itNodes.hasNext()) {
                            filter.append(" AND ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" AND ");
                    }
                } else if (attrib.equals("|")) {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter, vals);
                        if (itNodes.hasNext()) {
                            filter.append(" AND ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" AND ");
                    }
                } else if (attrib.equals("!")) {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter, vals);
                        if (itNodes.hasNext()) {
                            filter.append(" AND ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" AND ");
                    }
                } else {
                    Iterator<FilterNode> itNodes = nodes.iterator();
                    filter.append(" ( ");
                    while (itNodes.hasNext()) {
                        stringFilter(itNodes.next(), filter, vals);
                        if (itNodes.hasNext()) {
                            filter.append(" OR ");
                        }
                    }
                    filter.append(" ) ");
                    if (itBuckets.hasNext()) {
                        filter.append(" AND ");
                    }
                }
            }
            filter.append(" ) ");
            break;
        case OR:
            filter.append(" ( ");
            children = root.getChildren();
            filterIt = children.iterator();
            while (filterIt.hasNext()) {
                stringFilter(filterIt.next(), filter, vals);
                if (filterIt.hasNext()) {
                    filter.append(" OR ");
                }
            }
            filter.append(" ) ");
            break;
        case NOT:
            filter.append(" NOT ( ");
            stringFilter(root.getNot(), filter, vals);
            filter.append(" ) ");
            break;
        case EQUALS:
            {
                if (root.getName().equalsIgnoreCase("objectclass")) {
                    filter.append(" (uid IS NOT NULL OR cn IS NOT NULL) ");
                } else {
                    attribName = root.getName().toLowerCase();
                    if (attribName == null) {
                        filter.append(" (uid IS NULL AND cn IS NULL) ");
                    } else {
                        filter.append(attribName);
                        filter.append("='");
                        filter.append(root.getValue());
                        filter.append('\'');
                        vals.add(root.getValue());
                    }
                }
                break;
            }
        case GREATER_THEN:
            {
                attribName = root.getName().toLowerCase();
                filter.append(attribName);
                filter.append(">=");
                filter.append("=");
                filter.append(root.getValue());
                vals.add(root.getValue());
                break;
            }
        case LESS_THEN:
            {
                attribName = root.getName().toLowerCase();
                filter.append(attribName);
                filter.append("<=");
                filter.append("=");
                filter.append(root.getValue());
                vals.add(root.getValue());
                break;
            }
        case PRESENCE:
            if (root.getName().equalsIgnoreCase("objectclass")) {
                filter.append(" (uid IS NOT NULL OR cn IS NOT NULL) ");
            } else {
                filter.append(root.getName().toLowerCase());
                filter.append(" IS NOT NULL ");
            }
            break;
        /*case APPROX_MATCH:
                        filter.append((String)itr.next());
                        filter.append("~=");
                        byte[] value = (byte[])itr.next();
                        filter.append(byteString(value));
                        
                        if (comp != null && itr.hasNext()) {
                        	filter.append(comp);
                        }
                        
                        break;
                    case LDAPSearchRequest.EXTENSIBLE_MATCH:
                        String oid = (String)itr.next();

                        filter.append((String)itr.next());
                        filter.append(':');
                        filter.append(oid);
                        filter.append(":=");
                        filter.append((String)itr.next());
                        
                        if (comp != null && itr.hasNext()) {
                        	filter.append(comp);
                        }
                        
                        break;*/
        case SUBSTR:
            {
                attribName = root.getName().toLowerCase();
                filter.append(attribName);
                filter.append(" LIKE '");
                boolean noStarLast = false;
                filter.append(root.getValue().replace('*', '%')).append('\'');
                break;
            }
    }
    if (comp != null) {
        filter.append(')');
    }
    return attribName;
}
Also used : FilterType(net.sourceforge.myvd.types.FilterType) HashMap(java.util.HashMap) FilterNode(net.sourceforge.myvd.types.FilterNode) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator)

Aggregations

FilterNode (net.sourceforge.myvd.types.FilterNode)11 ArrayList (java.util.ArrayList)10 Filter (net.sourceforge.myvd.types.Filter)6 LDAPException (com.novell.ldap.LDAPException)4 Entry (net.sourceforge.myvd.types.Entry)3 FilterType (net.sourceforge.myvd.types.FilterType)3 Item (com.amazonaws.services.simpledb.model.Item)2 LDAPAttribute (com.novell.ldap.LDAPAttribute)2 RDN (com.novell.ldap.util.RDN)2 HashMap (java.util.HashMap)2 Iterator (java.util.Iterator)2 Attribute (net.sourceforge.myvd.types.Attribute)2 LDAPEntry (com.novell.ldap.LDAPEntry)1 DN (com.novell.ldap.util.DN)1 Attribute (com.tremolosecurity.saml.Attribute)1 IteratorEntrySet (net.sourceforge.myvd.util.IteratorEntrySet)1 Document (org.bson.Document)1 Bson (org.bson.conversions.Bson)1