/**********************************************************************
 * New Provider program for TechInfo
 * by Bruce Lewis
 *
 * $Author: brlewis $
 * $Source: /mit/techinfodev/src/util/RCS/newprov.c,v $
 * $Header: /mit/techinfodev/src/util/RCS/newprov.c,v 1.2 1995/04/10 20:56:19 brlewis Exp $
 *
 * Copyright 1993 by the Massachusetts Institute of Technology.
 *
 * For copying and distribution information, please see the file
 * <mit-copyright.h>.
 **********************************************************************/
#include <mit-copyright.h>

static char rcsid_newprov_c[] = "$Header: /mit/techinfodev/src/util/RCS/newprov.c,v 1.2 1995/04/10 20:56:19 brlewis Exp $";

#define ABORT { com_err(argv[0], code, "(%s)", ti_context); exit(1); }
#define USAGEFMT "Usage: %s [-debug] [-server H] [-port P] source:user ...\n"
#define Debug(x) if (debugf) { printf x; }
int quietf=0, debugf = 0;

#include <stdio.h>
#include <string.h>
#include <ti/ti.h>

main(argc, argv)
     int argc;
     char *argv[];
{
  long code;
  int arg, prov;
  char *server=NULL, *port=NULL;
  char *providers[256];
  int nproviders = 0;
  TI *tp;

  /* parse arguments */
  for(arg=1; arg<argc; arg++)
    {
      if (argv[arg][0] == '-')
	{
	  if (!strcmp(argv[arg], "-debug"))
	    {
	      debugf = 1;
	      continue;
	    }
	  if (!strcmp(argv[arg], "-quiet"))
	    {
	      quietf = 1;
	      continue;
	    }
	  if (!strcmp(argv[arg], "-server"))
	    {
	      server = argv[++arg];
	      Debug(("Server: %s\n", server));
	      continue;
	    }
	  if (!strcmp(argv[arg], "-port"))
	    {
	      port = argv[++arg];
	      Debug(("Port: %s\n", port));
	      continue;
	    }
	  fprintf(stderr, USAGEFMT, argv[0]);
	  exit(1);
	}
      /* check that arg is of form source:user */
      if (!strchr(argv[arg], ':'))
	{
	  fprintf(stderr, USAGEFMT, argv[0]);
	  exit(1);
	}
      providers[nproviders++] = argv[arg];
    }

  /* make sure at least one provider was specified */
  if (!nproviders)
    {
      fprintf(stderr, USAGEFMT, argv[0]);
      exit(1);
    }

  /* connect to the TechInfo server */
  if (code=ti_open(server, port, &tp)) ABORT;
  Debug(("Connected to %s %s\n", ti_host(tp), ti_port(tp)));

  /* authenticate */
  if (code=ti_auth(tp, TI_KERBEROS, "")) ABORT;
  Debug(("Primary source: %s\n", ti_source1(tp)));

  /* add providers */
  for(prov=0; prov < nproviders; prov++)
    {
      char *user;

      user = strchr(providers[prov], ':');
      *user++ = '\0';
      if (code = ti_newprov(tp, providers[prov], user, TI_KERBEROS))
	ABORT;
      if (!quietf)
	printf("Added user \"%s\" to source \"%s\".\n", user, providers[prov]);
    }

  /* done */
  ti_close(tp);
  exit(0);
}
