+/* $Id$
+ *
+ * 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("$Header$");
+
+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)\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);
+}