-/*
- * Main source module for the client program.
- *
- * Copyright (c) 1987-2018 by the citadel.org team
- *
- * This program is open source software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
+// Main source module for the client program.
+//
+// Copyright (c) 1987-2022 by the citadel.org team
+//
+// This program is open source software. Use, duplication, and/or
+// disclosure is subject to the GNU General Purpose License version 3.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
#include "textclient.h"
char is_mail = 0; /* nonzero when we're in a mail room */
char axlevel = AxDeleted; /* access level */
char is_room_aide = 0; /* boolean flag, 1 if room admin */
-int timescalled;
-int posted;
unsigned userflags;
long usernum = 0L; /* user number */
time_t lastcall = 0L; /* Date/time of previous login */
int enable_syslog = 0;
-/*
- * here is our 'clean up gracefully and exit' routine
- */
-void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code)
-{
+// Here is our 'clean up gracefully and exit' routine
+void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code) {
int lp;
if (editor_pid > 0) { /* kill the editor if it's running */
kill(editor_pid, SIGHUP);
}
- /* Free the ungoto list */
+ // Free the ungoto list
for (lp = 0; lp < uglistsize; lp++) {
free(uglist[lp]);
}
-/* Shut down the server connection ... but not if the logoff code is 3,
- * because that means we're exiting because we already lost the server.
- */
+ // Shut down the server connection ... but not if the logoff code is 3,
+ // because that means we're exiting because we already lost the server.
if (code != 3) {
CtdlIPCQuit(ipc);
}
-/*
- * now clean up various things
- */
+ // now clean up various things
unlink(temp);
unlink(temp2);
nukedir(tempdir);
- /* Violently kill off any child processes if Citadel is
- * the login shell.
- */
+ // Violently kill off any child processes if Citadel is the login shell.
if (getppid() == 1) {
kill(0 - getpgrp(), SIGTERM);
sleep(1);
kill(0 - getpgrp(), SIGKILL);
}
- color(ORIGINAL_PAIR); /* Restore the old color settings */
- stty_ctdl(SB_RESTORE); /* return the old terminal settings */
- /*
- * uncomment the following if you need to know why Citadel exited
- printf("*** Exit code %d at %s:%d\n", code, file, line);
- sleep(2);
- */
- exit(code); /* exit with the proper exit code */
+ color(ORIGINAL_PAIR); // Restore the old color settings
+ stty_ctdl(SB_RESTORE); // return the old terminal settings
+ exit(code); // exit with the proper exit code
}
/*
* signal catching function for hangups...
*/
-void dropcarr(int signum)
-{
+void dropcarr(int signum) {
logoff(NULL, 3); /* No IPC when server's already gone! */
}
* catch SIGCONT to reset terminal modes when were are put back into the
* foreground.
*/
-void catch_sigcont(int signum)
-{
+void catch_sigcont(int signum) {
stty_ctdl(SB_LAST);
signal(SIGCONT, catch_sigcont);
}
/* general purpose routines */
/* display a file */
-void formout(CtdlIPC * ipc, char *name)
-{
+void formout(CtdlIPC * ipc, char *name) {
int r; /* IPC return code */
char buf[SIZ];
char *text = NULL;
}
-void userlist(CtdlIPC * ipc, char *patn)
-{
+void userlist(CtdlIPC * ipc, char *patn) {
char buf[SIZ];
- char fl[SIZ];
+ char fl[64]; // a buffer this small will prevent it overrunning the column
struct tm tmbuf;
time_t lc;
- int r; /* IPC response code */
+ int r; // IPC response code
char *listing = NULL;
r = CtdlIPCUserListing(ipc, patn, &listing, buf);
return;
}
- scr_printf(" User Name Num L Last Visit Logins Messages\n");
- scr_printf("------------------------- ----- - ---------- ------ --------\n");
+ scr_printf("User Name Last Login\n");
+ scr_printf("---------------------------------------------------------------- ----------\n");
if (listing != NULL)
while (!IsEmptyStr(listing)) {
extract_token(buf, listing, 0, '\n', sizeof buf);
if (sigcaught == 0) {
extract_token(fl, buf, 0, '|', sizeof fl);
if (pattern(fl, patn) >= 0) {
- scr_printf("%-25s ", fl);
- scr_printf("%5ld %d ", extract_long(buf, 2), extract_int(buf, 1));
+ scr_printf("%-64s ", fl);
lc = extract_long(buf, 3);
localtime_r(&lc, &tmbuf);
- scr_printf("%02d/%02d/%04d ", (tmbuf.tm_mon + 1), tmbuf.tm_mday, (tmbuf.tm_year + 1900));
- scr_printf("%6ld %8ld\n", extract_long(buf, 4), extract_long(buf, 5));
+ scr_printf("%02d/%02d/%04d\n", (tmbuf.tm_mon + 1), tmbuf.tm_mday, (tmbuf.tm_year + 1900));
}
}
}
-/*
- * grab assorted info about the user...
- */
-void load_user_info(char *params)
-{
+// grab assorted info about the user...
+void load_user_info(char *params) {
extract_token(fullname, params, 0, '|', sizeof fullname);
axlevel = extract_int(params, 1);
- timescalled = extract_int(params, 2);
- posted = extract_int(params, 3);
userflags = extract_int(params, 4);
usernum = extract_long(params, 5);
lastcall = extract_long(params, 6);
}
-/*
- * Remove a room from the march list. 'floornum' is ignored unless
- * 'roomname' is set to _FLOOR_, in which case all rooms on the requested
- * floor will be removed from the march list.
- */
-void remove_march(char *roomname, int floornum)
-{
+// Remove a room from the march list. 'floornum' is ignored unless
+// 'roomname' is set to _FLOOR_, in which case all rooms on the requested
+// floor will be removed from the march list.
+void remove_march(char *roomname, int floornum) {
struct march *mptr, *mptr2;
if (marchptr == NULL)
mptr2->next = mptr->next;
free(mptr);
mptr = mptr2;
- } else {
+ }
+ else {
mptr2 = mptr;
}
}
}
-/*
- * Locate the room on the march list which we most want to go to. Each room
- * is measured given a "weight" of preference based on various factors.
- */
-char *pop_march(int desired_floor, struct march *_march)
-{
+// Locate the room on the march list which we most want to go to. Each room
+// is measured given a "weight" of preference based on various factors.
+char *pop_march(int desired_floor, struct march *_march) {
static char TheRoom[ROOMNAMELEN];
int TheWeight = 0;
int weight;
}
-/*
- * jump directly to a room
- */
-void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto)
-{
+// jump directly to a room
+void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto) {
char aaa[SIZ], bbb[SIZ];
static long ls = 0L;
- int newmailcount = 0;
int partial_match, best_match;
char from_floor;
int ugpos = uglistsize;
uglistlsn[lp] = uglistlsn[lp + 1];
}
ugpos--;
- } else {
+ }
+ else {
uglistsize++;
}
scr_printf("%s\n", aaa);
return;
}
- safestrncpy(room_name, room->RRname, ROOMNAMELEN);
+ strncpy(room_name, room->RRname, ROOMNAMELEN);
room_flags = room->RRflags;
room_flags2 = room->RRflags2;
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.
- */
+ // 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 = ENTMSG_OK_YES;
+ break;
case VIEW_BLOG:
- entmsg_ok = 1;
+ entmsg_ok = ENTMSG_OK_BLOG;
break;
default:
- entmsg_ok = 0;
+ entmsg_ok = ENTMSG_OK_NO;
break;
}
if (room->RRinfoupdated > 0)
readinfo(ipc);
- /* check for newly arrived mail if we can */
- newmailcount = room->RRnewmail;
- if (newmailcount > 0) {
- color(BRIGHT_RED);
- if (newmailcount == 1) {
- scr_printf("*** A new mail message has arrived.\n");
- } else {
- scr_printf("*** %d new mail messages have arrived.\n", newmailcount);
- }
- color(DIM_WHITE);
- if (!IsEmptyStr(rc_gotmail_cmd)) {
- rv = system(rc_gotmail_cmd);
- if (rv)
- scr_printf("*** failed to check for mail calling %s Reason %d.\n", rc_gotmail_cmd, rv);
- }
- }
+ /* check for newly arrived mail if we can FIXME use BIFF command for this
+ if (newmailcount > 0) {
+ color(BRIGHT_RED);
+ if (newmailcount == 1) {
+ scr_printf("*** A new mail message has arrived.\n");
+ }
+ else {
+ scr_printf("*** %d new mail messages have arrived.\n", newmailcount);
+ }
+ color(DIM_WHITE);
+ if (!IsEmptyStr(rc_gotmail_cmd)) {
+ rv = system(rc_gotmail_cmd);
+ if (rv)
+ scr_printf("*** failed to check for mail calling %s Reason %d.\n", rc_gotmail_cmd, rv);
+ }
+ }
+ */
+
free(room);
if (screenwidth > 5)
- snprintf(&status_line[1], screenwidth - 1, "%s | %s | %s | %s | %d new mail |",
- (secure ? "Encrypted" : "Unencrypted"),
- ipc->ServInfo.humannode, ipc->ServInfo.site_location, room_name, newmailcount);
+ snprintf(&status_line[1], screenwidth - 1, "%s | %s | %s | %s | %d new mail |", (secure ? "Encrypted" : "Unencrypted"), ipc->ServInfo.humannode, ipc->ServInfo.site_location, room_name, 0); // FIXME use BIFF
}
+
/* Goto next room having unread messages.
* We want to skip over rooms that the user has already been to, and take the
* user back to the lobby when done. The room we end up in is placed in
* newroom - which is set to 0 (the lobby) initially.
*/
-void gotonext(CtdlIPC * ipc)
-{
+void gotonext(CtdlIPC * ipc) {
char buf[SIZ];
struct march *mptr, *mptr2;
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.
- */
+ // Check to see if the march-mode list is already allocated.
+ // If it is, pop the first room off the list and go there.
if (marchptr == NULL) {
CtdlIPCKnownRooms(ipc, SubscribedRoomsWithNewMessages, AllFloors, &marchptr, buf);
-/* add _BASEROOM_ to the end of the march list, so the user will end up
- * in the system base room (usually the Lobby>) at the end of the loop
- */
+ // Add _BASEROOM_ to the end of the march list, so the user will end up
+ // in the system base room (usually the Lobby>) at the end of the loop.
mptr = (struct march *) malloc(sizeof(struct march));
mptr->next = NULL;
mptr->march_order = 0;
strcpy(mptr->march_name, "_BASEROOM_");
if (marchptr == NULL) {
marchptr = mptr;
- } else {
+ }
+ else {
mptr2 = marchptr;
while (mptr2->next != NULL)
mptr2 = mptr2->next;
mptr2->next = mptr;
}
-/*
- * ...and remove the room we're currently in, so a <G>oto doesn't make us
- * walk around in circles
- */
+
+ // ...and remove the room we're currently in, so a <G>oto doesn't make us walk around in circles
remove_march(room_name, 0);
}
if (marchptr != NULL) {
strcpy(next_room, pop_march(curr_floor, marchptr));
- } else {
+ }
+ else {
strcpy(next_room, "_BASEROOM_");
}
remove_march(next_room, 0);
dotgoto(ipc, next_room, 1, 0);
}
-/*
- * forget all rooms on a given floor
- */
-void forget_all_rooms_on(CtdlIPC * ipc, int ffloor)
-{
+
+// forget all rooms on a given floor
+void forget_all_rooms_on(CtdlIPC * ipc, int ffloor) {
char buf[SIZ];
struct march *flist = NULL;
struct march *fptr = NULL;
struct ctdlipcroom *room = NULL;
- int r; /* IPC response code */
+ int r; // IPC response code
scr_printf("Forgetting all rooms on %s...\n", &floorlist[ffloor][0]);
remove_march("_FLOOR_", ffloor);
}
-/*
- * routine called by gotofloor() to move to a new room on a new floor
- */
-void gf_toroom(CtdlIPC * ipc, char *towhere, int mode)
-{
+// routine called by gotofloor() to move to a new room on a new floor
+void gf_toroom(CtdlIPC * ipc, char *towhere, int mode) {
int floor_being_left;
floor_being_left = curr_floor;
if (mode == GF_GOTO) { /* <;G>oto mode */
updatels(ipc);
dotgoto(ipc, towhere, 1, 0);
- } else if (mode == GF_SKIP) { /* <;S>kip mode */
+ }
+ else if (mode == GF_SKIP) { /* <;S>kip mode */
dotgoto(ipc, towhere, 1, 0);
remove_march("_FLOOR_", floor_being_left);
- } else if (mode == GF_ZAP) { /* <;Z>ap mode */
+ }
+ else if (mode == GF_ZAP) { /* <;Z>ap mode */
dotgoto(ipc, towhere, 1, 0);
remove_march("_FLOOR_", floor_being_left);
forget_all_rooms_on(ipc, floor_being_left);
}
-/*
- * go to a new floor
- */
-void gotofloor(CtdlIPC * ipc, char *towhere, int mode)
-{
+// go to a new floor
+void gotofloor(CtdlIPC * ipc, char *towhere, int mode) {
int a, tofloor;
int r; /* IPC response code */
struct march *mptr;
}
if (!IsEmptyStr(targ)) {
gf_toroom(ipc, targ, mode);
- } else {
+ }
+ else {
scr_printf("There are no rooms on '%s'.\n", &floorlist[tofloor][0]);
}
}
+
/*
* Indexing mechanism for a room list, called by gotoroomstep()
*/
-void room_tree_list_query(struct ctdlroomlisting *rp, char *findrmname, int findrmslot, char *rmname, int *rmslot, int *rmtotal)
-{
+void room_tree_list_query(struct ctdlroomlisting *rp, char *findrmname, int findrmslot, char *rmname, int *rmslot, int *rmtotal) {
char roomname[ROOMNAMELEN];
static int cur_rmslot = 0;
/*
* step through rooms on current floor
*/
-void gotoroomstep(CtdlIPC * ipc, int direction, int mode)
-{
+void gotoroomstep(CtdlIPC * ipc, int direction, int mode) {
struct march *listing = NULL;
struct march *mptr;
int r; /* IPC response code */
rs = rl;
if (rl == NULL) {
rl = rp;
- } else {
+ }
+ else {
while (rp != NULL) {
if (rordercmp(rp, rs) < 0) {
if (rs->lnext == NULL) {
rs->lnext = rp;
rp = NULL;
- } else {
+ }
+ else {
rs = rs->lnext;
}
- } else {
+ }
+ else {
if (rs->rnext == NULL) {
rs->rnext = rp;
rp = NULL;
- } else {
+ }
+ else {
rs = rs->rnext;
}
}
/* If we're at the first room, wrap to the last room */
if (rmslot == 0) {
rmslot = rmtotal - 1;
- } else {
+ }
+ else {
rmslot--;
}
- } else { /* Next room */
+ }
+ else { /* Next room */
/* If we're at the last room, wrap to the first room */
if (rmslot == rmtotal - 1) {
rmslot = 0;
- } else {
+ }
+ else {
rmslot++;
}
}
/*
* step through floors on system
*/
-void gotofloorstep(CtdlIPC * ipc, int direction, int mode)
-{
+void gotofloorstep(CtdlIPC * ipc, int direction, int mode) {
int tofloor;
if (floorlist[0][0] == 0)
while (!floorlist[tofloor][0])
tofloor--;
- } else { /* Next floor */
+ }
+ else { /* Next floor */
if (curr_floor < 127)
tofloor = curr_floor + 1;
else
}
}
+
/*
* Display user 'preferences'.
*/
extern int rc_prompt_control;
-void read_config(CtdlIPC * ipc)
-{
+void read_config(CtdlIPC * ipc) {
char buf[SIZ];
char *resp = NULL;
int r; /* IPC response code */
char _fullname[USERNAME_SIZE];
long _usernum;
- int _axlevel, _timescalled, _posted;
+ int _axlevel;
time_t _lastcall;
struct ctdluser *user = NULL;
_usernum = extract_long(buf, 2);
_axlevel = extract_int(buf, 3);
_lastcall = extract_long(buf, 4);
- _timescalled = extract_int(buf, 5);
- _posted = extract_int(buf, 6);
free(resp);
resp = NULL;
}
/* show misc user info */
- scr_printf("%s\nAccess level: %d (%s)\n"
- "User #%ld / %d Calls / %d Posts", _fullname, _axlevel, axdefs[(int) _axlevel], _usernum, _timescalled, _posted);
if (_lastcall > 0L) {
- scr_printf(" / Curr login: %s", asctime(localtime(&_lastcall)));
+ scr_printf("Last login: %s", asctime(localtime(&_lastcall)));
}
scr_printf("\n");
free(user);
}
+
/*
* Display system statistics.
*/
-void system_info(CtdlIPC * ipc)
-{
+void system_info(CtdlIPC * ipc) {
char buf[SIZ];
char *resp = NULL;
size_t bytes;
scr_printf("Your system administrator is %s.\n", ipc->ServInfo.sysadm);
}
+
/*
* forget all rooms on current floor
*/
-void forget_this_floor(CtdlIPC * ipc)
-{
+void forget_this_floor(CtdlIPC * ipc) {
if (curr_floor == 0) {
scr_printf("Can't forget this floor.\n");
return;
/*
* set floor mode depending on client, server, and user settings
*/
-void set_floor_mode(CtdlIPC * ipc)
-{
+void set_floor_mode(CtdlIPC * ipc) {
if (ipc->ServInfo.ok_floors == 0) {
floor_mode = 0; /* Don't use floors if the server */
}
/*
* Set or change the user's password
*/
-int set_password(CtdlIPC * ipc)
-{
+int set_password(CtdlIPC * ipc) {
char pass1[20];
char pass2[20];
char buf[SIZ];
if (!IsEmptyStr(rc_password)) {
strcpy(pass1, rc_password);
strcpy(pass2, rc_password);
- } else {
+ }
+ else {
IFNEXPERT formout(ipc, "changepw");
newprompt("Enter a new password: ", pass1, -19);
newprompt("Enter it again to confirm: ", pass2, -19);
scr_printf("%s\n", buf);
offer_to_remember_password(ipc, hostbuf, portbuf, fullname, pass1);
return (0);
- } else {
+ }
+ else {
scr_printf("*** They don't match... try again.\n");
return (1);
}
}
-
/*
* get info about the server we've connected to
*/
-void get_serv_info(CtdlIPC * ipc, char *supplied_hostname)
-{
+void get_serv_info(CtdlIPC * ipc, char *supplied_hostname) {
char buf[SIZ];
CtdlIPCServerInfo(ipc, buf);
/* Look up the , in the bible if you're confused */
(locate_host(ipc, buf), buf), buf);
- /* Indicate to the server that we prefer to decode Base64 and
- * quoted-printable on the client side.
- */
+ // Indicate to the server that we prefer to decode Base64 and
+ // quoted-printable on the client side.
if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "dont_decode") / 100) != 2) {
- scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n");
+ scr_printf("Error %s:%d", __FILE__, __LINE__);
logoff(ipc, 0);
}
* the plain text when we have it available.
*/
if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "text/plain|text/html|text/x-markdown") / 100) != 2) {
- scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n");
+ scr_printf("Error %s:%d", __FILE__, __LINE__);
logoff(ipc, 0);
}
}
-
/*
* Session username compare function for SortOnlineUsers()
*/
-int rwho_username_cmp(const void *rec1, const void *rec2)
-{
+int rwho_username_cmp(const void *rec1, const void *rec2) {
char *u1, *u2;
u1 = strchr(rec1, '|');
/*
* Idle time compare function for SortOnlineUsers()
*/
-int idlecmp(const void *rec1, const void *rec2)
-{
+int idlecmp(const void *rec1, const void *rec2) {
time_t i1, i2;
i1 = extract_long(rec1, 5);
* If 'condense' is nonzero, multiple sessions for the same user will be
* combined into one for brevity.
*/
-char *SortOnlineUsers(char *listing, int condense)
-{
+char *SortOnlineUsers(char *listing, int condense) {
int rows;
char *sortbuf;
char *retbuf;
}
-
/*
* Display list of users currently logged on to the server
*/
-void who_is_online(CtdlIPC * ipc, int longlist)
-{
+void who_is_online(CtdlIPC * ipc, int longlist) {
char buf[SIZ], username[SIZ], roomname[SIZ], fromhost[SIZ];
char flags[SIZ];
char actual_user[SIZ], actual_room[SIZ], actual_host[SIZ];
}
scr_printf("\n");
- } else {
+ }
+ else {
if (isidle == 0) {
if (extract_int(buf, 0) == last_session) {
scr_printf(" ");
- } else {
+ }
+ else {
color(BRIGHT_MAGENTA);
scr_printf("%-3s", flags);
}
if (idlehours > 23999) {
scr_printf("fish");
/* over 10 days */
- } else if (idlehours > 239) {
+ }
+ else if (idlehours > 239) {
scr_printf("%3ldd", idlehours / 24);
/* over 10 hours */
- } else if (idlehours > 9) {
+ }
+ else if (idlehours > 9) {
scr_printf("%1ldd%02ld", idlehours / 24, idlehours % 24);
/* less than 10 hours */
- } else {
+ }
+ else {
scr_printf("%1ld:%02ld", idlehours, idlemins);
}
- } else {
+ }
+ else {
scr_printf(" ");
}
scr_printf(" ");
free(listing);
}
-void enternew(CtdlIPC * ipc, char *desc, char *buf, int maxlen)
-{
+
+void enternew(CtdlIPC * ipc, char *desc, char *buf, int maxlen) {
char bbb[128];
snprintf(bbb, sizeof bbb, "Enter in your new %s: ", desc);
newprompt(bbb, buf, maxlen);
}
-
-int shift(int argc, char **argv, int start, int count)
-{
+int shift(int argc, char **argv, int start, int count) {
int i;
for (i = start; i < (argc - count); ++i) {
return argc;
}
-static void statusHook(char *s)
-{
+
+static void statusHook(char *s) {
scr_printf(s);
}
+
/*
* main
*/
-int main(int argc, char **argv)
-{
+int main(int argc, char **argv) {
int a, b, mcmd;
char aaa[100], bbb[100]; /* general purpose variables */
char argbuf[64]; /* command line buf */
- char nonce[NONCE_SIZE];
char *telnet_client_host = NULL;
char *sptr, *sptr2; /* USed to extract the nonce */
- char hexstring[MD5_HEXSTRING_SIZE];
char password[SIZ];
struct ctdlipcmisc chek;
struct ctdluser *myself = NULL;
arg_encrypt = RC_DEFAULT;
#endif
- /*
- * Handle command line options as if we were called like /bin/login
- * (i.e. from in.telnetd)
- */
+ // Handle command line options as if we were called like /bin/login (i.e. from in.telnetd)
for (a = 0; a < argc; ++a) {
if ((argc > a + 1) && (!strcmp(argv[a], "-h"))) {
telnet_client_host = argv[a + 1];
*/
check_screen_dims();
-
-#ifdef __CYGWIN__
- newprompt("Connect to (return for local server): ", hostbuf, 64);
-#endif
-
scr_printf("Attaching to server...\n");
ipc = CtdlIPC_new(argc, argv, hostbuf, portbuf);
if (!ipc) {
logoff(ipc, atoi(aaa));
}
- /* If there is a [nonce] at the end, put the nonce in <nonce>, else nonce
- * is zeroized.
- */
-
- if ((sptr = strchr(aaa, '<')) == NULL) {
- nonce[0] = '\0';
- } else {
- if ((sptr2 = strchr(sptr, '>')) == NULL) {
- nonce[0] = '\0';
- } else {
- sptr2++;
- *sptr2 = '\0';
- strncpy(nonce, sptr, (size_t) NONCE_SIZE);
- }
- }
-
-#ifdef HAVE_OPENSSL
+#ifdef HAVE_OPENSSLLLLLL
/* Evaluate encryption preferences */
if (arg_encrypt != RC_NO && rc_encrypt != RC_NO) {
if (!ipc->isLocal || arg_encrypt == RC_YES || rc_encrypt == RC_YES) {
if (!IsEmptyStr(fullname)) {
r = CtdlIPCTryLogin(ipc, fullname, aaa);
if (r / 100 == 3) {
- if (*nonce) {
- r = CtdlIPCTryApopPassword(ipc,
- make_apop_string(password, nonce, hexstring, sizeof hexstring),
- aaa);
- } else {
- r = CtdlIPCTryPassword(ipc, password, aaa);
- }
+ r = CtdlIPCTryPassword(ipc, password, aaa);
}
-
if (r / 100 == 2) {
load_user_info(aaa);
goto PWOK;
- } else {
+ }
+ else {
set_stored_password(hostbuf, portbuf, "", "");
}
}
do {
if (!IsEmptyStr(rc_username)) {
strcpy(fullname, rc_username);
- } else {
+ }
+ else {
newprompt("Enter your name: ", fullname, 29);
}
strproc(fullname);
/* password authentication */
if (!IsEmptyStr(rc_password)) {
strcpy(password, rc_password);
- } else {
+ }
+ else {
newprompt("\rPlease enter your password: ", password, -(SIZ - 1));
}
- 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) {
- strproc(password);
- r = CtdlIPCTryPassword(ipc, password, aaa);
- }
}
if (r / 100 == 2) {
}
color(BRIGHT_WHITE);
- scr_printf("\n%s\nAccess level: %d (%s)\n"
- "User #%ld / Login #%d", fullname, axlevel, axdefs[(int) axlevel], usernum, timescalled);
if (lastcall > 0L) {
- scr_printf(" / Last login: %s", asctime(localtime(&lastcall)));
+ scr_printf("Last login: %s", asctime(localtime(&lastcall)));
}
scr_printf("\n");
case 73:
cli_image_upload(ipc, "_roompic_");
break;
- case 77:
- enternew(ipc, "username", aaa, 32);
- r = CtdlIPCChangeUsername(ipc, aaa, bbb);
- if (r / 100 != 2)
- scr_printf("\n%s\n", bbb);
- break;
-
case 35:
set_password(ipc);
break;
if (atoi(aaa)) {
scr_printf
("The Citadel server will terminate when all users are logged off.\n");
- } else {
+ }
+ else {
scr_printf("The Citadel server will not terminate.\n");
}
}