diff options
author | Chung-yih Wang <cywang@google.com> | 2009-07-04 22:19:51 +0800 |
---|---|---|
committer | Chung-yih Wang <cywang@google.com> | 2009-07-05 11:06:01 +0800 |
commit | 699ca3f2518360ea3250ff5a0e5d39e122c64a91 (patch) | |
tree | dcdeefe39f5cb52cc02d63039be4c9a4427eb9bc | |
parent | 4492bcb851f4ee862a446664eb9045045ebb7b5e (diff) | |
download | frameworks_base-699ca3f2518360ea3250ff5a0e5d39e122c64a91.zip frameworks_base-699ca3f2518360ea3250ff5a0e5d39e122c64a91.tar.gz frameworks_base-699ca3f2518360ea3250ff5a0e5d39e122c64a91.tar.bz2 |
Add password field for WiFi configuration.
1. the certtool.h is modified for avoiding the side effect,
for saving the configuration with wpa_supplicant.
2. put the loadLibrary back in CertTool.java
3. Fix incorrect JNI declarations.
-rw-r--r-- | cmds/keystore/certtool.h | 16 | ||||
-rw-r--r-- | keystore/java/android/security/CertTool.java | 12 | ||||
-rw-r--r-- | keystore/jni/certtool.c | 4 | ||||
-rw-r--r-- | services/java/com/android/server/WifiService.java | 11 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiConfiguration.java | 11 |
5 files changed, 45 insertions, 9 deletions
diff --git a/cmds/keystore/certtool.h b/cmds/keystore/certtool.h index 7cd316b..aefad66 100644 --- a/cmds/keystore/certtool.h +++ b/cmds/keystore/certtool.h @@ -26,21 +26,29 @@ #include "common.h" #include "netkeystore.h" +#define CERT_NAME_LEN (2 * MAX_KEY_NAME_LENGTH + 2) + /* * The specific function 'get_cert' is used in daemons to get the key value * from keystore. Caller should allocate the buffer and the length of the buffer * should be MAX_KEY_VALUE_LENGTH. */ -static inline int get_cert(char *certname, unsigned char *value, int *size) +static inline int get_cert(const char *certname, unsigned char *value, int *size) { int count, fd, ret = -1; LPC_MARSHAL cmd; char delimiter[] = "_"; char *namespace, *keyname; char *context = NULL; + char cname[CERT_NAME_LEN]; + + if ((certname == NULL) || (value == NULL)) { + LOGE("get_cert: certname or value is null\n"); + return -1; + } - if (value == NULL) { - LOGE("get_cert: value is null\n"); + if (strlcpy(cname, certname, CERT_NAME_LEN) >= CERT_NAME_LEN) { + LOGE("get_cert: keyname is too long\n"); return -1; } @@ -53,7 +61,7 @@ static inline int get_cert(char *certname, unsigned char *value, int *size) } cmd.opcode = GET; - if (((namespace = strtok_r(certname, delimiter, &context)) == NULL) || + if (((namespace = strtok_r(cname, delimiter, &context)) == NULL) || ((keyname = strtok_r(NULL, delimiter, &context)) == NULL)) { goto err; } diff --git a/keystore/java/android/security/CertTool.java b/keystore/java/android/security/CertTool.java index 5319330..26d22ae 100644 --- a/keystore/java/android/security/CertTool.java +++ b/keystore/java/android/security/CertTool.java @@ -30,6 +30,10 @@ import android.text.TextUtils; * {@hide} */ public class CertTool { + static { + System.loadLibrary("certtool_jni"); + } + public static final String ACTION_ADD_CREDENTIAL = "android.security.ADD_CREDENTIAL"; public static final String KEY_TYPE_NAME = "typeName"; @@ -52,7 +56,7 @@ public class CertTool { private static final String USER_KEY = "USRKEY"; private static final String KEYNAME_DELIMITER = "_"; - private static final Keystore keystore = Keystore.getInstance(); + private static final Keystore sKeystore = Keystore.getInstance(); private native String generateCertificateRequest(int bits, String subject); private native boolean isPkcs12Keystore(byte[] data); @@ -65,6 +69,8 @@ public class CertTool { private static CertTool singleton = null; + private CertTool() { } + public static final CertTool getInstance() { if (singleton == null) { singleton = new CertTool(); @@ -85,11 +91,11 @@ public class CertTool { } public String[] getAllUserCertificateKeys() { - return keystore.listKeys(USER_KEY); + return sKeystore.listKeys(USER_KEY); } public String[] getAllCaCertificateKeys() { - return keystore.listKeys(CA_CERTIFICATE); + return sKeystore.listKeys(CA_CERTIFICATE); } public String[] getSupportedKeyStrenghs() { diff --git a/keystore/jni/certtool.c b/keystore/jni/certtool.c index c2a137e..fabf5cd 100644 --- a/keystore/jni/certtool.c +++ b/keystore/jni/certtool.c @@ -115,9 +115,9 @@ static JNINativeMethod gCertToolMethods[] = { /* name, signature, funcPtr */ {"generateCertificateRequest", "(ILjava/lang/String;)Ljava/lang/String;", (void*)android_security_CertTool_generateCertificateRequest}, - {"isPkcs12Keystore", "(B[)I", + {"isPkcs12Keystore", "([B)Z", (void*)android_security_CertTool_isPkcs12Keystore}, - {"generateX509Certificate", "(B[)I", + {"generateX509Certificate", "([B)I", (void*)android_security_CertTool_generateX509Certificate}, {"isCaCertificate", "(I)Z", (void*)android_security_CertTool_isCaCertificate}, diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java index beadc5f..e2aee42 100644 --- a/services/java/com/android/server/WifiService.java +++ b/services/java/com/android/server/WifiService.java @@ -1095,6 +1095,17 @@ public class WifiService extends IWifiManager.Stub { break setVariables; } + if ((config.password != null) && !WifiNative.setNetworkVariableCommand( + netId, + WifiConfiguration.passwordVarName, + config.password)) { + if (DBG) { + Log.d(TAG, config.SSID + ": failed to set password: "+ + config.password); + } + break setVariables; + } + if ((config.clientCert != null) && !WifiNative.setNetworkVariableCommand( netId, WifiConfiguration.clientCertVarName, diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 1b7c0cd..eda2f2d 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -49,6 +49,8 @@ public class WifiConfiguration implements Parcelable { /** {@hide} */ public static final String anonymousIdentityVarName = "anonymous_identity"; /** {@hide} */ + public static final String passwordVarName = "password"; + /** {@hide} */ public static final String clientCertVarName = "client_cert"; /** {@hide} */ public static final String caCertVarName = "ca_cert"; @@ -278,6 +280,8 @@ public class WifiConfiguration implements Parcelable { public String identity; /** {@hide} */ public String anonymousIdentity; + /** {@hide} */ + public String password; /** The path of the client certificate file. * {@hide} */ @@ -312,6 +316,7 @@ public class WifiConfiguration implements Parcelable { eap = null; identity = null; anonymousIdentity = null; + password = null; clientCert = null; caCert = null; privateKey = null; @@ -402,6 +407,10 @@ public class WifiConfiguration implements Parcelable { if (this.anonymousIdentity != null) { sbuf.append(anonymousIdentity); } + sbuf.append('\n').append(" Password: "); + if (this.password != null) { + sbuf.append(password); + } sbuf.append('\n').append(" ClientCert: "); if (this.clientCert != null) { sbuf.append(clientCert); @@ -479,6 +488,7 @@ public class WifiConfiguration implements Parcelable { dest.writeString(eap); dest.writeString(identity); dest.writeString(anonymousIdentity); + dest.writeString(password); dest.writeString(clientCert); dest.writeString(caCert); dest.writeString(privateKey); @@ -508,6 +518,7 @@ public class WifiConfiguration implements Parcelable { config.eap = in.readString(); config.identity = in.readString(); config.anonymousIdentity = in.readString(); + config.password = in.readString(); config.clientCert = in.readString(); config.caCert = in.readString(); config.privateKey = in.readString(); |