|
|
Initial revision
#ifndef lint
static char *rcsid = "$Header: /var/lib/cvsd/repos/CSRG/43BSDTahoe/new/xns/examples/xnscreds/xnscreds.c,v 1.1 2018/04/24 16:12:58 root Exp $";
#endif lint
/*
* Copyright (c) 1986, 1987 Xerox Corporation.
*/
/*
* $Log: xnscreds.c,v $
* Revision 1.1 2018/04/24 16:12:58 root
* Initial revision
*
* 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);
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.