diff options
| author | 2010-01-08 01:13:35 +0100 | |
|---|---|---|
| committer | 2010-01-08 01:13:35 +0100 | |
| commit | 0ac0908fd09627e789c7bb2255aed8109ca2e47f (patch) | |
| tree | 61df2e20713bb88933aff7357e3cecb34788ab76 /src | |
| parent | 5e45779a8d22068f54e0dbdc42995be27b858e18 (diff) | |
| download | libimobiledevice-0ac0908fd09627e789c7bb2255aed8109ca2e47f.tar.gz libimobiledevice-0ac0908fd09627e789c7bb2255aed8109ca2e47f.tar.bz2 | |
Allow set the label of a lockdown request, usually set to the program name
Diffstat (limited to 'src')
| -rw-r--r-- | src/lockdown.c | 46 | ||||
| -rw-r--r-- | src/lockdown.h | 1 |
2 files changed, 46 insertions, 1 deletions
diff --git a/src/lockdown.c b/src/lockdown.c index fb5f8f5..76d063c 100644 --- a/src/lockdown.c +++ b/src/lockdown.c | |||
| @@ -108,6 +108,21 @@ static int lockdown_check_result(plist_t dict, const char *query_match) | |||
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | /** | 110 | /** |
| 111 | * Adds a label key with the passed value to a plist dict node. | ||
| 112 | * | ||
| 113 | * @param plist The plist to add the key to | ||
| 114 | * @param label The value for the label key | ||
| 115 | * | ||
| 116 | */ | ||
| 117 | static void plist_dict_add_label(plist_t plist, const char *label) | ||
| 118 | { | ||
| 119 | if (plist && label) { | ||
| 120 | if (plist_get_node_type(plist) == PLIST_DICT) | ||
| 121 | plist_dict_insert_item(plist, "Label", plist_new_string(label)); | ||
| 122 | } | ||
| 123 | } | ||
| 124 | |||
| 125 | /** | ||
| 111 | * Closes the lockdownd communication session, by sending | 126 | * Closes the lockdownd communication session, by sending |
| 112 | * the StopSession Request to the device. | 127 | * the StopSession Request to the device. |
| 113 | * | 128 | * |
| @@ -128,6 +143,7 @@ lockdownd_error_t lockdownd_stop_session(lockdownd_client_t client) | |||
| 128 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; | 143 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; |
| 129 | 144 | ||
| 130 | plist_t dict = plist_new_dict(); | 145 | plist_t dict = plist_new_dict(); |
| 146 | plist_dict_add_label(dict, client->label); | ||
| 131 | plist_dict_insert_item(dict,"Request", plist_new_string("StopSession")); | 147 | plist_dict_insert_item(dict,"Request", plist_new_string("StopSession")); |
| 132 | plist_dict_insert_item(dict,"SessionID", plist_new_string(client->session_id)); | 148 | plist_dict_insert_item(dict,"SessionID", plist_new_string(client->session_id)); |
| 133 | 149 | ||
| @@ -223,11 +239,27 @@ lockdownd_error_t lockdownd_client_free(lockdownd_client_t client) | |||
| 223 | if (client->uuid) { | 239 | if (client->uuid) { |
| 224 | free(client->uuid); | 240 | free(client->uuid); |
| 225 | } | 241 | } |
| 242 | if (client->label) { | ||
| 243 | free(client->label); | ||
| 244 | } | ||
| 226 | 245 | ||
| 227 | free(client); | 246 | free(client); |
| 228 | return ret; | 247 | return ret; |
| 229 | } | 248 | } |
| 230 | 249 | ||
| 250 | /** | ||
| 251 | * Sets the label to send for requests to lockdownd. | ||
| 252 | * | ||
| 253 | * @param client The lockdown client | ||
| 254 | * @param label The label to set or NULL to disable | ||
| 255 | * | ||
| 256 | */ | ||
| 257 | void lockdownd_client_set_label(lockdownd_client_t client, const char *label) | ||
| 258 | { | ||
| 259 | if (client) | ||
| 260 | client->label = strdup(label); | ||
| 261 | } | ||
| 262 | |||
| 231 | /** Polls the iPhone for lockdownd data. | 263 | /** Polls the iPhone for lockdownd data. |
| 232 | * | 264 | * |
| 233 | * @param control The lockdownd client | 265 | * @param control The lockdownd client |
| @@ -366,6 +398,7 @@ lockdownd_error_t lockdownd_query_type(lockdownd_client_t client) | |||
| 366 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; | 398 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; |
| 367 | 399 | ||
| 368 | plist_t dict = plist_new_dict(); | 400 | plist_t dict = plist_new_dict(); |
| 401 | plist_dict_add_label(dict, client->label); | ||
| 369 | plist_dict_insert_item(dict,"Request", plist_new_string("QueryType")); | 402 | plist_dict_insert_item(dict,"Request", plist_new_string("QueryType")); |
| 370 | 403 | ||
| 371 | log_dbg_msg(DBGMASK_LOCKDOWND, "%s: called\n", __func__); | 404 | log_dbg_msg(DBGMASK_LOCKDOWND, "%s: called\n", __func__); |
| @@ -409,6 +442,7 @@ lockdownd_error_t lockdownd_get_value(lockdownd_client_t client, const char *dom | |||
| 409 | 442 | ||
| 410 | /* setup request plist */ | 443 | /* setup request plist */ |
| 411 | dict = plist_new_dict(); | 444 | dict = plist_new_dict(); |
| 445 | plist_dict_add_label(dict, client->label); | ||
| 412 | if (domain) { | 446 | if (domain) { |
| 413 | plist_dict_insert_item(dict,"Domain", plist_new_string(domain)); | 447 | plist_dict_insert_item(dict,"Domain", plist_new_string(domain)); |
| 414 | } | 448 | } |
| @@ -470,6 +504,7 @@ lockdownd_error_t lockdownd_set_value(lockdownd_client_t client, const char *dom | |||
| 470 | 504 | ||
| 471 | /* setup request plist */ | 505 | /* setup request plist */ |
| 472 | dict = plist_new_dict(); | 506 | dict = plist_new_dict(); |
| 507 | plist_dict_add_label(dict, client->label); | ||
| 473 | if (domain) { | 508 | if (domain) { |
| 474 | plist_dict_insert_item(dict,"Domain", plist_new_string(domain)); | 509 | plist_dict_insert_item(dict,"Domain", plist_new_string(domain)); |
| 475 | } | 510 | } |
| @@ -527,6 +562,7 @@ lockdownd_error_t lockdownd_remove_value(lockdownd_client_t client, const char * | |||
| 527 | 562 | ||
| 528 | /* setup request plist */ | 563 | /* setup request plist */ |
| 529 | dict = plist_new_dict(); | 564 | dict = plist_new_dict(); |
| 565 | plist_dict_add_label(dict, client->label); | ||
| 530 | if (domain) { | 566 | if (domain) { |
| 531 | plist_dict_insert_item(dict,"Domain", plist_new_string(domain)); | 567 | plist_dict_insert_item(dict,"Domain", plist_new_string(domain)); |
| 532 | } | 568 | } |
| @@ -636,10 +672,11 @@ lockdownd_error_t lockdownd_get_device_name(lockdownd_client_t client, char **de | |||
| 636 | * | 672 | * |
| 637 | * @param phone The iPhone to create a lockdownd client for | 673 | * @param phone The iPhone to create a lockdownd client for |
| 638 | * @param client The pointer to the location of the new lockdownd_client | 674 | * @param client The pointer to the location of the new lockdownd_client |
| 675 | * @param label The label to use for communication. Usually the program name | ||
| 639 | * | 676 | * |
| 640 | * @return an error code (LOCKDOWN_E_SUCCESS on success) | 677 | * @return an error code (LOCKDOWN_E_SUCCESS on success) |
| 641 | */ | 678 | */ |
| 642 | lockdownd_error_t lockdownd_client_new(iphone_device_t device, lockdownd_client_t *client) | 679 | lockdownd_error_t lockdownd_client_new(iphone_device_t device, lockdownd_client_t *client, const char *label) |
| 643 | { | 680 | { |
| 644 | if (!client) | 681 | if (!client) |
| 645 | return LOCKDOWN_E_INVALID_ARG; | 682 | return LOCKDOWN_E_INVALID_ARG; |
| @@ -659,6 +696,7 @@ lockdownd_error_t lockdownd_client_new(iphone_device_t device, lockdownd_client_ | |||
| 659 | client_loc->in_SSL = 0; | 696 | client_loc->in_SSL = 0; |
| 660 | client_loc->session_id = NULL; | 697 | client_loc->session_id = NULL; |
| 661 | client_loc->uuid = NULL; | 698 | client_loc->uuid = NULL; |
| 699 | client_loc->label = strdup(label); | ||
| 662 | 700 | ||
| 663 | if (LOCKDOWN_E_SUCCESS != lockdownd_query_type(client_loc)) { | 701 | if (LOCKDOWN_E_SUCCESS != lockdownd_query_type(client_loc)) { |
| 664 | log_debug_msg("%s: QueryType failed in the lockdownd client.\n", __func__); | 702 | log_debug_msg("%s: QueryType failed in the lockdownd client.\n", __func__); |
| @@ -741,6 +779,7 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, char *host | |||
| 741 | /* Setup Pair request plist */ | 779 | /* Setup Pair request plist */ |
| 742 | dict = plist_new_dict(); | 780 | dict = plist_new_dict(); |
| 743 | dict_record = plist_new_dict(); | 781 | dict_record = plist_new_dict(); |
| 782 | plist_dict_add_label(dict, client->label); | ||
| 744 | plist_dict_insert_item(dict,"PairRecord", dict_record); | 783 | plist_dict_insert_item(dict,"PairRecord", dict_record); |
| 745 | 784 | ||
| 746 | plist_dict_insert_item(dict_record, "DeviceCertificate", plist_new_data((const char*)device_cert.data, device_cert.size)); | 785 | plist_dict_insert_item(dict_record, "DeviceCertificate", plist_new_data((const char*)device_cert.data, device_cert.size)); |
| @@ -833,6 +872,7 @@ lockdownd_error_t lockdownd_enter_recovery(lockdownd_client_t client) | |||
| 833 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; | 872 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; |
| 834 | 873 | ||
| 835 | plist_t dict = plist_new_dict(); | 874 | plist_t dict = plist_new_dict(); |
| 875 | plist_dict_add_label(dict, client->label); | ||
| 836 | plist_dict_insert_item(dict,"Request", plist_new_string("EnterRecovery")); | 876 | plist_dict_insert_item(dict,"Request", plist_new_string("EnterRecovery")); |
| 837 | 877 | ||
| 838 | log_dbg_msg(DBGMASK_LOCKDOWND, "%s: telling device to enter recovery mode\n", __func__); | 878 | log_dbg_msg(DBGMASK_LOCKDOWND, "%s: telling device to enter recovery mode\n", __func__); |
| @@ -868,6 +908,7 @@ lockdownd_error_t lockdownd_goodbye(lockdownd_client_t client) | |||
| 868 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; | 908 | lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; |
| 869 | 909 | ||
| 870 | plist_t dict = plist_new_dict(); | 910 | plist_t dict = plist_new_dict(); |
| 911 | plist_dict_add_label(dict, client->label); | ||
| 871 | plist_dict_insert_item(dict,"Request", plist_new_string("Goodbye")); | 912 | plist_dict_insert_item(dict,"Request", plist_new_string("Goodbye")); |
| 872 | 913 | ||
| 873 | log_dbg_msg(DBGMASK_LOCKDOWND, "%s: called\n", __func__); | 914 | log_dbg_msg(DBGMASK_LOCKDOWND, "%s: called\n", __func__); |
| @@ -1050,6 +1091,7 @@ lockdownd_error_t lockdownd_start_ssl_session(lockdownd_client_t client, const c | |||
| 1050 | 1091 | ||
| 1051 | /* Setup DevicePublicKey request plist */ | 1092 | /* Setup DevicePublicKey request plist */ |
| 1052 | dict = plist_new_dict(); | 1093 | dict = plist_new_dict(); |
| 1094 | plist_dict_add_label(dict, client->label); | ||
| 1053 | plist_dict_insert_item(dict,"HostID", plist_new_string(HostID)); | 1095 | plist_dict_insert_item(dict,"HostID", plist_new_string(HostID)); |
| 1054 | plist_dict_insert_item(dict,"Request", plist_new_string("StartSession")); | 1096 | plist_dict_insert_item(dict,"Request", plist_new_string("StartSession")); |
| 1055 | 1097 | ||
| @@ -1080,6 +1122,7 @@ lockdownd_error_t lockdownd_start_ssl_session(lockdownd_client_t client, const c | |||
| 1080 | /* start session again */ | 1122 | /* start session again */ |
| 1081 | plist_free(dict); | 1123 | plist_free(dict); |
| 1082 | dict = plist_new_dict(); | 1124 | dict = plist_new_dict(); |
| 1125 | plist_dict_add_label(dict, client->label); | ||
| 1083 | plist_dict_insert_item(dict,"HostID", plist_new_string(HostID)); | 1126 | plist_dict_insert_item(dict,"HostID", plist_new_string(HostID)); |
| 1084 | plist_dict_insert_item(dict,"Request", plist_new_string("StartSession")); | 1127 | plist_dict_insert_item(dict,"Request", plist_new_string("StartSession")); |
| 1085 | 1128 | ||
| @@ -1277,6 +1320,7 @@ lockdownd_error_t lockdownd_start_service(lockdownd_client_t client, const char | |||
| 1277 | host_id = NULL; | 1320 | host_id = NULL; |
| 1278 | 1321 | ||
| 1279 | dict = plist_new_dict(); | 1322 | dict = plist_new_dict(); |
| 1323 | plist_dict_add_label(dict, client->label); | ||
| 1280 | plist_dict_insert_item(dict,"Request", plist_new_string("StartService")); | 1324 | plist_dict_insert_item(dict,"Request", plist_new_string("StartService")); |
| 1281 | plist_dict_insert_item(dict,"Service", plist_new_string(service)); | 1325 | plist_dict_insert_item(dict,"Service", plist_new_string(service)); |
| 1282 | 1326 | ||
diff --git a/src/lockdown.h b/src/lockdown.h index 931623a..6dac391 100644 --- a/src/lockdown.h +++ b/src/lockdown.h | |||
| @@ -34,6 +34,7 @@ struct lockdownd_client_int { | |||
| 34 | int in_SSL; | 34 | int in_SSL; |
| 35 | char *session_id; | 35 | char *session_id; |
| 36 | char *uuid; | 36 | char *uuid; |
| 37 | char *label; | ||
| 37 | }; | 38 | }; |
| 38 | 39 | ||
| 39 | lockdownd_error_t lockdownd_get_device_public_key(lockdownd_client_t client, gnutls_datum_t * public_key); | 40 | lockdownd_error_t lockdownd_get_device_public_key(lockdownd_client_t client, gnutls_datum_t * public_key); |
