webpg-npapi 0.6.1
|
Signs the UID index of the specified keyid using the signing key with_keyid.
Definition at line 1681 of file webpgPluginAPI.cpp. References get_gpgme_ctx(), get_preference(), and gpgSetPreference(). Referenced by webpgPluginAPI(). { gpgme_ctx_t ctx = get_gpgme_ctx(); gpgme_error_t err; gpgme_data_t out = NULL; gpgme_key_t key = NULL; FB::VariantMap result; current_uid = i_to_str(sign_uid); /* set the default key to the with_keyid gpgSetPreference returns the orginal value (if any) of the 'default-key' configuration parameter. We will put this into a variable so we can restore the setting when our UID Signing operation is complete (or failed) */ /* collect the original value so we can restore when done */ std::string original_value = get_preference("default-key"); webpgPluginAPI::gpgSetPreference("default-key", (char *) with_keyid.c_str()); /* Release the context and create it again to catch the changes */ gpgme_release (ctx); ctx = get_gpgme_ctx(); err = gpgme_op_keylist_start (ctx, keyid.c_str(), 0); if (err != GPG_ERR_NO_ERROR) result = get_error_map(__func__, gpgme_err_code (err), gpgme_strerror (err), __LINE__, __FILE__); err = gpgme_op_keylist_next (ctx, &key); if (err != GPG_ERR_NO_ERROR) result = get_error_map(__func__, gpgme_err_code (err), gpgme_strerror (err), __LINE__, __FILE__); err = gpgme_op_keylist_end (ctx); if (err != GPG_ERR_NO_ERROR) result = get_error_map(__func__, gpgme_err_code (err), gpgme_strerror (err), __LINE__, __FILE__); err = gpgme_data_new (&out); if (err != GPG_ERR_NO_ERROR) result = get_error_map(__func__, gpgme_err_code (err), gpgme_strerror (err), __LINE__, __FILE__); edit_status = "gpgSignUID(keyid='" + keyid + "', sign_uid='" + i_to_str(sign_uid) + "', with_keyid='" + with_keyid + "', local_only='" + i_to_str(local_only) + "', trust_sign='" + i_to_str(trust_sign) + "', trust_level='" + i_to_str(trust_level) + "');\n"; err = gpgme_op_edit (ctx, key, edit_fnc_sign, out, out); if (err != GPG_ERR_NO_ERROR) { if (err == GPGME_STATUS_ALREADY_SIGNED) { result = get_error_map(__func__, err, "The selected UID has already been signed with this key.", __LINE__, __FILE__); } else if (err == GPGME_STATUS_KEYEXPIRED) { result = get_error_map(__func__, err, "This key is expired; You cannot sign using an expired key.", __LINE__, __FILE__); } else if (err == GPGME_STATUS_SIGEXPIRED) { result = get_error_map(__func__, err, "This key is expired; You cannot sign using an expired key.", __LINE__, __FILE__); } else { result = get_error_map(__func__, gpgme_err_code (err), gpgme_strerror (err), __LINE__, __FILE__); } } /* if the original value was not empty, reset it to the previous value */ if (strcmp ((char *) original_value.c_str(), "0")) { webpgPluginAPI::gpgSetPreference("default-key", original_value); } FB::VariantMap response; response["error"] = false; response["result"] = "success"; gpgme_data_release (out); gpgme_key_unref (key); gpgme_release (ctx); if (result.size()) return result; return response; }
Here is the call graph for this function:
|