/*
- * $Id$
- *
* Main source module for the client program.
*
* Copyright (c) 1987-2009 by the citadel.org team
#define IFEXPERT if (userflags&US_EXPERT)
#define IFNEXPERT if ((userflags&US_EXPERT)==0)
-#define IFAIDE if (axlevel>=6)
-#define IFNAIDE if (axlevel<6)
+#define IFAIDE if (axlevel>=AxAideU)
+#define IFNAIDE if (axlevel<AxAideU)
int rordercmp(struct ctdlroomlisting *r1, struct ctdlroomlisting *r2);
int screenheight;
unsigned room_flags;
unsigned room_flags2;
+int entmsg_ok = 0;
char room_name[ROOMNAMELEN];
char *uglist[UGLISTLEN]; /* size of the ungoto list */
long uglistlsn[UGLISTLEN]; /* current read position for all the ungoto's. Not going to make any friends with this one. */
int uglistsize = 0;
char is_mail = 0; /* nonzero when we're in a mail room */
-char axlevel = 0; /* access level */
+char axlevel = AxDeleted; /* access level */
char is_room_aide = 0; /* boolean flag, 1 if room aide */
int timescalled;
int posted;
from_floor = curr_floor;
curr_floor = room->RRfloor;
+ /* Determine, based on the room's default view, whether an <E>nter message
+ * command will be valid here.
+ */
+ switch(room->RRdefaultview) {
+ case VIEW_BBS:
+ case VIEW_MAILBOX:
+ entmsg_ok = 1;
+ break;
+ default:
+ entmsg_ok = 0;
+ break;
+ }
+
remove_march(room_name, 0);
if (!strcasecmp(towhere, "_BASEROOM_"))
remove_march(towhere, 0);
rv = system(rc_gotmail_cmd);
}
}
- status_line(ipc->ServInfo.humannode, ipc->ServInfo.site_location,
- room_name, secure, newmailcount);
free(room);
}
if (have_xterm) { /* dynamically size screen if on an xterm */
if (ioctl(0, TIOCGWINSZ, &xwinsz) == 0) {
if (xwinsz.height)
- screenheight = is_curses_enabled() ? (int)xwinsz.height - 1 : (int) xwinsz.height;
+ screenheight = (int) xwinsz.height;
if (xwinsz.width)
screenwidth = (int) xwinsz.width;
}
}
static void statusHook(char *s) {
- sln_printf(s);
- sln_flush();
+ scr_printf(s);
+ scr_flush();
}
/*
eCrash_Init(¶ms);
#endif
setIPCDeathHook(screen_delete);
- setIPCErrorPrintf(err_printf);
+ setIPCErrorPrintf(scr_printf);
setCryptoStatusHook(statusHook);
/* Permissions sanity check - don't run citadel setuid/setgid */
if (getuid() != geteuid()) {
- err_printf("Please do not run citadel setuid!\n");
+ scr_printf("Please do not run citadel setuid!\n");
logoff(NULL, 3);
} else if (getgid() != getegid()) {
- err_printf("Please do not run citadel setgid!\n");
+ scr_printf("Please do not run citadel setgid!\n");
logoff(NULL, 3);
}
newprompt("Connect to (return for local server): ", hostbuf, 64);
#endif
- sln_printf("Attaching to server... \r");
- sln_flush();
+ scr_printf("Attaching to server...\n");
ipc = CtdlIPC_new(argc, argv, hostbuf, portbuf);
if (!ipc) {
screen_delete();
error_printf("Can't connect: %s\n", strerror(errno));
logoff(NULL, 3);
}
+
+ if (!(ipc->isLocal)) {
+ scr_printf("Connected to %s [%s].\n", ipc->ip_hostname, ipc->ip_address);
+ }
+
#if defined(HAVE_CURSES_H) && !defined(DISABLE_CURSES)
CtdlIPC_SetNetworkStatusCallback(ipc, wait_indicator);
#endif
ipc->ServInfo.site_location);
scr_flush();
- status_line(ipc->ServInfo.humannode, ipc->ServInfo.site_location, NULL,
- secure, -1);
-
screenwidth = 80; /* default screen dimensions */
screenheight = 24;
mcmd = 29;
goto TERMN8;
}
+
+ /* FIXME this is a stupid way to do guest mode but it's a reasonable test harness FIXME */
+ if ( (ipc->ServInfo.guest_logins) && (!strcasecmp(fullname, "guest")) ) {
+ goto PWOK;
+ }
+
/* sign on to the server */
r = CtdlIPCTryLogin(ipc, fullname, aaa);
if (r / 100 != 3)
} else {
newprompt("\rPlease enter your password: ", password, -19);
}
- strproc(password);
if (*nonce) {
r = CtdlIPCTryApopPassword(ipc, make_apop_string(password, nonce, hexstring, sizeof hexstring), aaa);
+ if (r / 100 != 2) {
+ strproc(password);
+ r = CtdlIPCTryApopPassword(ipc, make_apop_string(password, nonce, hexstring, sizeof hexstring), aaa);
+ }
} else {
r = CtdlIPCTryPassword(ipc, password, aaa);
+ if (r / 100 != 2) {
+ strproc(password);
+ r = CtdlIPCTryPassword(ipc, password, aaa);
+ }
}
if (r / 100 == 2) {
rv = system(rc_gotmail_cmd);
}
}
- if ((axlevel >= 6) && (chek.needvalid > 0)) {
+ if ((axlevel >= AxAideU) && (chek.needvalid > 0)) {
scr_printf("*** Users need validation\n");
}
if (chek.needregis > 0) {
chatmode(ipc);
break;
- case 2:
- if (ipc->isLocal) {
- screen_reset();
- stty_ctdl(SB_RESTORE);
- snprintf(aaa, sizeof aaa, "USERNAME=\042%s\042; export USERNAME;"
- "exec ./subsystem %ld %d %d", fullname,
- usernum, screenwidth, axlevel);
- ka_system(aaa);
- stty_ctdl(SB_NO_INTR);
- screen_set();
- } else {
- scr_printf("*** Can't run doors when server is not local.\n");
- }
- break;
-
case 17:
who_is_online(ipc, 0);
break;
remove_march(marchptr->march_name, 0);
}
if (mcmd == 30) {
- sln_printf("\n\nType 'off' to disconnect, or next user...\n");
+ scr_printf("\n\nType 'off' to disconnect, or next user...\n");
}
CtdlIPCLogout(ipc);
if ((mcmd == 29) || (mcmd == 15)) {