private void initialize(Map props) {
    // Allow attributes to be modified
    modifiable = true;
    this.props = props;
    for (final Object o : props.entrySet()) {
      Map.Entry me = (Map.Entry) o;
      String propName = (String) me.getKey();
      // if ssl-enabled is set to true before the mcast port is set to 0, then it will error.
      // security should not be enabled before the mcast port is set to 0.
      if (isSpecialPropertyName(propName)) {
        continue;
      }
      Object propVal = me.getValue();
      // weed out extraneous non-string properties
      if (propVal instanceof String) {
        setAttribute(propName, ((String) propVal).trim(), sourceMap.get(propName));
      }
    }
    if (props.containsKey(CLUSTER_SSL_ENABLED)) {
      setAttribute(CLUSTER_SSL_ENABLED, (String) props.get(CLUSTER_SSL_ENABLED),
          sourceMap.get(CLUSTER_SSL_ENABLED));
    }
    // now set the security authInit if needed
    if (props.containsKey(SECURITY_PEER_AUTH_INIT)) {
      setAttribute(SECURITY_PEER_AUTH_INIT, (String) props.get(SECURITY_PEER_AUTH_INIT),
          sourceMap.get(SECURITY_PEER_AUTH_INIT));
    }
    // and security authenticator if needed
    if (props.containsKey(SECURITY_PEER_AUTHENTICATOR)) {
      setAttribute(SECURITY_PEER_AUTHENTICATOR,
          (String) props.get(SECURITY_PEER_AUTHENTICATOR),
          sourceMap.get(SECURITY_PEER_AUTHENTICATOR));
    }

    // Make attributes read only
    modifiable = false;
  }
For every key in p mark it as being from the given source.
geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java