Example #1
0
  private void setKeyACLs(Configuration conf) {
    Map<String, HashMap<KeyOpType, AccessControlList>> tempKeyAcls =
        new HashMap<String, HashMap<KeyOpType, AccessControlList>>();
    Map<String, String> allKeyACLS =
        conf.getValByRegex(Pattern.quote(KMSConfiguration.KEY_ACL_PREFIX));
    for (Map.Entry<String, String> keyAcl : allKeyACLS.entrySet()) {
      String k = keyAcl.getKey();
      // this should be of type "key.acl.<KEY_NAME>.<OP_TYPE>"
      int keyNameStarts = KMSConfiguration.KEY_ACL_PREFIX.length();
      int keyNameEnds = k.lastIndexOf(".");
      if (keyNameStarts >= keyNameEnds) {
        LOG.warn("Invalid key name '{}'", k);
      } else {
        String aclStr = keyAcl.getValue();
        String keyName = k.substring(keyNameStarts, keyNameEnds);
        String keyOp = k.substring(keyNameEnds + 1);
        KeyOpType aclType = null;
        try {
          aclType = KeyOpType.valueOf(keyOp);
        } catch (IllegalArgumentException e) {
          LOG.warn("Invalid key Operation '{}'", keyOp);
        }
        if (aclType != null) {
          // On the assumption this will be single threaded.. else we need to
          // ConcurrentHashMap
          HashMap<KeyOpType, AccessControlList> aclMap = tempKeyAcls.get(keyName);
          if (aclMap == null) {
            aclMap = new HashMap<KeyOpType, AccessControlList>();
            tempKeyAcls.put(keyName, aclMap);
          }
          aclMap.put(aclType, new AccessControlList(aclStr));
          LOG.info("KEY_NAME '{}' KEY_OP '{}' ACL '{}'", keyName, aclType, aclStr);
        }
      }
    }

    keyAcls = tempKeyAcls;
    for (KeyOpType keyOp : KeyOpType.values()) {
      if (!defaultKeyAcls.containsKey(keyOp)) {
        String confKey = KMSConfiguration.DEFAULT_KEY_ACL_PREFIX + keyOp;
        String aclStr = conf.get(confKey);
        if (aclStr != null) {
          if (aclStr.equals("*")) {
            LOG.info("Default Key ACL for  KEY_OP '{}' is set to '*'", keyOp);
          }
          defaultKeyAcls.put(keyOp, new AccessControlList(aclStr));
        }
      }
    }
  }