/*
- * Citadel/UX
- *
- * citadel.c - Main source file.
* $Id$
+ *
+ * Main source module for the client program.
*/
#include "sysdep.h"
#include "commands.h"
#include "ipc.h"
#include "client_chat.h"
-#include "client_icq.h"
+#include "client_passwords.h"
#include "citadel_decls.h"
#include "tools.h"
#ifndef HAVE_SNPRINTF
struct march {
struct march *next;
- char march_name[32];
+ char march_name[ROOMNAMELEN];
char march_floor;
char march_order;
};
char have_xterm = 0; /* are we running on an xterm? */
char rc_username[32];
char rc_password[32];
+char hostbuf[256];
+char portbuf[256];
char rc_floor_mode;
char floor_mode;
char curr_floor = 0; /* number of current floor */
char fl[256];
struct tm *tmbuf;
time_t lc;
- int linecount = 2;
serv_puts("LIST");
serv_gets(buf);
if (buf[0] != '1') {
- printf("%s\n", &buf[4]);
+ pprintf("%s\n", &buf[4]);
return;
}
sigcaught = 0;
sttybbs(SB_YES_INTR);
- printf(" User Name Num L LastCall Calls Posts\n");
- printf("------------------------- ----- - ---------- ----- -----\n");
+ pprintf(" User Name Num L LastCall Calls Posts\n");
+ pprintf("------------------------- ----- - ---------- ----- -----\n");
while (serv_gets(buf), strcmp(buf, "000")) {
if (sigcaught == 0) {
extract(fl, buf, 0);
if (pattern(fl, patn) >= 0) {
- printf("%-25s ", fl);
- printf("%5ld %d ", extract_long(buf, 2),
+ pprintf("%-25s ", fl);
+ pprintf("%5ld %d ", extract_long(buf, 2),
extract_int(buf, 1));
lc = extract_long(buf, 3);
tmbuf = (struct tm *) localtime(&lc);
- printf("%02d/%02d/%04d ",
+ pprintf("%02d/%02d/%04d ",
(tmbuf->tm_mon + 1),
tmbuf->tm_mday,
(tmbuf->tm_year + 1900));
- printf("%5ld %5ld\n", extract_long(buf, 4), extract_long(buf, 5));
-
- ++linecount;
- linecount = checkpagin(linecount,
- ((userflags & US_PAGINATOR) ? 1 : 0),
- screenheight);
+ pprintf("%5ld %5ld\n", extract_long(buf, 4), extract_long(buf, 5));
}
}
}
sttybbs(SB_NO_INTR);
- printf("\n");
+ pprintf("\n");
}
if (march == NULL)
return;
- if ((!strucmp(march->march_name, roomname))
- || ((!strucmp(roomname, "_FLOOR_")) && (march->march_floor == floornum))) {
+ if ((!strcasecmp(march->march_name, roomname))
+ || ((!strcasecmp(roomname, "_FLOOR_")) && (march->march_floor == floornum))) {
mptr = march->next;
free(march);
march = mptr;
mptr2 = march;
for (mptr = march; mptr != NULL; mptr = mptr->next) {
- if ((!strucmp(mptr->march_name, roomname))
- || ((!strucmp(roomname, "_FLOOR_"))
+ if ((!strcasecmp(mptr->march_name, roomname))
+ || ((!strcasecmp(roomname, "_FLOOR_"))
&& (mptr->march_floor == floornum))) {
mptr2->next = mptr->next;
if (pattern(psearch, towhere) >= 0) {
partial_match = 1;
}
- if (!struncmp(towhere, psearch, strlen(towhere))) {
+ if (!strncasecmp(towhere, psearch, strlen(towhere))) {
partial_match = 2;
}
if (partial_match > best_match) {
curr_floor = extract_int(&aaa[4], 10);
remove_march(room_name, 0);
- if (!strucmp(towhere, "_BASEROOM_"))
+ if (!strcasecmp(towhere, "_BASEROOM_"))
remove_march(towhere, 0);
if ((from_floor != curr_floor) && (display_name > 0) && (floor_mode == 1)) {
if (floorlist[(int) curr_floor][0] == 0)
{
char buf[256];
struct march *mptr, *mptr2;
- char next_room[32];
+ char next_room[ROOMNAMELEN];
/* Check to see if the march-mode list is already allocated.
* If it is, pop the first room off the list and go there.
load_floorlist();
tofloor = (-1);
for (a = 0; a < 128; ++a)
- if (!strucmp(&floorlist[a][0], towhere))
+ if (!strcasecmp(&floorlist[a][0], towhere))
tofloor = a;
if (tofloor < 0) {
for (a = 0; a < 128; ++a) {
- if (!struncmp(&floorlist[a][0], towhere, strlen(towhere))) {
+ if (!strncasecmp(&floorlist[a][0], towhere, strlen(towhere))) {
tofloor = a;
}
}
}
strproc(pass1);
strproc(pass2);
- if (!strucmp(pass1, pass2)) {
+ if (!strcasecmp(pass1, pass2)) {
snprintf(buf, sizeof buf, "SETP %s", pass1);
serv_puts(buf);
serv_gets(buf);
printf("%s\n", &buf[4]);
+ offer_to_remember_password(hostbuf, portbuf, fullname, pass1);
return (0);
} else {
printf("*** They don't match... try again.\n");
time_t timenow = 0;
time_t idletime, idlehours, idlemins, idlesecs;
int last_session = (-1);
- int linecount = 2;
if (longlist) {
serv_puts("TIME");
}
} else {
color(BRIGHT_WHITE);
- printf("FLG ### User Name Room From host\n");
+ pprintf("FLG ### User Name Room From host\n");
color(DIM_WHITE);
- printf("--- --- ------------------------- -------------------- ------------------------\n");
+ pprintf("--- --- ------------------------- -------------------- ------------------------\n");
}
serv_puts("RWHO");
serv_gets(buf);
idlehours = idletime / 3600;
idlemins = (idletime - (idlehours * 3600)) / 60;
idlesecs = (idletime - (idlehours * 3600) - (idlemins * 60));
- printf("\nFlags: %-3s Sess# %-3d Name: %-25s Room: %s\n",
+ pprintf("\nFlags: %-3s Sess# %-3d Name: %-25s Room: %s\n",
flags, extract_int(buf, 0), username, roomname);
- printf("from <%s> using <%s>, idle %ld:%02ld:%02ld\n",
+ pprintf("from <%s> using <%s>, idle %ld:%02ld:%02ld\n",
fromhost, clientsoft,
(long) idlehours, (long) idlemins, (long) idlesecs);
- linecount += 3;
} else {
if (extract_int(buf, 0) == last_session) {
- printf(" ");
+ pprintf(" ");
} else {
color(BRIGHT_MAGENTA);
- printf("%-3s ", flags);
+ pprintf("%-3s ", flags);
color(DIM_WHITE);
- printf("%-3d ", extract_int(buf, 0));
+ pprintf("%-3d ", extract_int(buf, 0));
}
last_session = extract_int(buf, 0);
color(BRIGHT_CYAN);
- printf("%-25s ", username);
+ pprintf("%-25s ", username);
color(BRIGHT_MAGENTA);
roomname[20] = 0;
- printf("%-20s ", roomname);
+ pprintf("%-20s ", roomname);
color(BRIGHT_CYAN);
- printf("%-24s\n", fromhost);
+ pprintf("%-24s\n", fromhost);
color(DIM_WHITE);
- ++linecount;
}
- linecount = checkpagin(linecount,
- ((userflags & US_PAGINATOR) ? 1 : 0),
- screenheight);
}
}
}
int main(int argc, char **argv)
{
int a, b, mcmd;
- char aaa[100], bbb[100], eee[100]; /* general purpose variables */
+ char aaa[100], bbb[100];/* general purpose variables */
char argbuf[32]; /* command line buf */
volatile int termn8 = 0;
-
+ int stored_password = 0;
+ char password[256];
sttybbs(SB_SAVE); /* Store the old terminal parameters */
load_command_set(); /* parse the citadel.rc file */
signal(SIGTERM, dropcarr); /* Cleanup gracefully if terminated */
signal(SIGCONT, catch_sigcont); /* Catch SIGCONT so we can reset terminal */
- printf("Attaching to server...\r");
+ printf("Attaching to server... \r");
fflush(stdout);
- attach_to_server(argc, argv);
+ attach_to_server(argc, argv, hostbuf, portbuf);
send_ansi_detect();
get_serv_info();
look_for_ansi();
- /* cls(0); */
+ cls(0);
color(7);
- printf("%-22s\n%s\n%s\n", serv_info.serv_software, serv_info.serv_humannode,
+ printf("%-23s\n%s\n%s\n", serv_info.serv_software, serv_info.serv_humannode,
serv_info.serv_bbs_city);
screenwidth = 80; /* default screen dimensions */
screenheight = 24;
formout("hello"); /* print the opening greeting */
printf("\n");
-GSTA: termn8 = 0;
+GSTA: /* See if we have a username and password on disk */
+ if (rc_remember_passwords) {
+ get_stored_password(hostbuf, portbuf, fullname, password);
+ if (strlen(fullname) > 0) {
+ sprintf(aaa, "USER %s", fullname);
+ serv_puts(aaa);
+ serv_gets(aaa);
+ sprintf(aaa, "PASS %s", password);
+ serv_puts(aaa);
+ serv_gets(aaa);
+ if (aaa[0] == '2') {
+ load_user_info(&aaa[4]);
+ stored_password = 1;
+ goto PWOK;
+ }
+ else {
+ set_stored_password(hostbuf, portbuf, "", "");
+ }
+ }
+ }
+
+ termn8 = 0;
newnow = 0;
do {
if (strlen(rc_username) > 0) {
newprompt("Enter your name: ", fullname, 29);
}
strproc(fullname);
- if (!strucmp(fullname, "new")) { /* just in case */
+ if (!strcasecmp(fullname, "new")) { /* just in case */
printf("Please enter the name you wish to log in with.\n");
}
} while (
- (!strucmp(fullname, "bbs"))
- || (!strucmp(fullname, "new"))
+ (!strcasecmp(fullname, "bbs"))
+ || (!strcasecmp(fullname, "new"))
|| (strlen(fullname) == 0));
- if (!strucmp(fullname, "off")) {
+ if (!strcasecmp(fullname, "off")) {
mcmd = 29;
goto TERMN8;
}
/* password authentication */
if (strlen(rc_password) > 0) {
- strcpy(eee, rc_password);
+ strcpy(password, rc_password);
} else {
- newprompt("\rPlease enter your password: ", eee, -19);
+ newprompt("\rPlease enter your password: ", password, -19);
}
- strproc(eee);
- snprintf(aaa, sizeof aaa, "PASS %s", eee);
+ strproc(password);
+ snprintf(aaa, sizeof aaa, "PASS %s", password);
serv_puts(aaa);
serv_gets(aaa);
if (aaa[0] == '2') {
load_user_info(&aaa[4]);
+ offer_to_remember_password(hostbuf, portbuf,
+ fullname, password);
goto PWOK;
}
printf("<< wrong password >>\n");
logoff(0);
goto GSTA;
- NEWUSR:if (strlen(rc_password) == 0) {
+NEWUSR: if (strlen(rc_password) == 0) {
printf("No record. Enter as new user? ");
if (yesno() == 0)
goto GSTA;
enter_config(1);
- PWOK:printf("%s\nAccess level: %d (%s)\nUser #%ld / Call #%d\n",
+PWOK: printf("%s\nAccess level: %d (%s)\nUser #%ld / Call #%d\n",
fullname, axlevel, axdefs[(int) axlevel],
usernum, timescalled);
page_user();
break;
- case 81:
- setup_icq();
- break;
-
} /* end switch */
} while (termn8 == 0);