X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=textclient%2Fcitadel.c;h=1fea75eb38842077722782d3919324e985b600e6;hb=HEAD;hp=3832838ca5a48a25061abd2c4381ed8dd647185b;hpb=25220160fc09e185bbf9f13f7565bb568cc5a463;p=citadel.git diff --git a/textclient/citadel.c b/textclient/citadel.c index 3832838ca..b5682cfb2 100644 --- a/textclient/citadel.c +++ b/textclient/citadel.c @@ -1,16 +1,8 @@ -/* - * 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, or disclosure is subject to the GNU General Public License version 3. #include "textclient.h" @@ -40,8 +32,6 @@ int uglistsize = 0; 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 */ @@ -62,58 +52,46 @@ int secure; /* Set to nonzero when wire is encrypted */ extern char instant_msgs; /* instant messages waiting! */ extern int rc_ansi_color; /* ansi color value from citadel.rc */ +extern int rc_sixel; /* sixel graphics value from citadel.rc */ extern int next_lazy_cmd; CtdlIPC *ipc_for_signal_handlers; /* KLUDGE cover your eyes */ 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 } @@ -121,8 +99,7 @@ void ctdl_logoff(char *file, int line, CtdlIPC * ipc, int code) /* * signal catching function for hangups... */ -void dropcarr(int signum) -{ +void dropcarr(int signum) { logoff(NULL, 3); /* No IPC when server's already gone! */ } @@ -132,8 +109,7 @@ void dropcarr(int signum) * 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); } @@ -142,8 +118,7 @@ void catch_sigcont(int signum) /* 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; @@ -160,13 +135,12 @@ void formout(CtdlIPC * ipc, char *name) } -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); @@ -175,8 +149,8 @@ void userlist(CtdlIPC * ipc, char *patn) 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); @@ -185,12 +159,10 @@ void userlist(CtdlIPC * ipc, char *patn) 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)); } } @@ -200,28 +172,20 @@ void userlist(CtdlIPC * ipc, char *patn) } -/* - * 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) @@ -244,19 +208,17 @@ void remove_march(char *roomname, int floornum) 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; @@ -285,14 +247,10 @@ char *pop_march(int desired_floor, struct march *_march) } -/* - * 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; @@ -311,7 +269,8 @@ void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto) uglistlsn[lp] = uglistlsn[lp + 1]; } ugpos--; - } else { + } + else { uglistsize++; } @@ -378,23 +337,23 @@ void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto) 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 nter message - * command will be valid here. - */ + // Determine, based on the room's default view, whether an 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; } @@ -434,50 +393,48 @@ void dotgoto(CtdlIPC * ipc, char *towhere, int display_name, int fromungoto) 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; @@ -485,37 +442,35 @@ void gotonext(CtdlIPC * ipc) 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 oto doesn't make us - * walk around in circles - */ + + // ...and remove the room we're currently in, so a 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); @@ -542,11 +497,8 @@ void forget_all_rooms_on(CtdlIPC * ipc, int 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; @@ -554,10 +506,12 @@ void gf_toroom(CtdlIPC * ipc, char *towhere, int mode) 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); @@ -565,11 +519,8 @@ void gf_toroom(CtdlIPC * ipc, char *towhere, int mode) } -/* - * 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; @@ -646,16 +597,17 @@ void gotofloor(CtdlIPC * ipc, char *towhere, int mode) } 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; @@ -699,8 +651,7 @@ void room_tree_list_query(struct ctdlroomlisting *rp, char *findrmname, int find /* * 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 */ @@ -739,20 +690,24 @@ void gotoroomstep(CtdlIPC * ipc, int direction, int mode) 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; } } @@ -769,14 +724,17 @@ void gotoroomstep(CtdlIPC * ipc, int direction, int mode) /* 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++; } } @@ -806,8 +764,7 @@ void gotoroomstep(CtdlIPC * ipc, int direction, int mode) /* * 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) @@ -823,7 +780,8 @@ void gotofloorstep(CtdlIPC * ipc, int direction, int mode) while (!floorlist[tofloor][0]) tofloor--; - } else { /* Next floor */ + } + else { /* Next floor */ if (curr_floor < 127) tofloor = curr_floor + 1; else @@ -846,18 +804,18 @@ void gotofloorstep(CtdlIPC * ipc, int direction, int mode) } } + /* * 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; @@ -871,8 +829,6 @@ void read_config(CtdlIPC * ipc) _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; @@ -885,10 +841,8 @@ void read_config(CtdlIPC * ipc) } /* 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"); @@ -946,11 +900,11 @@ void read_config(CtdlIPC * ipc) free(user); } + /* * Display system statistics. */ -void system_info(CtdlIPC * ipc) -{ +void system_info(CtdlIPC * ipc) { char buf[SIZ]; char *resp = NULL; size_t bytes; @@ -986,11 +940,11 @@ void system_info(CtdlIPC * ipc) 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; @@ -1010,8 +964,7 @@ void forget_this_floor(CtdlIPC * ipc) /* * 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 */ } @@ -1032,8 +985,7 @@ void set_floor_mode(CtdlIPC * ipc) /* * 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]; @@ -1041,7 +993,8 @@ int set_password(CtdlIPC * ipc) 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); @@ -1053,19 +1006,18 @@ int set_password(CtdlIPC * ipc) 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); @@ -1077,11 +1029,10 @@ void get_serv_info(CtdlIPC * ipc, char *supplied_hostname) /* 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); } @@ -1094,18 +1045,16 @@ void get_serv_info(CtdlIPC * ipc, char *supplied_hostname) * 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, '|'); @@ -1118,8 +1067,7 @@ int rwho_username_cmp(const void *rec1, const void *rec2) /* * 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); @@ -1141,8 +1089,7 @@ int idlecmp(const void *rec1, const void *rec2) * 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; @@ -1204,12 +1151,10 @@ char *SortOnlineUsers(char *listing, int condense) } - /* * 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]; @@ -1290,11 +1235,13 @@ void who_is_online(CtdlIPC * ipc, int longlist) } 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); } @@ -1312,16 +1259,20 @@ void who_is_online(CtdlIPC * ipc, int longlist) 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(" "); @@ -1338,17 +1289,15 @@ void who_is_online(CtdlIPC * ipc, int longlist) 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) { @@ -1358,23 +1307,21 @@ int shift(int argc, char **argv, int start, int count) 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; @@ -1416,10 +1363,7 @@ int main(int argc, char **argv) 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]; @@ -1452,11 +1396,6 @@ int main(int argc, char **argv) */ 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) { @@ -1478,23 +1417,7 @@ int main(int argc, char **argv) logoff(ipc, atoi(aaa)); } - /* If there is a [nonce] at the end, put the nonce in , 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) { @@ -1519,19 +1442,13 @@ int main(int argc, char **argv) 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, "", ""); } } @@ -1542,7 +1459,8 @@ int main(int argc, char **argv) do { if (!IsEmptyStr(rc_username)) { strcpy(fullname, rc_username); - } else { + } + else { newprompt("Enter your name: ", fullname, 29); } strproc(fullname); @@ -1571,22 +1489,15 @@ int main(int argc, char **argv) /* 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) { @@ -1633,10 +1544,8 @@ int main(int argc, char **argv) } 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"); @@ -1893,7 +1802,8 @@ int main(int argc, char **argv) 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"); } }