diff --git a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java index 227230646250c..c0e8bc200f63e 100644 --- a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java +++ b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java @@ -33,7 +33,9 @@ import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -116,7 +118,6 @@ public class WifiEnterpriseConfig implements Parcelable { /** @hide */ public static final String CA_CERT_ALIAS_DELIMITER = " "; - // Fields to copy verbatim from wpa_supplicant. private static final String[] SUPPLICANT_CONFIG_KEYS = new String[] { IDENTITY_KEY, @@ -133,6 +134,11 @@ public class WifiEnterpriseConfig implements Parcelable { CA_PATH_KEY }; + /** + * Fields that have unquoted values in {@link #mFields}. + */ + private static final List UNQUOTED_KEYS = Arrays.asList(ENGINE_KEY, OPP_KEY_CACHING); + private HashMap mFields = new HashMap(); private X509Certificate[] mCaCerts; private PrivateKey mClientPrivateKey; @@ -458,7 +464,7 @@ public class WifiEnterpriseConfig implements Parcelable { case Eap.AKA: case Eap.AKA_PRIME: mEapMethod = eapMethod; - mFields.put(OPP_KEY_CACHING, "1"); + setFieldValue(OPP_KEY_CACHING, "1"); break; default: throw new IllegalArgumentException("Unknown EAP method"); @@ -517,7 +523,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return the identity */ public String getIdentity() { - return getFieldValue(IDENTITY_KEY, ""); + return getFieldValue(IDENTITY_KEY); } /** @@ -526,7 +532,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @param anonymousIdentity the anonymous identity */ public void setAnonymousIdentity(String anonymousIdentity) { - setFieldValue(ANON_IDENTITY_KEY, anonymousIdentity, ""); + setFieldValue(ANON_IDENTITY_KEY, anonymousIdentity); } /** @@ -534,7 +540,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return anonymous identity */ public String getAnonymousIdentity() { - return getFieldValue(ANON_IDENTITY_KEY, ""); + return getFieldValue(ANON_IDENTITY_KEY); } /** @@ -542,7 +548,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @param password the password */ public void setPassword(String password) { - setFieldValue(PASSWORD_KEY, password, ""); + setFieldValue(PASSWORD_KEY, password); } /** @@ -552,7 +558,7 @@ public class WifiEnterpriseConfig implements Parcelable { * framework, returns "*". */ public String getPassword() { - return getFieldValue(PASSWORD_KEY, ""); + return getFieldValue(PASSWORD_KEY); } /** @@ -642,7 +648,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @hide */ @Nullable public String[] getCaCertificateAliases() { - String value = getFieldValue(CA_CERT_KEY, ""); + String value = getFieldValue(CA_CERT_KEY); if (value.startsWith(CA_CERT_PREFIX)) { // Backwards compatibility: parse the original alias prefix. return new String[] {getFieldValue(CA_CERT_KEY, CA_CERT_PREFIX)}; @@ -769,7 +775,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @hide */ public String getCaPath() { - return getFieldValue(CA_PATH_KEY, ""); + return getFieldValue(CA_PATH_KEY); } /** Set Client certificate alias. @@ -785,11 +791,11 @@ public class WifiEnterpriseConfig implements Parcelable { setFieldValue(PRIVATE_KEY_ID_KEY, alias, Credentials.USER_PRIVATE_KEY); // Also, set engine parameters if (TextUtils.isEmpty(alias)) { - mFields.put(ENGINE_KEY, ENGINE_DISABLE); - mFields.put(ENGINE_ID_KEY, EMPTY_VALUE); + setFieldValue(ENGINE_KEY, ENGINE_DISABLE); + setFieldValue(ENGINE_ID_KEY, ""); } else { - mFields.put(ENGINE_KEY, ENGINE_ENABLE); - mFields.put(ENGINE_ID_KEY, convertToQuotedString(ENGINE_ID_KEYSTORE)); + setFieldValue(ENGINE_KEY, ENGINE_ENABLE); + setFieldValue(ENGINE_ID_KEY, ENGINE_ID_KEYSTORE); } } @@ -862,7 +868,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @deprecated in favor of altSubjectMatch */ public void setSubjectMatch(String subjectMatch) { - setFieldValue(SUBJECT_MATCH_KEY, subjectMatch, ""); + setFieldValue(SUBJECT_MATCH_KEY, subjectMatch); } /** @@ -871,7 +877,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @deprecated in favor of altSubjectMatch */ public String getSubjectMatch() { - return getFieldValue(SUBJECT_MATCH_KEY, ""); + return getFieldValue(SUBJECT_MATCH_KEY); } /** @@ -881,7 +887,7 @@ public class WifiEnterpriseConfig implements Parcelable { * DNS:server.example.com;EMAIL:server@example.com */ public void setAltSubjectMatch(String altSubjectMatch) { - setFieldValue(ALTSUBJECT_MATCH_KEY, altSubjectMatch, ""); + setFieldValue(ALTSUBJECT_MATCH_KEY, altSubjectMatch); } /** @@ -889,7 +895,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return the alternate subject match string */ public String getAltSubjectMatch() { - return getFieldValue(ALTSUBJECT_MATCH_KEY, ""); + return getFieldValue(ALTSUBJECT_MATCH_KEY); } /** @@ -919,7 +925,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return The domain value. */ public String getDomainSuffixMatch() { - return getFieldValue(DOM_SUFFIX_MATCH_KEY, ""); + return getFieldValue(DOM_SUFFIX_MATCH_KEY); } /** @@ -928,7 +934,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @param realm the realm */ public void setRealm(String realm) { - setFieldValue(REALM_KEY, realm, ""); + setFieldValue(REALM_KEY, realm); } /** @@ -936,7 +942,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return the realm */ public String getRealm() { - return getFieldValue(REALM_KEY, ""); + return getFieldValue(REALM_KEY); } /** @@ -944,7 +950,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @param plmn the plmn value derived from mcc (mobile country code) & mnc (mobile network code) */ public void setPlmn(String plmn) { - setFieldValue(PLMN_KEY, plmn, ""); + setFieldValue(PLMN_KEY, plmn); } /** @@ -953,7 +959,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return the plmn */ public String getPlmn() { - return getFieldValue(PLMN_KEY, ""); + return getFieldValue(PLMN_KEY); } /** See {@link WifiConfiguration#getKeyIdForCredentials} @hide */ @@ -998,13 +1004,13 @@ public class WifiEnterpriseConfig implements Parcelable { } /** - * Returns the field value for the key. + * Returns the field value for the key with prefix removed. * @param key into the hash * @param prefix is the prefix that the value may have * @return value * @hide */ - public String getFieldValue(String key, String prefix) { + private String getFieldValue(String key, String prefix) { // TODO: Should raise an exception if |key| is EAP_KEY or PHASE2_KEY since // neither of these keys should be retrieved in this manner. String value = mFields.get(key); @@ -1020,23 +1026,15 @@ public class WifiEnterpriseConfig implements Parcelable { } /** - * Set a value with an optional prefix at key + * Returns the field value for the key. * @param key into the hash - * @param value to be set - * @param prefix an optional value to be prefixed to actual value + * @return value * @hide */ - public void setFieldValue(String key, String value, String prefix) { - // TODO: Should raise an exception if |key| is EAP_KEY or PHASE2_KEY since - // neither of these keys should be set in this manner. - if (TextUtils.isEmpty(value)) { - mFields.put(key, EMPTY_VALUE); - } else { - mFields.put(key, convertToQuotedString(prefix + value)); - } + public String getFieldValue(String key) { + return getFieldValue(key, ""); } - /** * Set a value with an optional prefix at key * @param key into the hash @@ -1044,16 +1042,32 @@ public class WifiEnterpriseConfig implements Parcelable { * @param prefix an optional value to be prefixed to actual value * @hide */ - public void setFieldValue(String key, String value) { + private void setFieldValue(String key, String value, String prefix) { // TODO: Should raise an exception if |key| is EAP_KEY or PHASE2_KEY since // neither of these keys should be set in this manner. if (TextUtils.isEmpty(value)) { - mFields.put(key, EMPTY_VALUE); + mFields.put(key, EMPTY_VALUE); } else { - mFields.put(key, convertToQuotedString(value)); + String valueToSet; + if (!UNQUOTED_KEYS.contains(key)) { + valueToSet = convertToQuotedString(prefix + value); + } else { + valueToSet = prefix + value; + } + mFields.put(key, valueToSet); } } + /** + * Set a value at key + * @param key into the hash + * @param value to be set + * @hide + */ + public void setFieldValue(String key, String value) { + setFieldValue(key, value, ""); + } + @Override public String toString() { StringBuffer sb = new StringBuffer();