Beispiel #1
0
/* Send an OpenPGP key to all keyservers.  The key in {DATA,DATALEN}
   is expected in OpenPGP binary transport format.  */
gpg_error_t
ks_action_put (ctrl_t ctrl, const void *data, size_t datalen)
{
  gpg_error_t err = 0;
  gpg_error_t first_err = 0;
  int any_server = 0;
  uri_item_t uri;

  for (uri = ctrl->keyservers; !err && uri; uri = uri->next)
    {
      if (uri->parsed_uri->is_http)
        {
          any_server = 1;
          err = ks_hkp_put (ctrl, uri->parsed_uri, data, datalen);
          if (err)
            {
              first_err = err;
              err = 0;
            }
        }
    }

  if (!any_server)
    err = gpg_error (GPG_ERR_NO_KEYSERVER);
  else if (!err && first_err)
    err = first_err;
  return err;
}
Beispiel #2
0
/* Send an OpenPGP key to all keyservers.  The key in {DATA,DATALEN}
   is expected to be in OpenPGP binary transport format.  The metadata
   in {INFO,INFOLEN} is in colon-separated format (concretely, it is
   the output of 'for x in keys sigs; do gpg --list-$x --with-colons
   KEYID; done'.  This function may modify DATA and INFO.  If this is
   a problem, then the caller should create a copy.  */
gpg_error_t
ks_action_put (ctrl_t ctrl, uri_item_t keyservers,
	       void *data, size_t datalen,
	       void *info, size_t infolen)
{
  gpg_error_t err = 0;
  gpg_error_t first_err = 0;
  int any_server = 0;
  uri_item_t uri;

  (void) info;
  (void) infolen;

  for (uri = keyservers; !err && uri; uri = uri->next)
    {
      int is_http = uri->parsed_uri->is_http;
      int is_ldap = 0;

#if USE_LDAP
      is_ldap = (strcmp (uri->parsed_uri->scheme, "ldap") == 0
		|| strcmp (uri->parsed_uri->scheme, "ldaps") == 0
		|| strcmp (uri->parsed_uri->scheme, "ldapi") == 0);
#endif

      if (is_http || is_ldap)
        {
          any_server = 1;
#if USE_LDAP
	  if (is_ldap)
	    err = ks_ldap_put (ctrl, uri->parsed_uri, data, datalen,
			       info, infolen);
	  else
#endif
	    {
	      err = ks_hkp_put (ctrl, uri->parsed_uri, data, datalen);
	    }
          if (err)
            {
              first_err = err;
              err = 0;
            }
        }
    }

  if (!any_server)
    err = gpg_error (GPG_ERR_NO_KEYSERVER);
  else if (!err && first_err)
    err = first_err;
  return err;
}