/
umud/DOC/
umud/DOC/examples/
umud/DOC/internals/
umud/DOC/wizard/
umud/MISC/
umud/MISC/dbchk/
umud/RWHO/rwhod/
/*
	Copyright (C) 1991, Marcus J. Ranum. All rights reserved.
*/

#ifndef	lint
static	char	RCSid[] = "$Header: /usr/users/mjr/hacks/umud/RCS/login.c,v 1.3 91/08/29 17:24:03 mjr Exp $";
#endif

/* configure all options BEFORE including system stuff. */
#include	"config.h"


#include	"mud.h"
#include	"vars.h"
#include	"look.h"


/*
login is expected to do something intelligent with the line of
user information passed to it. the first word is assumed to be "connect"
or something like that. the second is the object-id, the third is
maybe a password.
*/
login(lp,whobuf)
char	*lp;
char	*whobuf;
{
	char	*opw;
	int	ac;
	char	*av[25];
	char	ab[MUDBUF];
	char	pbuf[MAXOID];

	ac = run_tokenize(lp,av,25,ab,sizeof(ab));

	if(ac == 1 && !strcmp(av[0],"QUIT"))
		return(-1);

	if(ac < 2 || ac > 3 || strlen(av[1]) > MAXOID - 2)
		return(0);

	(void)strcpy(whobuf,av[1]);

	if((opw = ut_getatt(av[1],0,typ_str,var_pass,(char *)0)) == (char *)0)
		return(0);

	if(*opw == '\0')
		return(1);

	/* no password given */
	if(ac != 3)
		return(0);

	/* password encryption is seeded with the object # as key */
	rot_init(av[1]);

	/* then the password plaintext is encrypted with it. */
	rot_decode(opw,pbuf);

	/* so it should match the plaintext password given us by the player */
	if(strcmp(av[2],pbuf))
		return(0);
	return(1);
}



void
welcome(who)
char	*who;
{
	char	*w;
	char	*linkmsg;

	say(who,"Welcome to UnterMUD ",version," (",mud_getname(),")\n",(char *)0);
	say_file(who,"NEWS/welcome.txt");

	w = ut_loc(who);
	if(!strcmp(w,"nowhere") && (linkmsg = ut_getatt(who,0,typ_str,var_linkmsg,(char *)0)) != (char *)0) {
		say(who,"You shouldn't be here. Go away.\n",(char *)0);
		say(who,linkmsg,"\n",(char *)0);
	} else {
		lookat(who,w,LOOK_NAME|LOOK_PLAY|LOOK_CONT);
		if(!ut_flagged(who,var_isdark))
		  ut_roombcast(w,who,ut_name(who)," has arrived.\n",(char *)0);
	}
}




/* WARNING!!! the calls to goodbye() actually may make more
Iob writes as a result of a player hangup WHILE RUNNING INSIDE io_sync()!
Do NOT do much in goodbye!() or madness may result.
*/
void
goodbye(w)
char	*w;
{
	if(!ut_flagged(w,var_isdark))
	  ut_roombcast(ut_loc(w),w,ut_name(w)," has disconnected.\n",(char *)0);
}