#ifndef lint static char *rcsid = "$Header: MakeSecondaryCreds.c,v 1.5 87/04/16 15:47:29 ed Exp $"; #endif lint /* * Copyright (c) 1986, 1987 Xerox Corp. */ /* * $Log: MakeSecondaryCreds.c,v $ * Revision 1.5 87/04/16 15:47:29 ed * length becomes a Cardinal. * * Revision 1.4 87/03/31 14:20:31 ed * Prompt with host name. * * Revision 1.3 87/03/27 15:21:10 ed * Corrected missing argument on index(). * * Revision 1.2 87/03/18 08:42:08 ed * Minor changes. * * Revision 1.1 86/12/31 11:26:19 ed * Initial revision * * */ #include <stdio.h> #include <sys/time.h> #include <sys/param.h> #include <sys/stat.h> #include <netns/ns.h> #include <netns/sp.h> #include <xnscourier/FilingSubset1.h> #include <xnscourier/CH.h> MakeSecondaryCreds(host, user, pwd, creds) char *host; char *user; char *pwd; FilingSubset1_SecondaryCredentials *creds; { Cardinal length; Unspecified buf[2048], *bp; static FilingSubset1_SecondaryItem items[2]; FILE *tty; char *cp, buffer[128], *index(), *getXNSpass(); char *userpwd, *username; if ( user == 0 ) { if ( (tty= fopen("/dev/tty", "r+")) == NULL ) tty= stdin; else setbuf(tty, (char *)NULL); fprintf(tty, "Enter %s username: ", host); fgets(buffer, sizeof(buffer), tty); if ( (cp= index(buffer, '\n')) ) *cp= '\0'; username= buffer; fclose(tty); } else { username= user; } if ( pwd == 0 ) { char prompt[100]; sprintf(prompt,"Enter %s password: ", host); userpwd= getXNSpass(prompt); } else { userpwd= pwd; } if ( creds != 0 ) { creds->designator= FilingSubset1_simple; items[0].type= FilingSubset1_userName; items[0].value.sequence= Allocate(sizeof_String(&username)); bp= buf + sizeof_Cardinal(length); length= externalize_String(&username, bp); externalize_Cardinal(&length, buf); internalize_Clearinghouse3_Item(&(items[0].value), buf); items[1].type= FilingSubset1_userPassword; items[1].value.sequence= Allocate(sizeof_String(&userpwd)); bp= buf + sizeof_Cardinal(length); length= externalize_String(&userpwd, bp); externalize_Cardinal(&length, buf); internalize_Clearinghouse3_Item(&(items[1].value), buf); creds->designator= FilingSubset1_simple; creds->FilingSubset1_simple_case.length= 2; creds->FilingSubset1_simple_case.sequence= items; } return; }