+#ifndef lint
+static char *rcsid = "$Header: xnscreds.c,v 1.2 87/07/28 08:41:13 ed Exp $";
+#endif lint
+
+/*
+ * Copyright (c) 1986, 1987 Xerox Corporation.
+ */
+
+/*
+ * $Log: xnscreds.c,v $
+ * Revision 1.2 87/07/28 08:41:13 ed
+ * fprintf to stderr not stdin (how did it work?).
+ *
+ * Revision 1.1 87/03/17 16:28:14 ed
+ * Initial revision
+ *
+ *
+ */
+
+#include <stdio.h>
+#include <xnscourier/Authentication2.h>
+
+int authenticate= 0;
+int verbose= 0;
+
+main(argc, argv)
+int argc;
+char *argv[];
+{
+ char name[128];
+ char *pwd, *cp;
+ char *getXNSpass(), *getenv(), *index();
+ Cardinal passwd, buffer;
+ int csh, i;
+ FILE *tty, *fopen();
+ Authentication2_Credentials credentials;
+ Authentication2_Verifier verifier;
+ Authentication2_ThreePartName defaultobjname, username;
+ Authentication2_ThreePartName CH_StringToName();
+
+ static char *options= "av";
+ static char *usage= "Usage: %s [-a] [-v]\n";
+
+ extern int optind;
+ extern char *optarg;
+ int opt;
+
+ if ( !isatty(fileno(stdin)) ) {
+ fprintf(stderr, "\nMust be run from terminal\n");
+ exit(1);
+ }
+
+ if ( argc > 3 ) {
+ fprintf(stderr, usage, argv[0]);
+ exit(1);
+ }
+
+ while ( (opt= getopt(argc, argv, options)) != EOF ) {
+ switch (opt) {
+ case 'a' :
+ authenticate++;
+ break;
+ case 'v' :
+ verbose++;
+ break;
+
+ default :
+ fprintf(stderr, "Invalid command option -%c\n", opt);
+ exit(1);
+ }
+ }
+
+ if ( (tty= fopen("/dev/tty", "r+")) == NULL ) {
+ tty= stdin;
+ } else {
+ setbuf(tty, (char *)NULL);
+ }
+ fprintf(stderr, "Enter XNS name: ");
+ fgets(name, sizeof(name), tty);
+ if ( (cp= index(name, '\n')) )
+ *cp= '\0';
+
+ pwd= getXNSpass("Enter XNS password: ");
+ fclose(tty);
+
+ CH_NameDefault(&defaultobjname);
+ username= CH_StringToName(name, &defaultobjname);
+ MakeSimpleCredsAndVerifier(&username, pwd, &credentials, &verifier, 0);
+
+ if ( authenticate ) {
+ if ( verbose ) {
+ fprintf(stderr, "Validating XNS credentials\n");
+ }
+
+ if ( !Auth_CredCheck(credentials, verifier) ) {
+ fprintf(stderr, "Invalid XNS credentials\n");
+ exit(1);
+ }
+ }
+
+ passwd= verifier.sequence[0];
+
+ csh= 0;
+
+ if ( (cp= getenv("SHELL")) && (i= strlen(cp)) >= 3 ) {
+ csh= (strcmp(&cp[i-3], "csh") ? 0 : 1);
+ }
+
+ if ( !csh )
+ fprintf(stdout, "export XNSNAME XNSPASSWD\n");
+ else
+ fprintf(stdout, "set noglob;\n");
+
+ if ( csh ) {
+ fprintf(stdout, "setenv XNSNAME %s ;\n", name);
+ fprintf(stdout, "setenv XNSPASSWD %d ;\n", passwd);
+ fprintf(stdout, "unset noglob;\n");
+ } else {
+ fprintf(stdout, "XNSNAME=%s ;\n", name);
+ fprintf(stdout, "XNSPASSWD=%d ;\n", passwd);
+ }
+
+}
+