summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChung-yih Wang <cywang@google.com>2009-07-04 22:19:51 +0800
committerChung-yih Wang <cywang@google.com>2009-07-05 11:06:01 +0800
commit699ca3f2518360ea3250ff5a0e5d39e122c64a91 (patch)
treedcdeefe39f5cb52cc02d63039be4c9a4427eb9bc
parent4492bcb851f4ee862a446664eb9045045ebb7b5e (diff)
downloadframeworks_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.h16
-rw-r--r--keystore/java/android/security/CertTool.java12
-rw-r--r--keystore/jni/certtool.c4
-rw-r--r--services/java/com/android/server/WifiService.java11
-rw-r--r--wifi/java/android/net/wifi/WifiConfiguration.java11
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();