Exemple #1
0
/*
 * Check basic authentication.  Return zero if authenticated.
 * Return -1 if failed authentication.
 * Return 1 if authentication not attempted.
 */
int basicauth_check (XML *xml, char *path, char *req)
{
  int i, n;
  char *uid, *pw;
  char buf[DBUFSZ];

  debug ("request: %s\n", req);
  					/* is basic auth required?	*/
  if ((n = xml_count (xml, path)) < 1)
    return (0);
					/* get authentication header	*/
  uid = strstr (req, "Authorization: Basic ");
  if (uid == NULL)
    return (1);
  uid += 21;				/* limit b64 decoding		*/
  if ((pw = strchr (uid, '\n')) != NULL)
    *pw = 0;
  b64_decode (buf, uid);
  if (pw != NULL)			/* restore if limited		*/
    *pw = '\n';
  uid = buf;
  if ((pw = strchr (uid, ':')) == NULL)
    return (1);
  *pw++ = 0;

  for (i = 0; i < n; i++)		/* check against users		*/
  {
    if ((strcmp (uid, xml_getf (xml, "%s%c%d%cUserID", 
      path, xml->indx_sep, i, xml->path_sep)) == 0) &&
     (strcmp (pw, xml_getf (xml, "%s%c%d%cPassword", 
      path, xml->indx_sep, i, xml->path_sep)) == 0)) 
      return (0);
  }
  return (-1);
}
Exemple #2
0
/*
 * find the index for a repeated configuration item
 */
cfg_index (XML *xml, char *path, char *name)
{
  int i, n;
  char *ch;

  n = xml_count (xml, path);
  for (i = 0; i < n; i++)
  {
    if (!strcmp (name, xml_getf (xml, "%s[%d].Name", path, i)))
      return (i);
  }
  error ("Can't find name matching %s for %s\n", name, path);
  return (-1);
}
Exemple #3
0
/*
 * A folder polling processor for ebxml queues - register this with
 * the fpoller.
 *
 * This initializes and pushes a queue row.  Once queued it moves
 * the file to a processed point.
 *
 * xml - sender's configuration
 * prefix - xml path to this folder map
 * fname - file to be queued
 */
int ebxml_fprocessor (XML *xml, char *prefix, char *fname)
{
  struct stat st;
  QUEUE *q;
  QUEUEROW *r;
  char *ch;
  int pl;
  char qname[MAX_PATH],
       pid[PTIMESZ],
       buf[MAX_PATH];

  if (stat (fname, &st))
  {
    warn ("Can't access %s\n", fname);
    return (-1);
  }
  if (st.st_size == 0)
  {
    warn ("File %s empty... discarding\n", fname);
    unlink (fname);
    return (-1);
  }
  info ("Queuing ebXML folder %s for %s\n", fname, prefix);
  pl = strlen (prefix);
  /*
   * prep a file name
   */
  ppid (pid);
  sprintf (qname, "%s.%s", basename (fname), pid);

  /*
   * move file to processed folder
   */
  ppathf (buf, xml_getf (xml, "%sProcessed", prefix), "%s", qname);
  if (rename (fname, buf))
  {
    error ("Couldn't move %s to %s - %s\n", fname, buf, strerror (errno));
    return (-1);
  }

  /*
   * queue it up
   */
  ch = xml_getf (xml, "%sQueue", prefix);
  if ((q = queue_find (ch)) == NULL)
  {
    error ("Can't find queue for %s\n", ch);
    return (-1);
  }
  r = queue_row_alloc (q);
  sprintf (buf, "%s-%s", xml_getf (xml, "%sName", prefix), pid);
  queue_field_set (r, "MESSAGEID", buf);
  queue_field_set (r, "PAYLOADFILE", qname);
  queue_field_set (r, "DESTINATIONFILENAME", basename (fname));
  queue_field_set (r, "ROUTEINFO", xml_getf (xml, "%sRoute", prefix));
  queue_field_set (r, "SERVICE", xml_getf (xml, "%sService", prefix));
  queue_field_set (r, "ACTION", xml_getf (xml, "%sAction", prefix));
  queue_field_set (r, "ARGUMENTS", xml_getf (xml, "%sArguments", prefix));
  queue_field_set (r, "MESSAGERECIPIENT",
    xml_getf (xml, "%sRecipient", prefix));
  queue_field_set (r, "ENCRYPTION",
    *xml_getf (xml, "%sEncryption.Type", prefix) ? "yes" : "no");
  queue_field_set (r, "SIGNATURE", "no");
  queue_field_set (r, "PUBLICKEYLDAPADDRESS", "");
  queue_field_set (r, "PUBLICKEYLDAPBASEDN", "");
  queue_field_set (r, "PUBLICKEYLDAPDN", "");
  queue_field_set (r, "CERTIFICATEURL",
    xml_getf (xml, "%sEncryption.Unc", prefix));
  queue_field_set (r, "PROCESSINGSTATUS", "queued");
  queue_field_set (r, "TRANSPORTSTATUS", "");
  queue_field_set (r, "PRIORITY", "0");
  if (pl = queue_push (r) < 1)
  {
    error ("Failed queueing %s\n", fname);
    pl = -1;
  }
  queue_row_free (r);
  info ("ebXML folder %s for %s queueing completed\n", fname, prefix);
  return (pl);
}