コード例 #1
0
ファイル: daydream.c プロジェクト: ryanfantus/daydream
static int visit_bbs(int m)
{
	time_t aika;
	char *aikas;
	char puskur[300];

	lrp = lsp = oldlrp = oldlsp = 0;
	lrpdatname[0] = 0;
	ffilestagged = filestagged = bytestagged = fbytestagged = 0;
	*reason = 0;
	memset(&clog, 0, sizeof(struct callerslog));
	memset(&user, 0, sizeof(struct userbase));
	onlinestat = 0;
	display = 0;
	clearlist(olms);
	clearlist(flaggedfiles);

	carrier = 1;
	aika = time(0);
	aikas = ctime(&aika);
	aikas[24] = 0;

	snprintf(puskur, sizeof puskur, "===============================================[ %s ]===\n%d BPS connection on line #%d\n\n", aikas, bpsrate, node);
	writelog(puskur);

	changenodestatus("Logging in...");

	ddprintf("DayDream BBS/UNiX %s\nProgramming by Antti Häyrynen 1996, 1997,\n    DayDream Development Team 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n    Bo Simonsen 2008, 2009, 2010\nCurrently maintained by Ryan Fantus\nYou are connected to node #%d at %d BPS.\n\n", versionstring, node, bpsrate);

	rundoorbatch("data/frontends.dat", NULL);

	if (!display)
		if (getdisplaymode(0, 0) < 1) {
			DDPut("Failed to load displaymode... disconnecting!\n\n");
			return 0;
		}
	if (!syspw()) {
		DDPut(sd[disconnectingstr]);
		return 0;
	}

	TypeFile("banner", TYPE_MAKE | TYPE_WARN);

	if (m) {
		switch (checklogon("sysop")) {
		case 1:
			sleep(2);
			getin();
			break;
		}
		return 1;
	}
	login_loop();

	DDPut(sd[disconnectingstr]);
	dropcarrier();
	return 1;
}
コード例 #2
0
ファイル: edituser.c プロジェクト: ryanfantus/daydream
void edituser(void)
{
	char askbuf[20];
	
	changenodestatus("Editing personal data");
	
	TypeFile("edituser", TYPE_MAKE | TYPE_WARN);

	for (;;) {
		DDPut(sd[eupromptstr]);
		askbuf[0] = 0;
		if (!(Prompt(askbuf, 3, 0)))
			return;
		
		if (handle_choice(askbuf))
			return;
	}		
}
コード例 #3
0
ファイル: daydream.c プロジェクト: ryanfantus/daydream
static int syspw(void)
{
	char b[80];
	int i;

	if (*maincfg.CFG_SYSTEMPW) {
		TypeFile("systempassword", TYPE_MAKE);
		for (i = 2; i; i--) {
			*b = 0;
			DDPut(sd[syspwstr]);
			if (!(Prompt(b, 16, PROMPT_SECRET)))
				return 0;
			if (!strcasecmp(b, maincfg.CFG_SYSTEMPW))
				return 1;
		}
		return 0;
	}
	return 1;
}
コード例 #4
0
ファイル: who.c プロジェクト: ryanfantus/daydream
void who(void)
{
	struct DayDream_Multinode *cn;

	cn = nodes;

	changenodestatus("Viewing who's online");

	TypeFile("who", TYPE_MAKE | TYPE_WARN);
	DDPut(sd[whheadstr]);

	while (cn->MULTI_NODE) {
		if (cn->MULTI_NODE == 253) {
			int j;
			int i = maincfg.CFG_TELNET1ST;
			j = maincfg.CFG_TELNETMAX;

			while (j) {
				j--;
				who_show(cn, i);
				i++;
			}
		} else if (cn->MULTI_NODE == 254) {
			int j;
			int i = maincfg.CFG_LOCAL1ST;
			j = maincfg.CFG_LOCALMAX;

			while (j) {
				j--;
				who_show(cn, i);
				i++;
			}
		} else if (cn->MULTI_NODE != 252) {
			who_show(cn, cn->MULTI_NODE);
		}
		cn++;
	}
	DDPut(sd[whtailstr]);
}
コード例 #5
0
ファイル: bulletin.c プロジェクト: hlyytine/daydream
int bulletins(char *params)
{
	char bdir[200];
	char menunam[240];
	char bullb[500];
	char tbuf[400];
	char nbu[240];
	int first = 0;

	int menfd;
	const char *srcstrh;

	changenodestatus("Viewing bulletins");

	snprintf(bdir, sizeof bdir, "%s/bulletins/",
			conference()->conf.CONF_PATH);
	snprintf(menunam, sizeof menunam, 
			"%sbulletinmenu.%s", bdir, ansi ? "gfx" : "txt");

	menfd = open(menunam, O_RDONLY);
	if (menfd == -1) {
		snprintf(bdir, sizeof bdir, "bulletins/");
		snprintf(menunam, sizeof menunam, "bulletins/bulletinmenu.%s",
				ansi ? "gfx" : "txt");
		menfd = open(menunam, O_RDONLY);
		if (menfd == -1) {
			DDPut(sd[bunobullsstr]);
			return 0;
		}
	}
	close(menfd);
	srcstrh = params;

	for (;;) {
		int bulnum;
		
		if (strtoken(bullb, &srcstrh, sizeof bullb) > sizeof bullb)
			continue;
		
		if (!*bullb) {
			if (!first)
				TypeFile(menunam, TYPE_WARN);
			DDPut(sd[bumenustr]);
			*tbuf = 0;
			if (!(Prompt(tbuf, 60, 0)))
				return 0;
			srcstrh = tbuf;
			
			if (strtoken(bullb, &srcstrh, 
				     sizeof bullb) > sizeof bullb)
				return 0;
			if (!*bullb)
				return 0;
		}
		first = 1;
		if (*bullb == 'q' || *bullb == 'Q')
			return 0;
		if (*bullb == 'l' || *bullb == 'L' || *bullb == '?') {
			TypeFile(menunam, TYPE_WARN);
		} else if ((bulnum = atoi(bullb))) {
			snprintf(nbu, sizeof nbu, "%sbulletin.%d.%s", bdir, 
					bulnum, ansi ? "gfx" : "txt");
			if (TypeFile(nbu, TYPE_WARN)) {
				if (!(user.user_toggles & (1L << 4))) {
					DDPut(sd[pause2str]);
					HotKey(0);
				}
			}
		}
	}
}
コード例 #6
0
ファイル: download.c プロジェクト: ryanfantus/daydream
int sysopdownload(const char *params)
{
	const char *srcstrh;
	char parbuf[1024];
	char bigbuf[4096];
	int discon = 0;
	struct FFlag *myf;
	FILE *listh;
	char lastfile[100];
	int keepc = 1;

	changenodestatus("SysOp download");
	TypeFile("sysopdownload", TYPE_MAKE);

	srcstrh = params;

	for (;;) {
		if (strtoken(parbuf, &srcstrh, sizeof parbuf) > sizeof parbuf)
			continue;
		if (!*parbuf)
			break;
		sflagfile(parbuf);
	}
	for (;;) {
		typedlprompt();
		bigbuf[0] = 0;
		if (!(Prompt(bigbuf, 200, 0)))
			return 0;
		if (!bigbuf[0]) {
			break;
		} else if (!strcasecmp(bigbuf, "a")) {
			return 0;
		} else {
			srcstrh = bigbuf;
			for (;;) {
				if (strtoken(parbuf, &srcstrh,
					     sizeof parbuf) > sizeof parbuf)
					continue;
				if (!*parbuf)
					break;
				sflagfile(parbuf);
			}
		}
	}
	if (!filestagged)
		return 0;
	listtags();
	if (estimsecs(bytestagged) > timeleft) {
		DDPut(sd[dlnotimestr]);
		return 0;
	}
	for (;;) {
		DDPut(sd[dlproceedstr]);
		bigbuf[0] = 0;
		if (!(Prompt(bigbuf, 3, 0)))
			return 0;
		if (!bigbuf[0] || bigbuf[0] == 'p' || bigbuf[0] == 'P')
			break;
		else if (bigbuf[0] == 'e' || bigbuf[0] == 'E') {
			taged(0);
		} else if (bigbuf[0] == 'd' || bigbuf[0] == 'D') {
			discon = 1;
			break;
		} else if (bigbuf[0] == 'a' || bigbuf[0] == 'A') {
			return 0;
		}
	}

	if (estimsecs(bytestagged) > timeleft) {
		DDPut(sd[dlnotimestr]);
		return 0;
	}
	snprintf(parbuf, sizeof parbuf - 250, "%s/dszlog.%d", DDTMP, node);

	snprintf(&parbuf[250], sizeof parbuf - 250, "%s/ddfilelist.%d", DDTMP, node);
	unlink(&parbuf[250]);

	if (!(listh = fopen(&parbuf[250], "w")))
		return 0;

	myf = (struct FFlag *) flaggedfiles->lh_Head;
	while (myf->fhead.ln_Succ) {
		char tbu[256];
		snprintf(tbu, sizeof tbu, "%s%s\n", 
			myf->f_path, myf->f_filename);
		fputs(tbu, listh);
		myf = (struct FFlag *) myf->fhead.ln_Succ;
	}
	fclose(listh);
	*lastfile = 0;
	sendfiles(&parbuf[250], lastfile, sizeof lastfile);

	if (*lastfile) {
		myf = (struct FFlag *) flaggedfiles->lh_Head;
		while (myf->fhead.ln_Succ && keepc) {
			struct FFlag *oldf;

			if (!strcasecmp(lastfile, myf->f_filename))
				keepc = 0;
			Remove((struct Node *) myf);
			oldf = myf;
			myf = (struct FFlag *) myf->fhead.ln_Succ;
			free(oldf);
		}
	}
	recountfiles();

	unlink(&parbuf[250]);

	if (protocol->PROTOCOL_TYPE == 2 || protocol->PROTOCOL_TYPE == 3) {
		upload(2);
	}
	if (discon) {
		if (autodisconnect())
			return 2;
	}
	return 1;

}
コード例 #7
0
ファイル: download.c プロジェクト: ryanfantus/daydream
int download(const char *params)
{
	char parbuf[512];
	char bigbuf[10000];
	const char *srcstrh;
	int discon = 0;
	struct FFlag *myf;
	FILE *listh;
	char lastfile[100];
	int keepc = 1;

	bgrun = 0;
	wasbg = 0;

	setprotocol();
	changenodestatus("Downloading");
	TypeFile("download", TYPE_MAKE | TYPE_CONF | TYPE_WARN);

	if (!conference()->conf.CONF_FILEAREAS) {
		DDPut(sd[dlnoareasstr]);
		return 0;
	}
	if ((protocol->PROTOCOL_TYPE == 3 || protocol->PROTOCOL_TYPE == 2) && !conference()->conf.CONF_UPLOADAREA) {
		DDPut(sd[dlnouploadsstr]);
		return 0;
	}
	if (protocol->PROTOCOL_TYPE == 2 || protocol->PROTOCOL_TYPE == 3) {
		if (cleantemp() == -1) {
			DDPut(sd[tempcleanerrstr]);
			return 0;
		}
		if (!freespace())
			return 0;
		maketmplist();
	}
	srcstrh = params;

	for (;;) {
		if (strtoken(parbuf, &srcstrh, sizeof parbuf) > sizeof parbuf)
			continue;
		if (!*parbuf)
			break;
		flagfile(parbuf, 1);
	}
	for (;;) {
		typedlprompt();
		bigbuf[0] = 0;
		if (!(Prompt(bigbuf, 200, 0)))
			return 0;
		if (!bigbuf[0]) {
			break;
		} else if (!strcasecmp(bigbuf, "a")) {
			return 0;
		} else {
			srcstrh = bigbuf;
			for (;;) {
				if (strtoken(parbuf, &srcstrh, 
					     sizeof parbuf) > sizeof parbuf)
					continue;
				if (!*parbuf)
					break;
				flagfile(parbuf, 1);
			}
		}
	}
	if (!filestagged)
		return 0;
	listtags();
	if (estimsecs(bytestagged) > timeleft) {
		DDPut(sd[dlnotimestr]);
		return 0;
	}
	for (;;) {
		DDPut(sd[dlproceedstr]);
		bigbuf[0] = 0;
		if (!(Prompt(bigbuf, 3, 0)))
			return 0;
		if (!bigbuf[0] || bigbuf[0] == 'p' || bigbuf[0] == 'P')
			break;
		else if (bigbuf[0] == 'e' || bigbuf[0] == 'E') {
			taged(0);
		} else if (bigbuf[0] == 'd' || bigbuf[0] == 'D') {
			discon = 1;
			break;
		} else if (bigbuf[0] == 'a' || bigbuf[0] == 'A') {
			return 0;
		}
	}
	snprintf(parbuf, sizeof parbuf, "%s/dszlog.%d", DDTMP, node);

	sprintf(&parbuf[250], "%s/ddfilelist.%d", DDTMP, node);
	unlink(&parbuf[250]);

	if (!(listh = fopen(&parbuf[250], "w")))
		return 0;

	myf = (struct FFlag *) flaggedfiles->lh_Head;
	while (myf->fhead.ln_Succ) {
		char tbu[256];
		snprintf(tbu, sizeof tbu, "%s%s\n", 
			myf->f_path, myf->f_filename);
		fputs(tbu, listh);
		myf = (struct FFlag *) myf->fhead.ln_Succ;
	}
	fclose(listh);
	*lastfile = 0;

	if (protocol->PROTOCOL_TYPE == 2 || protocol->PROTOCOL_TYPE == 3) {
		if ((!(user.user_toggles & (1L << 15))) && (maincfg.CFG_FLAGS & (1L << 11))) {
			initbgchecker();

		}
	}
	sendfiles(&parbuf[250], lastfile, sizeof lastfile);


	if (protocol->PROTOCOL_TYPE == 2 || protocol->PROTOCOL_TYPE == 3) {
		upload(2);
	}
	if (*lastfile) {
		myf = (struct FFlag *) flaggedfiles->lh_Head;
		while (myf->fhead.ln_Succ && keepc) {
			struct FFlag *oldf;
			struct DD_DownloadLog ddl;
			char lbuf[100];
			int logfd;

			snprintf(lbuf, sizeof lbuf, 
				"%s/logfiles/downloadlog.dat", origdir);
			logfd = open(lbuf, O_WRONLY | O_CREAT, 0666);
			if (logfd != -1) {
				fsetperm(logfd, 0666);
				memset((char *) &ddl, 0, sizeof(struct DD_DownloadLog));
				ddl.DL_SLOT = user.user_account_id;
				strlcpy(ddl.DL_FILENAME, myf->f_filename, sizeof ddl.DL_FILENAME);
				ddl.DL_FILESIZE = myf->f_size;
				ddl.DL_TIME = time(0);
				ddl.DL_BPSRATE = bpsrate;
				ddl.DL_NODE = node;
				ddl.DL_CONF = (unsigned char) myf->f_conf;
				lseek(logfd, 0, SEEK_END);
				safe_write(logfd, &ddl, sizeof(struct DD_DownloadLog));
				close(logfd);
			}
			if (!(myf->f_flags & FLAG_FREE)) {
				user.user_dlbytes += myf->f_size;
				user.user_dlfiles++;
			}
			if (!strcasecmp(lastfile, myf->f_filename))
				keepc = 0;
			Remove((struct Node *) myf);
			oldf = myf;
			myf = (struct FFlag *) myf->fhead.ln_Succ;
			free(oldf);
		}
	}
	recountfiles();

	unlink(&parbuf[250]);

	if (discon) {
		if (autodisconnect())
			return 2;
	}
	return 1;
}
コード例 #8
0
ファイル: page.c プロジェクト: hlyytine/daydream
int pagesysop(const char *reas)
{
	struct DayDream_PageMsg pm;
	struct sockaddr_un name;
	int sock;

	time_t ctim;
	int i;

	changenodestatus("Paging SysOp");

	reason[0] = 0;
	if (reas) 
		strlcpy(reason, reas, sizeof reason);

	TypeFile("pagesysop", TYPE_MAKE | TYPE_WARN);

	if (maincfg.CFG_FLAGS & (1L << 0)) {
		if (reason[0] == 0) {
			DDPut(sd[psreasonstr]);
			if (!(Prompt(reason, 75, 0)))
				return 0;
			if (reason[0] == 0) {
				DDPut("\n");
				return 0;
			}
		}
	}
	clog.cl_flags |= CL_PAGEDSYSOP;


	sock = socket(AF_UNIX, SOCK_DGRAM, 0);
	if (sock < 0) 
		return 0;

	pm.pm_cmd = 2;
	ctim = time(0);
	*pm.pm_string = 0;
	if (onlinestat)
		snprintf(pm.pm_string, sizeof pm.pm_string, 
				"\n\n%s / %s (node %d) paged you on %s\n", 
				user.user_realname, user.user_handle, 
				node, ctime(&ctim));
	if (reason[0]) {
		strlcat(pm.pm_string, "Reason: ", sizeof pm.pm_string);
		strlcat(pm.pm_string, reason, sizeof pm.pm_string);
		strlcat(pm.pm_string, "\n\n", sizeof pm.pm_string);
	}

	name.sun_family = AF_UNIX;
	strlcpy(name.sun_path, YELLDSOCK, sizeof name.sun_path);

	if (sendto(sock, &pm, sizeof(struct DayDream_PageMsg), 0, (struct sockaddr *) &name, sizeof(struct sockaddr_un)) < 0) {
		DDPut(sd[pspageoffstr]);
		close(sock);
		return 0;
	}

	pages--;
	ddprintf(sd[pspagingstr], maincfg.CFG_SYSOPNAME);

	pageflag = 0;
	for (i = 0; i < 20; i++) {
		unsigned char c;
		DDPut(".");
		delayt = 1;
		while ((c = HotKey(HOT_QUICK))) {
			if (c == 255)
				break;
			if (c == 3) {
				DDPut(sd[psabortstr]);
				i = 21;
				break;
			}
		}
		if (pageflag)
			break;

		pm.pm_cmd = 1;

		name.sun_family = AF_UNIX;
		strlcpy(name.sun_path, YELLDSOCK, sizeof name.sun_path);
		sendto(sock, &pm, sizeof(struct DayDream_PageMsg), 0, (struct sockaddr *) &name, sizeof(struct sockaddr_un));

		sleep(1);
	}
	if (i == 20)
		DDPut(sd[psnosysopstr]);

	close(sock);

	return 0;

}
コード例 #9
0
ファイル: lineed.c プロジェクト: hlyytine/daydream
/* FIXME: rethink */
int lineed(char *buffer, size_t bufsize, int mode, struct DayDream_Message *msg)
{
	int i, j;
	char lbuf[300];
	char *s;
	int row;

	*wrapbuf = 0;
	row = 1;

	DDPut(sd[leheadstr]);

	if (mode) 
		row = quote(buffer, bufsize);
	
	for (;;) {
		snprintf(lbuf, sizeof lbuf, "%c", maincfg.CFG_LINEEDCHAR);

		while (row != 495) {
			ddprintf(sd[lelinestr], row);

			s = buffer + (row - 1) * 80;
			*s = 0;
			if (!(Prompt(s, 75, PROMPT_WRAP)))
				return 0;

			if (!*s || !strcasecmp(lbuf, s))
				break;
			row++;
		}

		for (;;) {
			DDPut(sd[lepromptstr]);
			lbuf[0] = 0;
			if (!(Prompt(lbuf, 3, 0)))
				return 0;

			if (!strcasecmp(lbuf, "a")) {
				DDPut(sd[lesureabortstr]);
				i = HotKey(HOT_NOYES);
				if (!i || i == 1)
					return 0;
			} else if (!strcasecmp(lbuf, "c")) {
				TypeFile("lineedcommands", TYPE_WARN | TYPE_MAKE);
			} else if (!strcasecmp(lbuf, "d")) {
				if ((row = delete_lines(row, buffer)) == -1)
					return 0;
			} else if (!strcasecmp(lbuf, "e")) {
				DDPut(sd[leedlinstr]);
				lbuf[0] = 0;
				if (!(Prompt(lbuf, 3, 0)))
					return 0;
				i = atoi(lbuf);
				if (!(i < 1 || i > (row - 1))) {
					ddprintf(sd[leedpstr], i);
					s = buffer + (i - 1) * 80;
					if (!(Prompt(s, 75, 0)))
						return 0;
				}
			} else if (!strcasecmp(lbuf, "r")) {
				break;
			} else if (!strcasecmp(lbuf, "f")) {
				if (msg && *msg->MSG_ATTACH) {
					fileattach();
				} else {
					DDPut(sd[noattachstr]);
				}
			} else if ((!strcasecmp(lbuf, "i")) && row < 495) {
				DDPut(sd[insertstr]);
				lbuf[0] = 0;
				if (!(Prompt(lbuf, 3, 0)))
					return 0;
				DDPut("\nInsert does not work yet, sorry...\n\n");
			} else if (!strcasecmp(lbuf, "l")) {
				int lcount = user.user_screenlength;
				i = row - 1;
				j = 1;
				while (i) {
					s = buffer + (j - 1) * 80;
					ddprintf(sd[lellinestr], j, s);
					lcount--;

					if (lcount == 0) {
						int hot;

						DDPut(sd[morepromptstr]);
						hot = HotKey(0);
						DDPut("\r                                                         \r");
						if (hot == 'N' || hot == 'n')
							break;
						if (hot == 'C' || hot == 'c') {
							lcount = -1;
						} else {
							lcount = user.user_screenlength;
						}
					}
					j++;
					i--;
				}

			} else if (!strcasecmp(lbuf, "s")) {
				return row - 1;
			} else if (!strcasecmp(lbuf, "q")) {
				if (!mode) {
					DDPut(sd[lereperrorstr]);
				}
				row = quote(s, strlen(s));
			}
		}
	}
}
コード例 #10
0
ファイル: joinconf.c プロジェクト: hlyytine/daydream
int changemsgbase(int newb, int flags)
{
	char cbuffer[500];
	int basen;
	int i;	
	struct DayDream_LRP lrpd;
	int lrpfd;
	struct stat st;
	msgbase_t *cb;

	if (!conference()->conf.CONF_MSGBASES) {
		current_msgbase = NULL;
		return 0;
	}
       			
	basen = newb;
	
	if (basen > conference()->conf.CONF_MSGBASES)
		basen = 0;
	
	/* The MC_QUICK flag is used on non-interactive occasions. */
	if (!basen && (flags & MC_QUICK))
		return 0;
	
	if (!basen) {
		if (conference()->conf.CONF_MSGBASES == 1) {
			DDPut(sd[cmbonlymsgsstr]);
			return 0;
		}
		TypeFile("messagebases", TYPE_WARN | TYPE_CONF | TYPE_MAKE);
	}	      
	
	while (!basen) {
		DDPut(sd[cmbselectstr]);
		cbuffer[0] = 0;
		if (!(Prompt(cbuffer, 3, 0)))
			return 0;
		if (!strcasecmp(cbuffer, "?") || (!strcasecmp(cbuffer, "l"))) {
			TypeFile("messagebases", TYPE_WARN | TYPE_CONF | TYPE_MAKE);
		} else if (cbuffer[0] == 0) {
			return 0;
		} else
			basen = atoi(cbuffer);
	}
	for (i = 0; i < conference()->conf.CONF_MSGBASES; i++) {
		cb = conference()->msgbases[i];		
		
		if (cb->MSGBASE_NUMBER != basen)
			continue;
		
		current_msgbase = cb;
		getmsgptrs();
		if (lrpdatname[0] && (oldlrp != lrp || oldlsp != lsp)) {
			lrpfd = open(lrpdatname, O_WRONLY | O_CREAT, 0666);
			if (lrpfd == -1) {
				DDPut(sd[cmberrlrpstr]);
				return 0;
			}
			fsetperm(lrpfd, 0666);
			fstat(lrpfd, &st);
			lrpd.lrp_read = lrp;
			lrpd.lrp_scan = lsp;
			lseek(lrpfd, sizeof(struct DayDream_LRP) * user.user_account_id, SEEK_SET);
			safe_write(lrpfd, &lrpd, sizeof(struct DayDream_LRP));
			close(lrpfd);
		}
		snprintf(lrpdatname, sizeof lrpdatname,
			"%s/messages/base%3.3d/msgbase.lrp", 
			conference()->conf.CONF_PATH, cb->MSGBASE_NUMBER);
		lrpfd = open(lrpdatname, O_RDONLY);
		
		lrp = 0;
		lsp = 0;
		oldlrp = 0;
		oldlsp = 0;
		
		if (lrpfd != -1) {
			if ((lseek(lrpfd, sizeof(struct DayDream_LRP) * user.user_account_id, SEEK_SET)) != -1) {
				if (read(lrpfd, &lrpd, sizeof(struct DayDream_LRP))) {
					oldlrp = lrp = lrpd.lrp_read;
					oldlsp = lsp = lrpd.lrp_scan;
				}
			}
			close(lrpfd);
		}
		current_msgbase = cb;
		getmsgptrs();
		
		if ((flags & MC_NOSTAT) == 0) {
			ddprintf(sd[cmbstat1str], current_msgbase->MSGBASE_NAME, highest - lowest);
			ddprintf(sd[cmbstat2str], lrp, lsp);
			ddprintf(sd[cmbstat3str], lowest, highest);
		}
		
		return 1;
	}

	DDPut(sd[cmbunkbasestr]);
	return 0;
}
コード例 #11
0
ファイル: joinconf.c プロジェクト: hlyytine/daydream
int joinconf(int confn, int flags)
{
	int newconfnum;
	conference_t *mc;
	struct iterator *iterator;

	char jbuffer[100];
	
	newconfnum = confn;

	changenodestatus("Changing conference");

	if ((flags & JC_LIST) && newconfnum == -1)
		TypeFile("joinconference", TYPE_WARN | TYPE_MAKE);


	while (newconfnum == -1) {		
		jbuffer[0] = 0;
		DDPut(sd[jcpromptstr]);
		if (!(Prompt(jbuffer, 3, 0)))
			return 0;
		if ((!strcasecmp(jbuffer, "l")) || jbuffer[0] == '?')
			TypeFile("joinconference", TYPE_WARN | TYPE_MAKE);
		else if (jbuffer[0] == 0)
			return 0;
		else {
			char *endptr;
			newconfnum = strtol(jbuffer, &endptr, 10);
			if (*jbuffer && !*endptr)
				break;
		}
		
		newconfnum = -1;
	}
	
	iterator = conference_iterator();
	while ((mc = (conference_t *) iterator_next(iterator))) {
		if (mc->conf.CONF_NUMBER != newconfnum)
			continue;
		
		if (!checkconfaccess(newconfnum, &user)) {
			if (!(flags & JC_SHUTUP)) {
				DDPut(sd[jcnoaccessstr]);
			}
			iterator_discard(iterator);
			return 0;
		}
				
		if (*mc->conf.CONF_PASSWD && !(flags & JC_SHUTUP) && !(flags & JC_QUICK)) {
			conference_t *oldconf = conference();
			
			set_conference(mc);
			TypeFile("conferencepw", TYPE_CONF | TYPE_MAKE);
			set_conference(oldconf);
			
			DDPut("Conference password: ");
			*jbuffer = 0;
			if (!(Prompt(jbuffer, 16, PROMPT_SECRET))) {
				iterator_discard(iterator);
				return 0;
			}
			if (strcasecmp(jbuffer, mc->conf.CONF_PASSWD)) {
				iterator_discard(iterator);
				return 0;
			}
		}
		
		if (!(flags & JC_NOUPDATE))
			user.user_joinconference = newconfnum;
		set_conference(mc);
		
		if (conference()->conf.CONF_MSGBASES)
			current_msgbase = conference()->msgbases[0];
		else 
			current_msgbase = NULL;

		if (!(flags & JC_QUICK)) {
			TypeFile("conferencejoined", TYPE_MAKE | TYPE_CONF);
		}
		
		if (current_msgbase) {
			if (flags & JC_QUICK) {
				changemsgbase(current_msgbase->MSGBASE_NUMBER, MC_QUICK | MC_NOSTAT);
			} else {
				changemsgbase(current_msgbase->MSGBASE_NUMBER, MC_QUICK);
			}
		}
		iterator_discard(iterator);
		return 1;
	}
	iterator_discard(iterator);
		
	if (!(flags & JC_SHUTUP)) {
		DDPut(sd[jcnoconfstr]);
	}

	return 0;
}
コード例 #12
0
ファイル: daydream.c プロジェクト: ryanfantus/daydream
static int try_login(void)
{
	char username[300];
	int retvalue, passwdcnt;
	
	DDPut(sd[usernamestr]);
	username[0] = 0;
	
	Prompt(username, 25, 0);
	removespaces(username);
	if (!checkcarrier())
		return -1;
	if (!username[0]) {		
		DDPut("");
		return -1;
	}
	if (!strcasecmp("new", username) && 
		!(maincfg.CFG_FLAGS & (1L << 17))) {
		CreateNewAccount();
		return -1;
	}
	if (!strcasecmp("logoff", username))
		return 0;
	if (!strcasecmp("chat", username)) {
		pagesysop(0);
		return -1;
	}

	retvalue = checklogon(username);
	if (!retvalue && !(maincfg.CFG_FLAGS & (1L << 17))) {
		if (maincfg.CFG_FLAGS & (1L << 9))
			return create_new_account() ? 0 : -1;
		else {
			DDPut(sd[unknownuserstr]);
			return -1;
		}
	} else {
		if (retvalue != 1 && !(maincfg.CFG_FLAGS & (1L << 18)))
			return -1;
		for (passwdcnt = 0; passwdcnt < 3; passwdcnt++) {
			username[0] = 0;
			if (ispw() || retvalue != 1) {
				DDPut(sd[passwordstr]);
				Prompt(username, 25, PROMPT_SECRET);
			}
			if (!checkcarrier()) 
				return -1;
			if (retvalue > 0 && (!ispw() || 
				cmppasswds(username, user.user_password))) {
				if (retvalue == 2) 
					DDPut(sd[alreadyonlinestr]);
				else
					getin();
				return 0;
			} else {
				if (passwdcnt != 2)
					DDPut(sd[tryagainstr]);
				clog.cl_flags |= CL_PASSWDFAIL;
			}
		}
		if (retvalue != 2) {
			TypeFile("passwordfailure", TYPE_MAKE);
			DDPut(sd[excessivepwfailstr]);
			return 0;
		} 
	}

	return -1;
}
コード例 #13
0
const TypeDir *MTPDevice::dirFetchContent(std::string path)
{
    if (!m_root_dir.isFetched()) {
        for (LIBMTP_devicestorage_t *s = m_device->storage; s; s = s->next) {
            m_root_dir.addDir(TypeDir(s_root_node, 0, s->id,
                std::string(s->StorageDescription)));
            m_root_dir.setFetched();
        }
    }

    if (m_root_dir.dirCount() == 1)
        path = '/' + m_root_dir.dirs().begin()->name() + path;

    if (path == "/")
        return &m_root_dir;

    std::string member;
    std::istringstream ss(path);
    TypeDir *dir = &m_root_dir;
    while (std::getline(ss, member, '/')) {
        if (member.empty())
            continue;

        const TypeDir *tmp = dir->dir(member);
        if (!tmp && !dir->isFetched()) {
            criticalEnter();
            LIBMTP_file_t *content = LIBMTP_Get_Files_And_Folders(
                m_device, dir->storageid(), dir->id());
            criticalLeave();
            for (LIBMTP_file_t *f = content; f; f = f->next) {
                if (f->filetype == LIBMTP_FILETYPE_FOLDER)
                    dir->addDir(TypeDir(f));
                else
                    dir->addFile(TypeFile(f));
            }
            LIBMTP_Free_Files_And_Folders(&content);
            dir->setFetched();
            tmp = dir->dir(member);
        }

        if (!tmp)
            return nullptr;
        dir = const_cast<TypeDir*>(tmp);
    }

    if (dir->isFetched())
        return dir;

    criticalEnter();
    dir->setFetched();
    LIBMTP_file_t *content = LIBMTP_Get_Files_And_Folders(
        m_device, dir->storageid(), dir->id());
    criticalLeave();
    for (LIBMTP_file_t *f = content; f; f = f->next) {
        if (f->filetype == LIBMTP_FILETYPE_FOLDER)
            dir->addDir(TypeDir(f));
        else
            dir->addFile(TypeFile(f));
    }
    LIBMTP_Free_Files_And_Folders(&content);
    return dir;
}
コード例 #14
0
ファイル: edituser.c プロジェクト: ryanfantus/daydream
/* FIXME! buffer overflows? */
static int handle_choice(const char *askbuf)
{
	char lesbabuf[30];
	struct userbase muser = user;
	int leps;
		
	if (!(strcasecmp(askbuf, "1"))) {
		for (;;) {
			if (!isaccess(SECB_REALNAME, access2))
				break;
			DDPut(sd[eu1str]);
			strlcpy(lesbabuf, user.user_realname, sizeof lesbabuf);
			if (!(Prompt(lesbabuf, 25, 0)))
				return 1;
			removespaces(lesbabuf);
			if (strcasecmp(lesbabuf, user.user_realname)) {
				leps = findusername(lesbabuf);
				if (leps == user.user_account_id || leps == -1) {
					if (lesbabuf[0])
						strlcpy(user.user_realname, lesbabuf, sizeof user.user_realname);
				} else {
					DDPut(sd[newalreadystr]);
					continue;
				}
			}
			break;
		}
	} else if (!(strcasecmp(askbuf, "2"))) {
		for (;;) {
			if (!isaccess(SECB_HANDLE, access2))
				break;
			DDPut(sd[eu2str]);
			strlcpy(lesbabuf, user.user_handle, sizeof lesbabuf);
			if (!(Prompt(lesbabuf, 25, 0)))
				return 1;
			removespaces(lesbabuf);
			if (strcasecmp(lesbabuf, user.user_handle)) {
				leps = findusername(lesbabuf);
				if (leps == user.user_account_id || leps == -1) {
					if (lesbabuf[0])
						strlcpy(user.user_handle, lesbabuf, sizeof user.user_handle);
				} else {
					DDPut(sd[newalreadystr]);
					continue;
				}
			}
			break;
		}
	} else if (!(strcasecmp(askbuf, "3"))) {
		DDPut(sd[eu3str]);
		if (!(Prompt(user.user_organization, 25, 0)))
			return 1;
	} else if (!(strcasecmp(askbuf, "4"))) {
		DDPut(sd[eu4str]);
		if (!(Prompt(user.user_zipcity, 20, 0)))
			return 1;
	} else if (!(strcasecmp(askbuf, "5"))) {
		DDPut(sd[eu5str]);
		if (!(Prompt(user.user_voicephone, 20, 0)))
			return 1;
	} else if (!(strcasecmp(askbuf, "6"))) {
		MD_CTX context;
		char verifypw[32];
		DDPut(sd[eu6str]);
		lesbabuf[0] = 0;
		if (!(Prompt(lesbabuf, 15, PROMPT_SECRET)))
			return 1;
		if (lesbabuf[0] == 0)
			return 0;
		*verifypw = 0;
		DDPut(sd[euverifypwstr]);
		if (!(Prompt(verifypw, 15, PROMPT_SECRET)))
			return 1;
		if (strcasecmp(lesbabuf, verifypw)) {
			DDPut(sd[eunomatchstr]);
			return 0;
		}
		strupr(lesbabuf);
		MDInit(&context);
		MDUpdate(&context, (unsigned char *) lesbabuf, 
			strlen(lesbabuf));
		MDFinal(user.user_password, &context);
	} else if (!strcasecmp(askbuf, "7")) {
		for (;;) {
			int fallos;
			
			DDPut(sd[eu7str]);
			lesbabuf[0] = 0;
			if (!(Prompt(lesbabuf, 3, 0)))
				return 1;
			if (lesbabuf[0] == 't' || lesbabuf[0] == 'T') {
				testscreenl();
				continue;
			}
			fallos = atoi(lesbabuf);
			if (fallos < 10) {
				DDPut(sd[newminslstr]);
				continue;
			}
			user.user_screenlength = fallos;
			break;
		}
	} else if (!(strcasecmp(askbuf, "8"))) {
		struct DayDream_Protocol *tp;

		TypeFile("protocols", TYPE_MAKE | TYPE_WARN);
		DDPut(sd[eu8str]);
		*lesbabuf = 0;
		if (user.user_protocol) {
			*lesbabuf = user.user_protocol;
			lesbabuf[1] = 0;
		}
		if (!(Prompt(lesbabuf, 3, 0)))
			return 1;
		*lesbabuf = toupper(*lesbabuf);
		if (!*lesbabuf)
			return 0;
		tp = protocols;
		for (;;) {
			if (tp->PROTOCOL_ID == 0)
				return 0;
			if (tp->PROTOCOL_ID == *lesbabuf) {
				protocol = tp;
				user.user_protocol = *lesbabuf;
				return 0;
			}
			tp++;
		}
	} else if (!(strcasecmp(askbuf, "9"))) {
		DDPut(sd[eu9str]);
		if (!(Prompt(user.user_signature, 44, 0)))
			return 1;
	} else if (!(strcasecmp(askbuf, "10"))) {
		DDPut(sd[eu10str]);
		if (!(Prompt(user.user_computermodel, 20, 0)))
			return 1;
	} else if (!(strcasecmp(askbuf, "11"))) {
		DDPut(sd[eu11str]);
		snprintf(lesbabuf, sizeof lesbabuf, "%d", user.user_flines);
		if (!(Prompt(lesbabuf, 3, 0)))
			return 1;
		user.user_flines = atoi(lesbabuf);
        } else if (!(strcasecmp(askbuf, "12"))) {
		rundoor("doors/autosig %N", 0);
		return 1;
	} else if (!(strcasecmp(askbuf, "a"))) {
		DDPut(sd[euabortedstr]);
		user = muser;
		return 1;
	} else if (!(strcasecmp(askbuf, "v"))) {
		TypeFile("edituser", TYPE_MAKE | TYPE_WARN);
	} else if (!(strcasecmp(askbuf, "s"))) {
		switches();
	} else if ((!(strcasecmp(askbuf, "c")) || (askbuf[0] == 0))) {
		DDPut(sd[eusavedstr]);
		saveuserbase(&user);
		return 1;
	}
	return 0;
}