Exemplo n.º 1
0
unsigned long
get_new_mail_number(const char *name)
{
    long a;
    user_t *user;

    user = readuser(name);

    if (!user) {
	mono_errno = E_NOUSER;
	return -1;
    }
    user->mailnum++;
    a = user->mailnum;

    if (writeuser(user, 0) == -1) {
	xfree(user);
	return -1;
    }
    xfree(user);
    if (mono_return_pid(name) != -1) {
	if ((kill(mono_return_pid(name), SIGUSR2)) == -1) {
	    return -1;
	}
    }
    return a;
}
Exemplo n.º 2
0
void SaveCurrentUser(int inloggad, int nodnr)
{
	long tid;

	time(&tid);
	Servermem->inne[nodnr].senast_in=tid;
	writeuser(inloggad,&Servermem->inne[nodnr]);
        WriteUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad);
}
Exemplo n.º 3
0
int
change_QL(unsigned int quad_num, const char *QLname, int how)
{
    user_t *QL;
    int i, has_ql_flag;

    if ( quad_num > MAXQUADS) {
	mono_errno = E_NOQUAD;
	return -1;
    }
    if (mono_sql_u_check_user(QLname) == FALSE && how == 1) {
	mono_errno = E_NOUSER;
	return -1;
    }
    if ((QL = readuser(QLname)) == NULL)
	return -1;

    if (how > 0) {
	for (i = 0; i < 5; i++) {
	    /* if we're already marked */
	    if (QL->RA_rooms[i] == quad_num)
		break;
	    mono_sql_uf_add_host(QL->usernum, quad_num);
	    if (QL->RA_rooms[i] < 0) {
		QL->RA_rooms[i] = quad_num;
		break;
	    }
	}
	QL->flags |= US_ROOMAIDE;
    } else {
	has_ql_flag = 0;
	mono_sql_uf_remove_host(QL->usernum, quad_num);
	for (i = 0; i < 5; i++) {
	    if (QL->RA_rooms[i] == quad_num)
		QL->RA_rooms[i] = -1;
	    if (QL->RA_rooms[i] > 0)
		has_ql_flag++;
	}

	if (has_ql_flag == 0)
	    QL->flags &= ~US_ROOMAIDE;
	else
	    QL->flags |= US_ROOMAIDE;
    }

    if (writeuser(QL, 0) != 0) {
	xfree(QL);
	return -1;
    }
    xfree(QL);

    if (mono_return_pid(QLname) != -1)
	(void) kill(mono_return_pid(QLname), SIGUSR2);

    return 0;
}
Exemplo n.º 4
0
void SaveCurrentUser(int inloggad, int nodnr)
{
	long tid;

	time(&tid);
	Servermem->inne[nodnr].senast_in=tid;
	writeuser(inloggad,&Servermem->inne[nodnr]);
	writeuserbitmap(inloggad,Servermem->bitmaps[nodnr],0,temppek);
	SaveProgramCategory(inloggad);
}
Exemplo n.º 5
0
void
usergoto(int new_rm, int old_rm, int destructive_jump)
{				/* used by <G>oto and <j>ump - actually does the work */
    room_t here;

    curr_rm = new_rm;
    here = readquad(curr_rm);
    gotocurr();

    if (old_rm != curr_rm) {
	if (here.highest <= usersupp->lastseen[curr_rm]) {
	    skipping[curr_rm] = 0;
	    usersupp->lastseen[curr_rm] = here.highest;
	    mono_sql_ut_update_lastseen(usersupp->usernum, curr_rm, here.highest);
	    display_short_prompt();
	    cprintf(_("\1f\1w(\1g%ld messages\1w)\1a\n"), here.highest - here.lowest );
	} else {
	    if (usersupp->lastseen[curr_rm] < here.lowest) {
		usersupp->lastseen[curr_rm] = here.lowest;
		mono_sql_ut_update_lastseen(usersupp->usernum, curr_rm, here.lowest);
	    }
	    if (curr_rm && !skipping[curr_rm])	/* looks ugly at Docking Bay, don't bother */
		cprintf(_("\1f\1gRead next %s with unread messages.\n"), config.forum );
	    display_short_prompt();
	    if (skipping[curr_rm]) {
		cprintf(_("\1f\1w (\1gpreviously skipped\1w)"));
		skipping[curr_rm] = 0;
	    }
	    cprintf(_("\n\1f\1w(\1g%ld messages, %ld unread\1w)\1g  Read new messages.\1a\n"), here.highest - here.lowest, here.highest - usersupp->lastseen[curr_rm] );
	}
	if (new_quadinfo()) {
	    cprintf(_("\1f\1b*** \1gThe %s\1w<\1rI\1w>\1gnfo has changed\1b ***\1a\n"), config.forum);
	    writeuser(usersupp, 0);
	}
    }
    if ((skipping[old_rm] != 1) && (destructive_jump))
	mark_as_read(old_rm);

    usersupp->forget[curr_rm] = (-1);

    if (usersupp->generation[curr_rm] != quickroom.generation) {
	/* print the desc if the room has regenerated. */
	display_message(curr_rm, 0, DISPLAY_INFO);
	usersupp->generation[curr_rm] = quickroom.generation;
    }
    unseen = here.maxmsg - (here.highest - usersupp->lastseen[curr_rm]);

    if (here.highest == usersupp->lastseen[curr_rm])
	skipping[curr_rm] = 0;
    return;

}
Exemplo n.º 6
0
/*************************************************
* kickout()
* returns 1 on successfull kickout
*************************************************/
int
kickout(const char *user, unsigned int room)
{

    user_t *userP;
    room_t scratch;

    if (mono_sql_u_check_user(user) == FALSE) {
	mono_errno = E_NOUSER;
	return -1;
    }
    if ( room > MAXQUADS ) {
	mono_errno = E_NOQUAD;
	return -1;
    }
    read_forum( room, &scratch );
    userP = readuser(user);

    if (!userP) {
	mono_errno = E_NOUSER;
	return -1;
    }
    if (userP->priv & PRIV_WIZARD) {
	xfree(userP);
	return -1;
    }
    if (userP->generation[room] == (-5)) {
	xfree(userP);
	return -1;
    }
    userP->generation[room] = (-5);
    userP->forget[room] = scratch.generation;
    mono_sql_uf_add_kicked( room, userP->usernum );

    if (writeuser(userP, 0) != 0) {
	xfree(userP);
	return -1;
    }
    if (mono_return_pid(user) != -1)
	(void) kill(mono_return_pid(user), SIGUSR2);	/* READSELF-signal              */

    (void) log_it("rooms", "kicked %s out of %s>", userP->username, scratch.name);
    xfree(userP);
    return 1;
}
Exemplo n.º 7
0
void
forget()
{
    if (quickroom.flags & QR_NOZAP) {
	cprintf("\1f\1rCan not zap (forget) this %s.\1a\n", config.forum);
	return;
    }
    cprintf("\1f\1gAre you \1rsure \1gyou want to zap (forget) this %s?\1c ", config.forum);
    if (yesno() == NO)
	return;

    /* the actual zapping: 
     * backup the old generation number, so we get noticed if the room
     * changes to something completely new 
     */

    usersupp->forget[curr_rm] = quickroom.generation;
    usersupp->generation[curr_rm] = (-1);
    writeuser(usersupp, 0);
    gotonext();
}
Exemplo n.º 8
0
int
invite(const char *name, unsigned int room)
{

    user_t *user;
    room_t scratch;

    if (mono_sql_u_check_user(name) == FALSE)
	return -1;
    if ( (room > MAXQUADS) )
	return -1;

    user = readuser(name);

    if (user == NULL)
	return -1;

    read_forum( room, &scratch );

    if (user->generation[room] == scratch.generation) {
	xfree(user);
	return -1;
    }
    user->generation[room] = scratch.generation;
    user->forget[room] = -1;
    mono_sql_uf_add_invited( room, user->usernum );

    (void) writeuser(user, 0);

    if (mono_return_pid(name) != -1)
	(void) kill(mono_return_pid(name), SIGUSR2);

    (void) log_it("rooms", "someone invited %s to %s>", user->username,
		  scratch.name);

    xfree(user);
    return 0;
}
Exemplo n.º 9
0
void
zap_all()
{
    int i;
    room_t room;

    cprintf("\1f\1gAre you \1rsure \1gyou want to zap (forget) \1rALL\1g %s? (y/N) \1c ", config.forum_pl);
    if (yesno_default(NO) == NO)
	return;


    for (i = 0; i < MAXQUADS; i++) {
	if (i == 1)
	    continue;		/* mail */
	room = readquad(i);
	if (i_may_read_forum(i) && !(room.flags & QR_NOZAP)) {
	    usersupp->forget[i] = room.generation;
	    usersupp->generation[i] = -1;
	}
    }
    cprintf("\1g\1fZapped all quadrants.\n");
    writeuser(usersupp, 0);
    return;
}
Exemplo n.º 10
0
int __saveds __asm LIBEditUser(register __d0 LONG usernumber, register __a0 struct TagItem *taglist, register __a6 struct NiKomBase *NiKomBase)
{
	int i, userloggedin = -1, cacheduser = -1;
	ULONG tmp;
	struct User user;

	for(i=0;i<MAXNOD;i++)
		if(usernumber==NiKomBase->Servermem->inloggad[i]) break;

	if(i<MAXNOD)
	{
		memcpy(&user,&NiKomBase->Servermem->inne[i],sizeof(struct User));
		userloggedin = i;
	}
	else
	{
/*		for(i=0;i<MAXUSERSCACHED;i++)
			if(NiKomBase->Servermem->UserCache[i].usernumber != -1) break;
		
		if(i<MAXUSERSCACHED)
		{
			memcpy(&user,&NiKomBase->Servermem->UserCache[i].Usercached,sizeof(struct User));
			userloggedin = i;
		}
		else */
			if(readuser(usernumber,&user))
				return(-2);
	}

	if(GetTagData(US_Name,NULL,taglist))
		if(parsenamn((char *)GetTagData(US_Name,NULL,taglist),NiKomBase) == -1)
			strcpy(user.namn,(char *)GetTagData(US_Name,NULL,taglist));

	if(GetTagData(US_Street,NULL,taglist))
		strcpy(user.gata,(char *)GetTagData(US_Street,NULL,taglist));

	if(GetTagData(US_Address,NULL,taglist))
		strcpy(user.postadress,(char *)GetTagData(US_Address,NULL,taglist));

	if(GetTagData(US_Country,NULL,taglist))
		strcpy(user.land,(char *)GetTagData(US_Country,NULL,taglist));

	if(GetTagData(US_Phonenumber,NULL,taglist))
		strcpy(user.telefon,(char *)GetTagData(US_Phonenumber,NULL,taglist));

	if(GetTagData(US_OtherInfo,NULL,taglist))
		strcpy(user.annan_info,(char *)GetTagData(US_OtherInfo,NULL,taglist));

	if(GetTagData(US_Password,NULL,taglist))
		strcpy(user.losen,(char *)GetTagData(US_Password,NULL,taglist));
	
	if(GetTagData(US_Prompt,NULL,taglist))
		strcpy(user.prompt,(char *)GetTagData(US_Prompt,NULL,taglist));

	tmp = GetTagData(US_Status,-1L,taglist);
	if(tmp != -1L)
		user.status = tmp;
		
	tmp = GetTagData(US_Rader,-1L,taglist);
	if(tmp != -1L)
		user.rader = tmp;
	
	tmp = GetTagData(US_Protocol,-1L,taglist);
	if(tmp != -1L)
		user.protokoll = tmp;

	tmp = GetTagData(US_Tottid,-1L,taglist);
	if(tmp != -1L)
		user.tot_tid = tmp;
		
	tmp = GetTagData(US_FirstLogin,-1L,taglist);
	if(tmp != -1L)
		user.forst_in = tmp;
	
	tmp = GetTagData(US_LastLogin,-1L,taglist);	
	if(tmp != -1L)
		user.senast_in = tmp;
		
	tmp = GetTagData(US_Read,-1L,taglist);
	if(tmp != -1L)
		user.read = tmp;
	
	GetTagData(US_Written,-1L,taglist);
	if(tmp != -1L)
		user.skrivit = tmp;
	
	tmp = GetTagData(US_Flags,-1L,taglist);
	if(tmp != -1L)
		user.flaggor = tmp;
	
	tmp = GetTagData(US_Defarea,-1L,taglist);
	if(tmp != -1L)
		user.defarea = tmp;
	
	tmp = GetTagData(US_Charset,-1L,taglist);
	if(tmp != -1L)
		user.chrset = tmp;
	
	tmp = GetTagData(US_Uploads,-1L,taglist);
	if(tmp != -1L)
		user.upload = tmp;
	
	tmp = GetTagData(US_Downloads,-1L,taglist);
	if(tmp != -1L)
		user.download = tmp;
	
	tmp = GetTagData(US_Loggin,-1L,taglist);
	if(tmp != -1L)
		user.loggin = tmp;
	
	tmp = GetTagData(US_Shell,-1L,taglist);
	if(tmp != -1L)
		user.shell = tmp;

/* struct User {
   long tot_tid,forst_in,senast_in,read,skrivit,flaggor,textpek,brevpek,
      grupper,defarea,reserv2,chrset,reserv4,reserv5,upload,download,
      loggin,shell;
   char namn[41],gata[41],postadress[41],land[41],telefon[21],
      annan_info[61],losen[16],status,rader,protokoll,
      prompt[6],motratt[MAXMOTE/8],motmed[MAXMOTE/8],vote[MAXVOTE];
}; */


	if(i<MAXNOD)
		memcpy(&NiKomBase->Servermem->inne[i],&user,sizeof(struct User));
	else
	{
		if(writeuser(usernumber,&user)) return(-3);
	}

	return(usernumber);
}
Exemplo n.º 11
0
int andmot(void) {
	int motnr,going=TRUE,tillf,chng=FALSE,y,mad,clearmed,setratt,changed,x;
	struct ShortUser *userletpek;
	struct FidoDomain *domain;
	struct User skuser;
	struct Mote tempmote,*motpek;
	char tkn;
	if((motnr=parsemot(argument))==-1) {
		puttekn("\r\n\nFinns inget möte som heter så!\r\n\n",-1);
		return(0);
	} else if(motnr==-3) {
		puttekn("\r\n\nSkriv: Ändra Möte <mötesnamn>\r\n\n",-1);
		return(0);
	}
	motpek=getmotpek(motnr);
	if(!MayAdminConf(motnr, inloggad, &Servermem->inne[nodnr])) {
		puttekn("\r\n\nDu har ingen rätt att ändra på det mötet!\r\n\n",-1);
		return(0);
	}
	memcpy(&tempmote,motpek,sizeof(struct Mote));
	while(going) {
		sprintf(outbuffer,"\r\nNamn : (%s) ",tempmote.namn);
		puttekn(outbuffer,-1);
		if(getstring(EKO,40,NULL)) return(1);
		if(inmat[0]) {
			if((tillf=parsemot(inmat))!=-1 && tillf!=motnr) puttekn("\r\n\nMötet finns redan!\r\n",-1);
			else {
				strncpy(tempmote.namn,inmat,40);
				tempmote.namn[40] = 0;
				going=FALSE;
			}
		} else going=FALSE;
	}
	sprintf(outbuffer,"\r\nMAD (%s) ",getusername(tempmote.mad));
	puttekn(outbuffer,-1);
	if(getstring(EKO,40,NULL)) return(1);
	if(inmat[0]) {
		if((mad=parsenamn(inmat))==-1) puttekn("\r\nFinns ingen sådan användare!",-1);
		else tempmote.mad=mad;
	}
	sprintf(outbuffer,"\r\nSorteringsvärde : (%d) ",tempmote.sortpri);
	puttekn(outbuffer,-1);
	if(getstring(EKO,10,NULL)) return(1);
	if(inmat[0]) {
		tillf=atoi(inmat);
		if(tillf<0 || tillf>LONG_MAX) {
			sprintf(outbuffer,"\n\rVärdet måste ligga mellan 0 och %d",LONG_MAX);
			puttekn(outbuffer,-1);
		}
		else tempmote.sortpri=tillf;
	}
	puttekn("\r\nSka mötet vara slutet? ",-1);
	if(!jaellernej('j','n',tempmote.status & SLUTET ? 1 : 2)) {
		puttekn("Öppet",-1);
		if(tempmote.status & SLUTET) {
			chng=TRUE;
			tempmote.status &= ~SLUTET;
		}
	} else {
		puttekn("Slutet",-1);
		if(!(tempmote.status & SLUTET)) {
			chng=TRUE;
			tempmote.status |= SLUTET;
		}
		puttekn("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n",-1);
		if(editgrupp((char *)&tempmote.grupper)) return(1);
	}
	puttekn("\r\nSka mötet vara skrivskyddat? ",-1);
	if(!jaellernej('j','n',tempmote.status & SKRIVSKYDD ? 1 : 2)) {
		puttekn("Oskyddat",-1);
		tempmote.status &= ~SKRIVSKYDD;
	} else {
		tempmote.status |= SKRIVSKYDD;
		puttekn("Skyddat",-1);
	}
	puttekn("\r\nSka mötet vara kommentarsskyddat? ",-1);
	if(!jaellernej('j','n',tempmote.status & KOMSKYDD ? 1 : 2)) {
		puttekn("Oskyddat",-1);
		tempmote.status &= ~KOMSKYDD;
	} else {
		tempmote.status |= KOMSKYDD;
		puttekn("Skyddat",-1);
	}
	puttekn("\r\nSka mötet vara hemligt? ",-1);
	if(!jaellernej('j','n',tempmote.status & HEMLIGT ? 1 : 2)) {
		puttekn("Ej hemligt",-1);
		tempmote.status &= ~HEMLIGT;
	} else {
		tempmote.status |= HEMLIGT;
		puttekn("Hemligt",-1);
	}
	if(!(tempmote.status & SLUTET)) {
		puttekn("\n\rSka alla användare bli medlemmar automagiskt? ",-1);
		if(!jaellernej('j','n',tempmote.status & AUTOMEDLEM ? 1 : 2)) {
			puttekn("Nej",-1);
			if(tempmote.status & AUTOMEDLEM) {
				chng=TRUE;
				tempmote.status &= ~AUTOMEDLEM;
			}
		} else {
			puttekn("Ja",-1);
			tempmote.status |= AUTOMEDLEM;
		}
		puttekn("\r\nSka rättigheterna styra skrivmöjlighet? ",-1);
		if(!jaellernej('j','n',tempmote.status & SKRIVSTYRT ? 1 : 2)) {
			puttekn("Nej",-1);
			if(tempmote.status & SKRIVSTYRT) chng=TRUE;
			tempmote.status &= ~SKRIVSTYRT;
		} else {
			puttekn("Ja",-1);
			if(!(tempmote.status & SKRIVSTYRT)) chng=TRUE;
			tempmote.status |= SKRIVSTYRT;
			puttekn("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n",-1);
			if(editgrupp((char *)&tempmote.grupper)) return(1);
		}
	} else tempmote.status &= ~(AUTOMEDLEM | SKRIVSTYRT);
	puttekn("\r\nSka mötet bara vara åtkomligt från ARexx? ",-1);
	if(!jaellernej('j','n',tempmote.status & SUPERHEMLIGT ? 1 : 2)) {
		puttekn("Nej",-1);
		tempmote.status &= ~SUPERHEMLIGT;
	} else {
		tempmote.status |= SUPERHEMLIGT;
		puttekn("Ja",-1);
	}
	if(tempmote.type == MOTE_FIDO) {
		sprintf(outbuffer,"\n\rKatalog: (%s) ",tempmote.dir);
		puttekn(outbuffer,-1);
		getstring(EKO,79,NULL);
		if(inmat[0]) strcpy(tempmote.dir,inmat);
		sprintf(outbuffer,"\n\rTag-namn: (%s) ",tempmote.tagnamn);
		puttekn(outbuffer,-1);
		getstring(EKO,49,NULL);
		if(inmat[0]) strcpy(tempmote.tagnamn,inmat);
		sprintf(outbuffer,"\n\rOrigin: (%s) ",tempmote.origin);
		puttekn(outbuffer,-1);
		getstring(EKO,69,NULL);
		if(inmat[0]) strcpy(tempmote.origin,inmat);
		sprintf(outbuffer,"\n\n\r%c1: ISO Latin 1 (ISO 8859-1)\n\r",tempmote.charset==CHRS_LATIN1 ? '*' : ' ');
		puttekn(outbuffer,-1);
		sprintf(outbuffer,"%c2: SIS-7 (SF7, 'Måsvingar')\n\r",tempmote.charset==CHRS_SIS7 ? '*' : ' ');
		puttekn(outbuffer,-1);
		sprintf(outbuffer,"%c3: IBM CodePage\n\r",tempmote.charset==CHRS_CP437 ? '*' : ' ');
		puttekn(outbuffer,-1);
		sprintf(outbuffer,"%c4: Mac\n\n\r",tempmote.charset==CHRS_MAC ? '*' : ' ');
		puttekn(outbuffer,-1);
		puttekn("Val: ",-1);
		for(;;) {
			tkn=gettekn();
			if(tkn=='1' || tkn=='2' || tkn=='3' || tkn=='4' || tkn=='\r') break;
		}
		switch(tkn) {
			case '1' : tempmote.charset = CHRS_LATIN1; break;
			case '2' : tempmote.charset = CHRS_SIS7; break;
			case '3' : tempmote.charset = CHRS_CP437; break;
			case '4' : tempmote.charset = CHRS_MAC; break;
			default: break;
		}
		puttekn("\n\n\r",-1);
		for(x=0;x<10;x++) {
			if(!Servermem->fidodata.fd[x].domain[0]) break;
			sprintf(outbuffer,"%c%3d: %s (%d:%d/%d.%d)\n\r",tempmote.domain == Servermem->fidodata.fd[x].nummer ? '*' : ' ',
			                                             Servermem->fidodata.fd[x].nummer,
			                                             Servermem->fidodata.fd[x].domain,
			                                             Servermem->fidodata.fd[x].zone,
			                                             Servermem->fidodata.fd[x].net,
			                                             Servermem->fidodata.fd[x].node,
			                                             Servermem->fidodata.fd[x].point);
			puttekn(outbuffer,-1);
		}
		if(!x) {
			puttekn("\n\rDu måste definiera en domän i NiKomFido.cfg först!\n\r",-1);
			return(0);
		}
		for(;;) {
			if(getstring(EKO,10,NULL)) return(1);
			if(!inmat[0]) break;
			if(domain=getfidodomain(atoi(inmat),0)) {
				tempmote.domain=domain->nummer;
				break;
			} else puttekn("\n\rFinns ingen sådan domän.\n\r",-1);
		}
	}


	puttekn("\r\n\nÄr allt korrekt? ",-1);
	if(jaellernej('j','n',1)) puttekn("Ja\n\n\r",-1);
	else {
		puttekn("Nej\r\n\n",-1);
		return(0);
	}
	if(chng) {
		puttekn("Users.dat kommer nu att gås igenom för att nollställa medlemskap\n\r",-1);
		puttekn("och rättigheter som om mötet var nyskapat.\n\n\r",-1);
		puttekn("Är ändringarna fortfarande korrekta? ",-1);
		if(!jaellernej('j','n',1)) {
			puttekn("Nej\n\r",-1);
			return(0);
		}
		puttekn("Ja\n\r",-1);
	}
	memcpy(motpek,&tempmote,sizeof(struct Mote));
	writemeet(motpek);
	if(!chng) return(0);
	if((tempmote.status & AUTOMEDLEM) && !(tempmote.status & SKRIVSTYRT)) return(0);
	if(tempmote.status & SUPERHEMLIGT) return(0);
	if(tempmote.status & AUTOMEDLEM) clearmed=FALSE;
	else clearmed=TRUE;
	if(tempmote.status & (SLUTET | SKRIVSTYRT)) setratt=FALSE;
	else setratt=TRUE;
	for(y=0;y<MAXNOD;y++) {
		BAMCLEAR(Servermem->inne[y].motmed,tempmote.nummer);
		if(setratt) BAMSET(Servermem->inne[y].motratt,tempmote.nummer);
		else BAMCLEAR(Servermem->inne[y].motratt,tempmote.nummer);
	}
	puttekn("\r\nÄndrar i Users.dat..\r\n",-1);
	for(userletpek=(struct ShortUser *)Servermem->user_list.mlh_Head;userletpek->user_node.mln_Succ;userletpek=(struct ShortUser *)userletpek->user_node.mln_Succ) {
		if(!(userletpek->nummer%10)) {
			sprintf(outbuffer,"\r%d",userletpek->nummer);
			puttekn(outbuffer,-1);
		}
		if(readuser(userletpek->nummer,&skuser)) return(0);
		changed=FALSE;
		if(setratt!=BAMTEST(skuser.motratt,tempmote.nummer)) {
			if(setratt) BAMSET(skuser.motratt,tempmote.nummer);
			else BAMCLEAR(skuser.motratt,tempmote.nummer);
			changed=TRUE;
		}
		if(clearmed && BAMTEST(skuser.motmed,tempmote.nummer)) {
			BAMCLEAR(skuser.motmed,tempmote.nummer);
			changed=TRUE;
		}
		if(changed && writeuser(userletpek->nummer,&skuser)) return(0);

	}
	for(y=0;y<MAXNOD;y++) {
		BAMCLEAR(Servermem->inne[y].motmed,tempmote.nummer);
		if(setratt) BAMSET(Servermem->inne[y].motratt,tempmote.nummer);
		else BAMCLEAR(Servermem->inne[y].motratt,tempmote.nummer);
	}
	BAMSET(Servermem->inne[nodnr].motratt,tempmote.nummer);
	BAMSET(Servermem->inne[nodnr].motmed,tempmote.nummer);
	return(0);
}
Exemplo n.º 12
0
void main(int argc,char *argv[]) {
  int x;
  long tid;
  char tellstr[100],*tmppscreen, titel[80], configname[50] = "NiKom:DatoCfg/SerNode.cfg";
  if(argc>1) for(x=1;x<argc;x++) {
      if(argv[x][0]=='-') {
        if(argv[x][1]=='B') dtespeed=atoi(&argv[x][2]);
        else if(argv[x][1]=='N') nodnr = atoi(&argv[x][2]);
      } else strcpy(configname,argv[x]);
    }
  if(nodnr==-1) {
    printf("NiKomSer måste startas från prenoden.\n");
    exit(10);
  }
  NewList((struct List *)&aliaslist);
  NewList((struct List *)&edit_list);
  if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0)))
    cleanup(EXIT_ERROR,"Kunde inte öppna intuition.library\n");
  if(!(UtilityBase=OpenLibrary("utility.library",37L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna utility.library\n");
  if(!(LocaleBase=OpenLibrary("locale.library",38L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna locale.library\n");
  if(!(NiKomBase=OpenLibrary("nikom.library",0L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna nikom.library\n");

  initnode(NODSPAWNED);
  if(!(nikomnodeport = CreateMsgPort()))
    cleanup(EXIT_ERROR,"Kunde inte skapa NiKomNode-porten");
  sprintf(nikomnodeportnamn,"NiKomNode%d",nodnr);
  nikomnodeport->mp_Node.ln_Name = nikomnodeportnamn;
  nikomnodeport->mp_Node.ln_Pri = 1;
  AddPort(nikomnodeport);
  sprintf(rexxportnamn,"NiKomRexx%d",nodnr);
  if(!(rexxport=(struct MsgPort *)CreateMsgPort()))
    cleanup(EXIT_ERROR,"Kunde inte öppna RexxPort\n");
  rexxport->mp_Node.ln_Name=rexxportnamn;
  rexxport->mp_Node.ln_Pri = 50;
  AddPort(rexxport);
  if(!(RexxSysBase=(struct RsxLib *)OpenLibrary("rexxsyslib.library",0L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna rexxsyslib.library\n");
  getnodeconfig(configname);
  if(pubscreen[0]=='-') tmppscreen=NULL;
  else tmppscreen=pubscreen;
  if(!(NiKwind=(struct Window *)OpenWindowTags(NULL,WA_Left,xpos,
                                               WA_Top,ypos,
                                               WA_Width,xsize,
                                               WA_Height,ysize,
                                               WA_IDCMP,IDCMP_CLOSEWINDOW,
                                               WA_MinWidth,50,
                                               WA_MinHeight,10,
                                               WA_MaxWidth,~0,
                                               WA_MaxHeight,~0,
                                               WA_SizeGadget,TRUE,
                                               WA_SizeBBottom, TRUE,
                                               WA_DragBar,TRUE,
                                               WA_DepthGadget,TRUE,
                                               WA_CloseGadget,TRUE,
                                               WA_SimpleRefresh,TRUE,
                                               WA_ScreenTitle,"NiKomSer",
                                               WA_AutoAdjust,TRUE,
                                               WA_PubScreenName,tmppscreen,
                                               TAG_DONE)))
    cleanup(EXIT_ERROR,"Kunde inte öppna fönstret\n");
  if(!OpenIO(NiKwind)) cleanup(EXIT_ERROR,"Kunde inte öppna IO\n");
  inloggad=Servermem->inloggad[nodnr];
  conreqtkn();
  serreqtkn();
  UpdateInactive();
  sprintf(titel,"Nod #%d SER: %s #%d",nodnr,Servermem->inne[nodnr].namn,inloggad);
  SetWindowTitles(NiKwind,titel,(char *)-1L);
  if(!ReadUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad)) {
    puttekn("Error reading unread text info.\r\n", -1);
    LogEvent(SYSTEM_LOG, ERROR,
             "Can't read unread text info for user %d", inloggad);
    cleanup(EXIT_ERROR, "Error reading unread text info.\n");
  }
  if(getft("NiKom:Texter/Bulletin.txt")>Servermem->inne[nodnr].senast_in) {
    sendfile("NiKom:Texter/Bulletin.txt");
  }

  connection();

  if(nodestate & NIKSTATE_NOCARRIER) {
    conputtekn("\nCarrier dropped\n",-1);
    if(Servermem->cfg.logmask & LOG_CARDROPPED) {
      LogEvent(USAGE_LOG, WARN, "%s släpper carriern (nod %d)",
               getusername(inloggad), nodnr);
    }
    if(Servermem->cfg.ar.cardropped) sendautorexx(Servermem->cfg.ar.cardropped);
  } else {
    if(nodestate & NIKSTATE_AUTOLOGOUT) {
      puttekn("\n\n\r*** Automagisk utloggning ***\n\n\r",-1);
    } else if(nodestate & NIKSTATE_INACTIVITY) {
      puttekn("\n\n\r*** Utloggning p.g.a inaktivitet ***\n\n\r",-1);
    }
    radcnt=-174711;
    if(Servermem->say[nodnr]) displaysay();
    if(Servermem->cfg.ar.utlogg) sendautorexx(Servermem->cfg.ar.utlogg);
    sendfile("NiKom:Texter/Utlogg.txt");
  }
  Servermem->inloggad[nodnr]=-1;
  if(Servermem->cfg.logmask & LOG_UTLOGG) {
    LogEvent(USAGE_LOG, INFO, "%s loggar ut från nod %d",
             getusername(inloggad), nodnr);
  }
  Servermem->action[nodnr]=0;
  time(&tid);
  Servermem->inne[nodnr].senast_in=tid;
  Servermem->inne[nodnr].tot_tid+=(tid-logintime);
  Servermem->inne[nodnr].loggin++;
  Servermem->info.inloggningar++;
  Servermem->inne[nodnr].defarea=area2;
  writeuser(inloggad,&Servermem->inne[nodnr]);
  WriteUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad);
  writesenaste();
  AbortInactive();
  freealiasmem();
  sprintf(tellstr,"loggade just ut från nod %d",nodnr);
  tellallnodes(tellstr);

  if(nodestate & NIKSTATE_NOCARRIER) {
    nodestate &= ~NIKSTATE_RELOGIN;
  }
  nodestate &= (NIKSTATE_RELOGIN | NIKSTATE_CLOSESER | NIKSTATE_NOANSWER);
  cleanup(nodestate,"");
}
Exemplo n.º 13
0
void main(int argc, char **argv) {
  int going = TRUE, forsok = 2,car = 1, tmp, ch;
  long tid;
  char tellstr[100],*tmppscreen, titel[80];

  NewList((struct List *)&aliaslist);
  NewList((struct List *)&edit_list);
  if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0)))
    cleanup(EXIT_ERROR,"Kunde inte öppna intuition.library\n");
  if(!(UtilityBase=OpenLibrary("utility.library",37L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna utility.library\n");
  if(!(LocaleBase=OpenLibrary("locale.library",38L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna locale.library\n");
  if(!(NiKomBase=OpenLibrary("nikom.library",0L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna nikom.linbrary");
  getnodeconfig("NiKom:Datocfg/ConNode.cfg");
  if(!(initnode(NODCON))) cleanup(EXIT_ERROR,"Kunde inte registrera noden i Servern\n");
  if(!(nikomnodeport = CreateMsgPort()))
    cleanup(EXIT_ERROR,"Kunde inte skapa NiKomNode-porten");
  sprintf(nikomnodeportnamn,"NiKomNode%d",nodnr);
  nikomnodeport->mp_Node.ln_Name = nikomnodeportnamn;
  nikomnodeport->mp_Node.ln_Pri = 1;
  AddPort(nikomnodeport);
  sprintf(rexxportnamn,"NiKomRexx%d",nodnr);
  if(!(rexxport=(struct MsgPort *)CreateMsgPort()))
    cleanup(EXIT_ERROR,"Kunde inte öppna RexxPort\n");
  rexxport->mp_Node.ln_Name=rexxportnamn;
  rexxport->mp_Node.ln_Pri=50;
  AddPort(rexxport);
  if(!(RexxSysBase=(struct RsxLib *)OpenLibrary("rexxsyslib.library",0L)))
    cleanup(EXIT_ERROR,"Kunde inte öppna rexxsyslib.library\n");
  if(pubscreen[0]=='-') tmppscreen=NULL;
  else tmppscreen=pubscreen;
  if(!(NiKwind=(struct Window *)OpenWindowTags(NULL,WA_Left,xpos,
                                               WA_Top,ypos,
                                               WA_Width,xsize,
                                               WA_Height,ysize,
                                               WA_IDCMP,IDCMP_CLOSEWINDOW,
                                               WA_MinWidth,50,
                                               WA_MinHeight,10,
                                               WA_MaxWidth,~0,
                                               WA_MaxHeight,~0,
                                               WA_SizeGadget,TRUE,
                                               WA_SizeBBottom, TRUE,
                                               WA_DragBar,TRUE,
                                               WA_DepthGadget,TRUE,
                                               WA_CloseGadget,TRUE,
                                               WA_SimpleRefresh,TRUE,
                                               WA_ScreenTitle,"NiKomCon",
                                               WA_AutoAdjust,TRUE,
                                               WA_PubScreenName,tmppscreen,
                                               TAG_DONE)))
    cleanup(EXIT_ERROR,"Kunde inte öppna fönstret\n");
  if(!OpenIO(NiKwind)) cleanup(EXIT_ERROR,"Kunde inte öppna IO\n");
  strcpy(Servermem->nodid[nodnr],nodid);
  sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr);
  SetWindowTitles(NiKwind,titel,(UBYTE *)-1L);
  Servermem->connectbps[nodnr] = -1;
  conreqtkn();
  do {
    Servermem->idletime[nodnr] = time(NULL);
    memset(commandhistory,0,1024);
    Servermem->inne[nodnr].rader=0;
    sendfile("NiKom:Texter/Inlogg.txt");
    if(Servermem->cfg.ar.preinlogg) sendautorexx(Servermem->cfg.ar.preinlogg);
    going=TRUE;
    while(going) {
      Servermem->idletime[nodnr] = time(NULL);
      puttekn("\r\nNamn: ",-1);
      getstring(EKO,40,NULL);
      if(!stricmp(inmat,Servermem->cfg.ny)) {
        tmp = RegisterNewUser();
        if(tmp == 2) {
          goto panik;
        }
        car = tmp ? 0 : 1;
        going=FALSE;
      }
      else if((inloggad=parsenamn(inmat))>=0) {
        if(readuser(inloggad,&Servermem->inne[nodnr])) {
          puttekn("Error reading user data.\r\n", -1);
          goto panik;
        }
        // TODO: Extract password loop. Should be identical to in PreNode/Ser.c
        forsok=2;
        while(forsok) {
          puttekn("\r\nLösen: ",-1);
          if(Servermem->inne[nodnr].flaggor & STAREKOFLAG)
            getstring(STAREKO,15,NULL);
          else
            getstring(EJEKO,15,NULL);
          if(CheckPassword(inmat, Servermem->inne[nodnr].losen)) {
            forsok=FALSE;
            going=FALSE;
          } else {
            forsok--;
          }
        }
      } else if(inloggad==-1) puttekn("\r\nHittar ej namnet\r\n",-1);
    }
    sprintf(titel,"Nod #%d CON: %s #%d",nodnr,Servermem->inne[nodnr].namn,inloggad);
    SetWindowTitles(NiKwind,titel,(UBYTE *)-1L);
    if(!ReadUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad)) {
      puttekn("Error reading unread text info.\r\n", -1);
      LogEvent(SYSTEM_LOG, ERROR,
               "Can't read unread text info for user %d", inloggad);
      goto panik;
    }
    Servermem->inloggad[nodnr]=inloggad;
    Servermem->idletime[nodnr] = time(NULL);
    if(getft("NiKom:Texter/Bulletin.txt")>Servermem->inne[nodnr].senast_in) sendfile("NiKom:Texter/Bulletin.txt");

    connection();

    if(Servermem->cfg.logmask & LOG_UTLOGG) {
      LogEvent(USAGE_LOG, INFO, "%s loggar ut från nod %d",
               getusername(inloggad), nodnr);
    }
    if(Servermem->say[nodnr]) displaysay();
    if(Servermem->cfg.ar.utlogg) sendautorexx(Servermem->cfg.ar.utlogg);
    sendfile("NiKom:Texter/Utlogg.txt");
    sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr);
    SetWindowTitles(NiKwind,titel,(UBYTE *)-1L);
    Servermem->inloggad[nodnr]=-1;
    
    Servermem->action[nodnr]=0;
    time(&tid);
    Servermem->inne[nodnr].senast_in=tid;
    Servermem->inne[nodnr].tot_tid+=(tid-logintime);
    Servermem->inne[nodnr].loggin++;
    Servermem->info.inloggningar++;
    Servermem->inne[nodnr].defarea=area2;
    writeuser(inloggad,&Servermem->inne[nodnr]);
    WriteUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad);
    writesenaste();
    freealiasmem();
    sprintf(tellstr,"loggade just ut från nod %d",nodnr);
    tellallnodes(tellstr);
  panik:
    nodestate = 0;
    puttekn("\r\n\nEn inloggning till? (J/n)",-1);
  } while((ch = GetChar()) != 'n' && ch != 'N');
  cleanup(EXIT_OK,"");
}
Exemplo n.º 14
0
int skapmot(void) {
    struct ShortUser *shortUser;
    int mad, setPermission, changed, ch, i, fidoDomainId, highestId;
    struct FidoDomain *fidoDomain;
    BPTR lock;
    struct User user;
    struct Mote tmpConf,*searchConf,*newConf;

    memset(&tmpConf, 0, sizeof(struct Mote));
    if(argument[0] == '\0') {
        SendString("\r\n\nNamn på mötet: ");
        if(GetString(40,NULL)) {
            return 1;
        }
        strcpy(tmpConf.namn, inmat);
    } else {
        strcpy(tmpConf.namn, argument);
    }
    if(parsemot(tmpConf.namn) != -1) {
        SendString("\r\n\nFinns redan ett sådant möte!\r\n");
        return 0;
    }
    tmpConf.skapat_tid = time(NULL);;
    tmpConf.skapat_av = inloggad;
    for(;;) {
        SendString("\r\nMötesAdministratör (MAD) : ");
        if(GetString(5,NULL)) {
            return 1;
        }
        if(inmat[0]) {
            if((mad = parsenamn(inmat)) == -1) {
                SendString("\r\nFinns ingen sådan användare!");
            } else {
                tmpConf.mad = mad;
                break;
            }
        }
    }
    SendString("\n\rSorteringsvärde: ");
    tmpConf.sortpri = GetNumber(0, LONG_MAX, NULL);

    if(EditBitFlagShort("\r\nSka mötet vara slutet?", 'j', 'n', "Slutet", "Öppet",
                        &tmpConf.status, SLUTET)) {
        return 1;
    }
    if(tmpConf.status & SLUTET) {
        SendString("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n");
        if(editgrupp((char *)&tmpConf.grupper)) {
            return 1;
        }
    }
    if(EditBitFlagShort("\r\nSka mötet vara skrivskyddat?", 'j', 'n',
                        "Skyddat", "Oskyddat", &tmpConf.status, SKRIVSKYDD)) {
        return 1;
    }
    if(EditBitFlagShort("\r\nSka mötet vara kommentarsskyddat?", 'j', 'n',
                        "Skyddat", "Oskyddat", &tmpConf.status, KOMSKYDD)) {
        return 1;
    }
    if(EditBitFlagShort("\r\nSka mötet vara hemligt?", 'j', 'n',
                        "Hemligt", "Ej hemligt", &tmpConf.status, HEMLIGT)) {
        return 1;
    }
    if(!(tmpConf.status & SLUTET)) {
        if(EditBitFlagShort("\r\nSka alla användare bli medlemmar automagiskt?", 'j', 'n',
                            "Ja", "Nej", &tmpConf.status, AUTOMEDLEM)) {
            return 1;
        }
        if(EditBitFlagShort("\r\nSka rättigheterna styra skrivmöjlighet?", 'j', 'n',
                            "Ja", "Nej", &tmpConf.status, SKRIVSTYRT)) {
            return 1;
        }
        if(tmpConf.status & SKRIVSTYRT) {
            SendString("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n");
            if(editgrupp((char *)&tmpConf.grupper)) {
                return 1;
            }
        }
    }
    if(EditBitFlagShort("\r\nSka mötet enbart kommas åt från ARexx?", 'j', 'n',
                        "Ja", "Nej", &tmpConf.status, SUPERHEMLIGT)) {
        return 1;
    }

    SendString("\n\n\rVilken typ av möte ska det vara?\n\r");
    SendString("1: Lokalt möte\n\r");
    SendString("2: Fido-möte\n\n\r");
    SendString("Val: ");
    for(;;) {
        ch = GetChar();
        if(ch == GETCHAR_LOGOUT) {
            return 1;
        }
        if(ch == '1' || ch == '2') {
            break;
        }
    }
    if(ch == '1') {
        SendString("Lokalt möte\n\n\r");
        tmpConf.type = MOTE_ORGINAL;
    } else {
        SendString("Fido-möte\n\n\r");
        tmpConf.type = MOTE_FIDO;
        if(EditString("Katalog for .msg-filerna", tmpConf.dir, 79, TRUE)) {
            return 1;
        }
        if(!(lock = Lock(tmpConf.dir, SHARED_LOCK))) {
            if(!(lock = CreateDir(tmpConf.dir)))
                SendString("\n\rKunde inte skapa katalogen\n\r");
        }
        if(lock) {
            UnLock(lock);
        }
        if(EditString("FidoNet tag-namn", tmpConf.tagnamn, 49, TRUE)) {
            return 1;
        }
        strcpy(tmpConf.origin, Servermem->fidodata.defaultorigin);
        if(MaybeEditString("Origin-rad", tmpConf.origin, 69)) {
            return 1;
        }

        SendString("\n\n\rVilken teckenuppsättning ska användas för utgående texter?\n\r");
        SendString("1: ISO Latin 1 (ISO 8859-1)\n\r");
        SendString("2: SIS-7 (SF7, 'Måsvingar')\n\r");
        SendString("3: IBM CodePage\n\r");
        SendString("4: Mac\n\n\r");
        SendString("Val: ");
        for(;;) {
            ch = GetChar();
            if(ch == GETCHAR_LOGOUT) {
                return 1;
            }
            if(ch == '1' || ch == '2' || ch == '3' || ch == '4') {
                break;
            }
        }
        switch(ch) {
        case '1':
            SendString("ISO Latin 1\n\n\r");
            tmpConf.charset = CHRS_LATIN1;
            break;
        case '2':
            SendString("SIS-7\n\n\r");
            tmpConf.charset = CHRS_SIS7;
            break;
        case '3':
            SendString("IBM CodePage\n\n\r");
            tmpConf.charset = CHRS_CP437;
            break;
        case '4':
            SendString("Mac\n\n\r");
            tmpConf.charset = CHRS_MAC;
            break;
        }
        SendString("Vilken domän är mötet i?\n\r");
        highestId = 0;
        for(i = 0; i < 10; i++) {
            if(!Servermem->fidodata.fd[i].domain[0]) {
                break;
            }
            highestId = max(highestId, Servermem->fidodata.fd[i].nummer);
            SendString("%3d: %s (%d:%d/%d.%d)\n\r",
                       Servermem->fidodata.fd[i].nummer,
                       Servermem->fidodata.fd[i].domain,
                       Servermem->fidodata.fd[i].zone,
                       Servermem->fidodata.fd[i].net,
                       Servermem->fidodata.fd[i].node,
                       Servermem->fidodata.fd[i].point);
        }
        if(i == 0) {
            SendString("\n\rDu måste definiera en domän i NiKomFido.cfg först!\n\r");
            return 0;
        }
        for(;;) {
            SendString("\r\nDomän: ");
            if(GetString(5, NULL)) {
                return 1;
            }
            fidoDomainId = atoi(inmat);
            if(fidoDomain = getfidodomain(fidoDomainId, 0)) {
                break;
            } else {
                SendString("\n\rFinns ingen sådan domän.\n\r");
            }
        }
        tmpConf.domain = fidoDomain->nummer;
        SendString("%s\n\n\r", fidoDomain->domain);
    }
    for(i = 0; i < MAXMOTE; i++) {
        if(getmotpek(i) == NULL) {
            break;
        }
    }
    if(i >= MAXMOTE) {
        SendString("\n\n\rDet finns inte plats för fler möten.\n\r");
        return 0;
    }
    tmpConf.nummer = i;
    if(!(newConf = (struct Mote *)AllocMem(sizeof(struct Mote),
                                           MEMF_CLEAR | MEMF_PUBLIC))) {
        LogEvent(SYSTEM_LOG, ERROR, "Could not allocate %d bytes.", sizeof(struct Mote));
        DisplayInternalError();
        return 0;
    }
    memcpy(newConf, &tmpConf, sizeof(struct Mote));
    ITER_EL(searchConf, Servermem->mot_list, mot_node, struct Mote *) {
        if(searchConf->sortpri > newConf->sortpri) {
            break;
        }
    }

    searchConf = (struct Mote *)searchConf->mot_node.mln_Pred;
    Insert((struct List *)&Servermem->mot_list, (struct Node *)newConf,
           (struct Node *)searchConf);
    writemeet(newConf);

    if((newConf->status & AUTOMEDLEM) && !(newConf->status & SKRIVSTYRT)) {
        return 0;
    }
    if(newConf->status & SUPERHEMLIGT) {
        return 0;
    }

    setPermission = (newConf->status & (SLUTET | SKRIVSTYRT)) ? FALSE : TRUE;
    for(i = 0; i < MAXNOD; i++) {
        BAMCLEAR(Servermem->inne[i].motmed, newConf->nummer);
        if(setPermission) {
            BAMSET(Servermem->inne[i].motratt, newConf->nummer);
        } else {
            BAMCLEAR(Servermem->inne[i].motratt, newConf->nummer);
        }
    }

    SendString("\r\nÄndrar i användardata..\r\n");
    ITER_EL(shortUser, Servermem->user_list, user_node, struct ShortUser *) {
        if(!(shortUser->nummer % 10)) {
            SendString("\r%d", shortUser->nummer);
        }
        if(readuser(shortUser->nummer, &user)) {
            LogEvent(SYSTEM_LOG, ERROR, "Could not read user %d to set "
                     "membership/permissions for new conference.", shortUser->nummer);
            DisplayInternalError();
            return 0;
        }
        changed = FALSE;
        if(setPermission != BAMTEST(user.motratt, newConf->nummer)) {
            if(setPermission) {
                BAMSET(user.motratt, newConf->nummer);
            } else {
                BAMCLEAR(user.motratt, newConf->nummer);
            }
            changed = TRUE;
        }
        if(!(newConf->status & AUTOMEDLEM) && BAMTEST(user.motmed, newConf->nummer)) {
            BAMCLEAR(user.motmed, newConf->nummer);
            changed = TRUE;
        }
        if(changed && writeuser(shortUser->nummer, &user)) {
            LogEvent(SYSTEM_LOG, ERROR, "Could not write user %d to set "
                     "membership/permissions for new conference.", shortUser->nummer);
            DisplayInternalError();
            return 0;
        }

    }
    for(i = 0; i < MAXNOD; i++) {
        BAMCLEAR(Servermem->inne[i].motmed, newConf->nummer);
        if(setPermission) {
            BAMSET(Servermem->inne[i].motratt, newConf->nummer);
        } else {
            BAMCLEAR(Servermem->inne[i].motratt, newConf->nummer);
        }
    }
    BAMSET(Servermem->inne[nodnr].motratt, newConf->nummer);
    BAMSET(Servermem->inne[nodnr].motmed, newConf->nummer);
    if(newConf->type == MOTE_FIDO) {
        ReScanFidoConf(newConf, 0);
    }
    return 0;
}
Exemplo n.º 15
0
void main(int argc, char **argv) {
	int going=TRUE,forsok=2,car=1;
	long tid;
	char tellstr[100],*tmppscreen, titel[80];
	UBYTE tillftkn;
	NewList((struct List *)&aliaslist);
	NewList((struct List *)&edit_list);
	if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0)))
		cleanup(ERROR,"Kunde inte öppna intuition.library\n");
	if(!(UtilityBase=OpenLibrary("utility.library",37L)))
		cleanup(ERROR,"Kunde inte öppna utility.library\n");
	if(!(NiKomBase=OpenLibrary("nikom.library",0L)))
		cleanup(ERROR,"Kunde inte öppna nikom.linbrary");
	getnodeconfig("NiKom:Datocfg/ConNode.cfg");
	if(!(initnode(NODCON))) cleanup(ERROR,"Kunde inte registrera noden i Servern\n");
	if(!(nikomnodeport = CreateMsgPort()))
		cleanup(ERROR,"Kunde inte skapa NiKomNode-porten");
	sprintf(nikomnodeportnamn,"NiKomNode%d",nodnr);
	nikomnodeport->mp_Node.ln_Name = nikomnodeportnamn;
	nikomnodeport->mp_Node.ln_Pri = 1;
	AddPort(nikomnodeport);
	sprintf(rexxportnamn,"NiKomRexx%d",nodnr);
	if(!(rexxport=(struct MsgPort *)CreateMsgPort()))
		cleanup(ERROR,"Kunde inte öppna RexxPort\n");
	rexxport->mp_Node.ln_Name=rexxportnamn;
	rexxport->mp_Node.ln_Pri=50;
	AddPort(rexxport);
	if(!(RexxSysBase=(struct RsxLib *)OpenLibrary("rexxsyslib.library",0L)))
		cleanup(ERROR,"Kunde inte öppna rexxsyslib.library\n");
	if(pubscreen[0]=='-') tmppscreen=NULL;
	else tmppscreen=pubscreen;
	if(!(NiKwind=(struct Window *)OpenWindowTags(NULL,WA_Left,xpos,
																	  WA_Top,ypos,
																	  WA_Width,xsize,
																	  WA_Height,ysize,
																	  WA_IDCMP,IDCMP_CLOSEWINDOW,
																	  WA_MinWidth,50,
																	  WA_MinHeight,10,
																	  WA_MaxWidth,~0,
																	  WA_MaxHeight,~0,
																	  WA_SizeGadget,TRUE,
																	  WA_SizeBBottom, TRUE,
																	  WA_DragBar,TRUE,
																	  WA_DepthGadget,TRUE,
																	  WA_CloseGadget,TRUE,
																	  WA_SimpleRefresh,TRUE,
																	  WA_ScreenTitle,"NiKom © Tomas Kärki 1996-1998",
																	  WA_AutoAdjust,TRUE,
																	  WA_PubScreenName,tmppscreen,
																	  TAG_DONE)))
		cleanup(ERROR,"Kunde inte öppna fönstret\n");
	if(!OpenIO(NiKwind)) cleanup(ERROR,"Kunde inte öppna IO\n");
	if(!getkeyfile())
		cleanup(ERROR,"Korrupt nyckelfil\n");
	strcpy(Servermem->nodid[nodnr],nodid);
	sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr);
	SetWindowTitles(NiKwind,titel,(UBYTE *)-1L);
	Servermem->connectbps[nodnr] = -1;
	conreqtkn();
do
{
	memset(commandhistory,0,1024);
	Servermem->inne[nodnr].rader=0;
	sendfile("NiKom:Texter/Inlogg.txt");
	if(Servermem->cfg.ar.preinlogg) sendrexx(Servermem->cfg.ar.preinlogg);
	going=TRUE;
	while(going) {
		puttekn("\r\nNamn: ",-1);
		getstring(EKO,40,NULL);
		if(!stricmp(inmat,Servermem->cfg.ny))
		{
/*			if(!reggadnamn[0] && ((struct ShortUser *)Servermem->user_list.mlh_TailPred)->nummer >= 4)
				puttekn("\n\n\rDenna demoversion av NiKom kan hantera maximalt 5 användare.\n\r",-1);
			else { Versionen är nu obegränsad 970930! */
				if((car=nyanv())==2) goto panik;
				going=FALSE;
/*			} */
		}
		else if((inloggad=parsenamn(inmat))>=0) {
			readuser(inloggad,&Servermem->inne[nodnr]);
			forsok=2;
			while(forsok) {
				puttekn("\r\nLösen: ",-1);
				if(Servermem->inne[nodnr].flaggor & STAREKOFLAG)
					getstring(STAREKO,15,NULL);
				else
					getstring(EJEKO,15,NULL);
				if(CheckPassword(inloggad, inmat))
				{
					forsok=FALSE;
					going=FALSE;
				} else forsok--;
			}
		} else if(inloggad==-1) puttekn("\r\nHittar ej namnet\r\n",-1);
	}
	sprintf(titel,"Nod #%d CON: %s #%d",nodnr,Servermem->inne[nodnr].namn,inloggad);
	SetWindowTitles(NiKwind,titel,(UBYTE *)-1L);
	readuserbitmap(inloggad,Servermem->bitmaps[nodnr],0,temppek);
	Servermem->inloggad[nodnr]=inloggad;
	Servermem->idletime[nodnr] = time(NULL);
	if(getft("NiKom:Texter/Bulletin.txt")>Servermem->inne[nodnr].senast_in) sendfile("NiKom:Texter/Bulletin.txt");
	connection();
	if(Servermem->cfg.logmask & LOG_UTLOGG) {
		sprintf(outbuffer,"%s loggar ut från nod %d",getusername(inloggad),nodnr);
		logevent(outbuffer);
	}
	if(Servermem->say[nodnr]) displaysay();
	if(Servermem->cfg.ar.utlogg) sendrexx(Servermem->cfg.ar.utlogg);
	sendfile("NiKom:Texter/Utlogg.txt");
	sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr);
	SetWindowTitles(NiKwind,titel,(UBYTE *)-1L);
	SaveProgramCategory(inloggad);
	Servermem->inloggad[nodnr]=-1;

	Servermem->action[nodnr]=0;
	Servermem->inne[nodnr].textpek=textpek;
	time(&tid);
	Servermem->inne[nodnr].senast_in=tid;
	Servermem->inne[nodnr].tot_tid+=(tid-logintime);
	Servermem->inne[nodnr].loggin++;
	Servermem->info.inloggningar++;
	Servermem->inne[nodnr].defarea=area2;
	writeuser(inloggad,&Servermem->inne[nodnr]);
	writeuserbitmap(inloggad,Servermem->bitmaps[nodnr],0,temppek);
	writesenaste();
	freealiasmem();
	sprintf(tellstr,"loggade just ut från nod %d",nodnr);
	tellallnodes(tellstr);
panik:
	puttekn("\r\n\nEn inloggning till? (J/n)",-1);
	} while((tillftkn=gettekn())!='n' && tillftkn!='N');
	cleanup(OK,"");
}
Exemplo n.º 16
0
pullmenu()
{
char scr[1200],s[80];
int x,y,i,goon,c;

goon=1;
onwait();
x=wherex();
y=wherey();
hidemouse();
gettext(13,5,61,16,scr);
puttext(13,5,61,16,USERED);
showmouse();
while(goon)
	{
	gotoxy(23,12);
	cprintf(" ");
	gotoxy(23,12);
	textcolor(LIGHTCYAN);
	inputlocal(s,30);
	strupr(s);
	switch(s[0])
		{
		case 'Q':
			goon=0;
			break;
		case '1':
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("Old Name: ");
			textcolor(LIGHTGRAY);
			cprintf("%s",user.name);
			gotoxy(15,15);
			textcolor(LIGHTGREEN);
			cprintf("New Name: ");
			inputlocal(s,40);
			gotoxy(15,14);
			cprintf("                      ");
			gotoxy(15,15);
			cprintf("                      ");
			if(s[0]!=0 || stricmp(user.name,s)==0)
				{
				if(!ver_user(s))
					strcpy(user.name,s);
				}
			break;
		case '2':
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("Old User SL: ");
			textcolor(LIGHTGRAY);
			cprintf("%d",user.sl);
			gotoxy(15,15);
			textcolor(LIGHTGREEN);
			cprintf("New User SL: ");
			textcolor(LIGHTGRAY);
			inputlocal(s,20);
			gotoxy(15,14);
			cprintf("                        ");
			gotoxy(15,15);
			cprintf("                        ");
			i=atoi(s);
			if(i >= 0 || i <= 255)
				user.sl=i;
			break;
		case '3':
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("Old File SL: ");
			textcolor(LIGHTGRAY);
			cprintf("%d",user.filesl);
			gotoxy(15,15);
			textcolor(LIGHTGREEN);
			cprintf("New File SL: ");
			textcolor(LIGHTGRAY);
			inputlocal(s,20);
			gotoxy(15,14);
			cprintf("                        ");
			gotoxy(15,15);
			cprintf("                        ");
			i=atoi(s);
			if(i >= 0 || i <= 255)
				user.filesl=i;
			break;
		case '4':
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("Old Note: ");
			textcolor(LIGHTGRAY);
			cprintf("\"%s\"",user.note);
			gotoxy(15,15);
			textcolor(LIGHTGREEN);
			cprintf("New Note: ");
			textcolor(LIGHTGRAY);
			inputlocal(s,40);
			gotoxy(15,14);
			cprintf("                                      ");
			gotoxy(15,15);
			cprintf("                                      ");
			if(s[0]!=0)
				strcpy(user.note,s);
			break;
		case '5':
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("Old Time: ");
			textcolor(LIGHTGRAY);
			cprintf("%d",print_time()/60);
			gotoxy(15,15);
			textcolor(LIGHTGREEN);
			cprintf("New Time: ");
			textcolor(LIGHTGRAY);
			inputlocal(s,20);
			gotoxy(15,14);
			cprintf("                        ");
			gotoxy(15,15);
			cprintf("                        ");
			if(s[0]!=0)
				{
				user.timeall=atoi(s)*60;
				timeleft=atoi(s)*60;
				}
			break;
		case '6':
			i=1;
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("User Flags: ");
			while(i)
				{
				goon=0;
				while(goon < 10)
					{
					gotoxy(27+goon,14);
					if(user.flags[goon])
						{
						textcolor(LIGHTRED);
						cprintf("%d",goon);
						}
					else
						{
						textcolor(LIGHTGRAY);
						cprintf("%d",goon);
						}
					goon++;
					}
				gotoxy(15,15);
				textcolor(LIGHTGREEN);
				cprintf("Enter flag to toggle [Q/Quit]: ");
				do
					{
					c=getch();
					if(c=='Q' || c=='q')
						{
						gotoxy(15,14);
						cprintf("                         ");
						gotoxy(15,15);
						cprintf("                                 ");
						i=0;
						}
					} while(c < '0' || c > '10');
				gotoxy(37,15);
				cprintf("%c",c);
				if(user.flags[c-48])
					user.flags[c-48]=0;
				else
					user.flags[c-48]=1;
				gotoxy(37,15);
				cprintf(" ");
				}
			break;
		case '7':
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("Old Password: "******"%s",user.pass);
			gotoxy(15,15);
			textcolor(LIGHTGREEN);
			cprintf("New Password: "******"                       ");
			gotoxy(15,15);
			cprintf("                       ");
			if(s[0]!=0)
				strcpy(user.pass,s);
			break;
		case '8':
			gotoxy(15,14);
			textcolor(LIGHTBLUE);
			cprintf("Old Filepoints: ");
			textcolor(LIGHTGRAY);
			cprintf("%d",user.filepoints);
			gotoxy(15,15);
			textcolor(LIGHTGREEN);
			cprintf("New Filepoints: ");
			inputlocal(s,40);
			gotoxy(15,14);
			cprintf("                     ");
			gotoxy(15,15);
			cprintf("                     ");
			if(s[0]!=0)
				user.filepoints=atoi(s);
			break;

		}
	}
writeuser();
puttext(13,5,61,16,scr);
gotoxy(x,y);
offwait();
}
Exemplo n.º 17
0
checkvalidbatch()
{
char s[90], bytes[10], code[10], baud[10], bps[10], numcps[10], cps[10], numerror[10], error[10], stops[10], paksize[10], regnum[10],k[80];
char drive[MAXDRIVE],dir[MAXDIR],filename[MAXFILE],ext[MAXEXT];
FILE *bu;
int i,totalcps, totalerror,o,totalfiles,oldfps,totalfps;
struct userfile tempu;


totalcps=totalerror=totalfiles=totalfps=0;

bu=fopen("TRANSFER.LOG","r");
if(bu==NULL)
	{
	nl();
	pl("4Can't find log file!!");
	fclose(bu);
	return;
	}

oldfps=user.filepoints;

for(i=0;i < que.files || (feof(bu)==0);i++)
	{
	fscanf(bu,"%s %s %s %s %s %s %s %s %s %s %s %s",code,bytes,baud,bps,numcps,cps,numerror,error,stops,paksize,s,regnum);
	strupr(code);
	if(code[0] != 'L' && code[0] != 'E' && code[0] != 'Q')
		{
		user.filepoints -= fstruct.filepoints;
		user.num_dl++;
		user.k_dl+=fstruct.bytes;
		fstruct.timesdl++;
		writeuser();
		fnsplit(s,drive,dir,filename,ext);
		strcpy(s,filename);
		strcat(s,ext);
		o=read_file(s);
		writefiles(o);
		readuser(fstruct.uploader,&tempu);
		tempu.filepoints=+fstruct.filepoints;
		writeu(&tempu);
		totalfiles++;
		totalcps+=atoi(numcps);
		totalerror+=atoi(numerror);
		totalfps+=fstruct.filepoints;
		}
	}
fclose(bu);

put_char(12);
title("Transfer Stats");
print("4Average CPS :3 %d",totalcps/totalfiles);
nl();
print("4Baud        :3 %s",baud);
nl();
print("4Total Errors:3 %d",totalerror);
nl();
print("4Total Files :3 %d",totalfiles);
nl();
nl();
print("4Old FPS:  3%d",oldfps);
nl();
print("4Cost   :  3%d",totalfps);
nl();
print("4        ÄÄÄÄÄÄ");
nl();
print("4New FPS:  3%d",(oldfps-totalfps));
nl();
nl();
}
Exemplo n.º 18
0
void
new_user(const char *hostname)
{
    int i = 0;
    unsigned int usernum;

    if( check_lockout(hostname) == FALSE )
        logoff(0);
    usersupp = newuser_makesupp();

    more(BBSDIR "/share/newuser/welcome_about", 0);
    cprintf("\1f\1gPress a key..");
    inkey();	
    more(BBSDIR "/share/newuser/welcome_commands", 0);
    cprintf("\1f\1gPress a key..");
    inkey();
    more(BBSDIR "/share/newuser/welcome_rules", 0);
    cprintf("\1f\1gPress a key..");
    inkey();
    more(BBSDIR "/share/newuser/welcome_username", 0);
 
    newuser_getname(usersupp->username);

    /* now we have a name, try to get a number */
    get_new_usernum( usersupp->username, &usernum );
    usersupp->usernum = usernum;

    newuser_getpasswd(usersupp->usernum);
    newuser_registration(usersupp);

    test_ansi_colours(usersupp);
    cprintf("\1f\1g");
    more(BBSDIR "/share/newuser/hideinfo", 0);
    usersupp->hidden_info = H_REALNAME | H_ADDRESS | H_CITY | H_COUNTRY
		    | H_PHONE | H_EMAIL | H_URL | H_BIRTHDAY;
    usersupp->flags |= US_HIDDENHOST;

    cprintf("\n\1f\1gPress a key to continue.. \1a");
    inkey();
    toggle_hidden_info(usersupp);

    config_menu();

    cprintf("\1f\1g\nA personal validation key is being generated and sent to the\n");
    cprintf("following email address: `%s'.\n\n", usersupp->RGemail);
    cprintf("Sending... ");
    fflush(stdout);

    generate_new_key(usersupp->usernum);

    i = send_key(usersupp->usernum );

    switch (i) {

	case 0:
	    more(BBSDIR "/share/newuser/key_done", 0);
	    break;

	case 1:
            more(BBSDIR "/share/newuser/key_invalid_chars", 0);
	    break;

	default:
            more(BBSDIR "/share/newuser/key_unknown_error", 0);
	    break;
    }

    fflush(stdout);
    sleep(1);

    /* final message to the new user */
    cprintf("Press a key to continue.. ");
    inkey();
    more(BBSDIR "/share/newuser/final", 1);

    log_it("newuserlog", "Created user '%s' from host '%s'", usersupp->username, hname);
    writeuser(usersupp, 0);
    mono_sql_u_update_registration( usersupp->usernum,
        usersupp->RGname, usersupp->RGaddr, usersupp->RGzip, usersupp->RGcity,
        usersupp->RGstate, usersupp->RGcountry, usersupp->RGphone );
    mono_sql_u_update_hidden( usersupp->usernum, usersupp->hidden_info );
    mono_sql_u_update_email( usersupp->usernum, usersupp->RGemail );
    mono_sql_u_update_url( usersupp->usernum, usersupp->RGurl );

    cprintf("Press a key to continue.. \1a");
    inkey();
    cprintf("\n");
    return;
}