Commit 6b706ced authored by Jonathan Beck's avatar Jonathan Beck

add get_device_uid function

Conflicts:
parent bb496ff0
...@@ -214,13 +214,16 @@ int lockdownd_hello(lockdownd_client *control) { ...@@ -214,13 +214,16 @@ int lockdownd_hello(lockdownd_client *control) {
free_dictionary(dictionary); free_dictionary(dictionary);
return 0; return 0;
} }
/** Askes for the device's public key. Part of the lockdownd handshake.
/** Generic function to handle simple (key, value) requests.
* *
* @note You most likely want lockdownd_init unless you are doing something special. * @param control an initialized lockdownd client.
* @param key the key to request
* @param value a pointer to the requested value
* *
* @return 1 on success and 0 on failure. * @return 1 on success and 0 on failure.
*/ */
int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key) int lockdownd_generic_get_value(lockdownd_client *control, char *req_key, char **value)
{ {
xmlDocPtr plist = new_plist(); xmlDocPtr plist = new_plist();
xmlNode *dict = NULL; xmlNode *dict = NULL;
...@@ -232,7 +235,7 @@ int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key ...@@ -232,7 +235,7 @@ int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key
/* Setup DevicePublicKey request plist */ /* Setup DevicePublicKey request plist */
dict = add_child_to_plist(plist, "dict", "\n", NULL, 0); dict = add_child_to_plist(plist, "dict", "\n", NULL, 0);
key = add_key_str_dict_element(plist, dict, "Key", "DevicePublicKey", 1); key = add_key_str_dict_element(plist, dict, "Key", req_key, 1);
key = add_key_str_dict_element(plist, dict, "Request", "GetValue", 1); key = add_key_str_dict_element(plist, dict, "Request", "GetValue", 1);
xmlDocDumpMemory(plist, (xmlChar**)&XML_content, &length); xmlDocDumpMemory(plist, (xmlChar**)&XML_content, &length);
...@@ -264,7 +267,7 @@ int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key ...@@ -264,7 +267,7 @@ int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key
success = 1; success = 1;
} }
if (!strcmp(dictionary[i], "Value")) { if (!strcmp(dictionary[i], "Value")) {
*public_key = strdup(dictionary[i+1]); *value = strdup(dictionary[i+1]);
} }
} }
...@@ -275,6 +278,28 @@ int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key ...@@ -275,6 +278,28 @@ int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key
return success; return success;
} }
/** Askes for the device's unique id. Part of the lockdownd handshake.
*
* @note You most likely want lockdownd_init unless you are doing something special.
*
* @return 1 on success and 0 on failure.
*/
int lockdownd_get_device_uid(lockdownd_client *control, char **uid)
{
return lockdownd_generic_get_value(control, "UniqueDeviceID", uid);
}
/** Askes for the device's public key. Part of the lockdownd handshake.
*
* @note You most likely want lockdownd_init unless you are doing something special.
*
* @return 1 on success and 0 on failure.
*/
int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key)
{
return lockdownd_generic_get_value(control, "DevicePublicKey", public_key);
}
/** Completes the entire lockdownd handshake. /** Completes the entire lockdownd handshake.
* *
* @param phone The iPhone * @param phone The iPhone
......
...@@ -41,6 +41,7 @@ char *lockdownd_generate_hostid(); ...@@ -41,6 +41,7 @@ char *lockdownd_generate_hostid();
lockdownd_client *new_lockdownd_client(iPhone *phone); lockdownd_client *new_lockdownd_client(iPhone *phone);
int lockdownd_hello(lockdownd_client *control); int lockdownd_hello(lockdownd_client *control);
int lockdownd_get_device_uid(lockdownd_client *control, char **uid);
int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key); int lockdownd_get_device_public_key(lockdownd_client *control, char **public_key);
int lockdownd_gen_pair_cert(char *public_key_b64, char **device_cert_b64, char **host_cert_b64, char **root_cert_b64); int lockdownd_gen_pair_cert(char *public_key_b64, char **device_cert_b64, char **host_cert_b64, char **root_cert_b64);
int lockdownd_pair_device(lockdownd_client *control, char *public_key, char *host_id); int lockdownd_pair_device(lockdownd_client *control, char *public_key, char *host_id);
......
...@@ -57,6 +57,12 @@ int main(int argc, char *argv[]) { ...@@ -57,6 +57,12 @@ int main(int argc, char *argv[]) {
return -1; return -1;
} }
char *uid = NULL;
if (lockdownd_get_device_uid(control, &uid)) {
printf("DeviceUniqueID : %s\n", uid);
free(uid);
}
port = lockdownd_start_service(control, "com.apple.afc"); port = lockdownd_start_service(control, "com.apple.afc");
if (port) { if (port) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment