/* $Id: genwords.pc 3956 2010-01-05 20:56:56Z zacheiss $
 *
 * Utility program to generate magic words for a given ID
 *
 * Copyright (C) 1998 by the Massachusetts Institute of Technology
 * For copying and distribution information, please see the file
 * <mit-copyright.h>.
 *
 */

#include <mit-copyright.h>
#include <moira.h>
#include <moira_schema.h>
#include "reg_svr.h"

#include <stdio.h>
#include <stdlib.h>

EXEC SQL INCLUDE sqlca;

RCSID("$HeadURL: svn+ssh://svn.mit.edu/moira/trunk/moira/reg_svr/genwords.pc $ $Id: genwords.pc 3956 2010-01-05 20:56:56Z zacheiss $");

int main(int argc, char **argv)
{
  char *words[6];
  int verb;

  if (argc > 1 && !strcmp(argv[1], "-v"))
    {
      verb++;
      argv++;
      argc--;
    }

  if (argc != 2)
    {
      fprintf(stderr, "Usage: genwords [-v] id\n");
      exit(1);
    }

  if (!read_hmac_key())
    {
      fprintf(stderr, "Couldn't read hmac key\n");
      exit(1);
    }

  getwordlist(argv[1], words);
  if (verb)
    {
      EXEC SQL BEGIN DECLARE SECTION;
      char first[USERS_FIRST_SIZE], middle[USERS_MIDDLE_SIZE];
      char last[USERS_LAST_SIZE], *id, *database = "moira";
      EXEC SQL END DECLARE SECTION;

      EXEC SQL CONNECT :database IDENTIFIED BY :database;

      id = argv[1];
      EXEC SQL SELECT first, middle, last INTO :first, :middle, :last
	FROM users WHERE clearid = :id;
      if (sqlca.sqlcode)
	{
	  sprintf(first, "%d", sqlca.sqlcode);
	  *middle = *last = '\0';
	}
      else
	{
	  strtrim(first);
	  strtrim(middle);
	  strtrim(last);
	}

      printf("(%s%s%s %s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) dopage\n",
	     first, *middle ? " " : "", middle, last, id,
	     words[0], words[1], words[2], words[3], words[4], words[5]);
    }
  else
    {
      printf("%s %s %s %s %s %s\n", words[0], words[1], words[2],
	     words[3], words[4], words[5]);
    }
}

/* used by words.c */
void *xmalloc(size_t size)
{
  /* we won't run out of memory here */
  return malloc(size);
}
