X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=textclient%2Fcitadel.c;h=1fea75eb38842077722782d3919324e985b600e6;hb=HEAD;hp=d01f6fef57f873d441fde1e7d486dff4b2b51d68;hpb=2dfd5bee542a9d635e380097e63c307bd6c27d65;p=citadel.git diff --git a/textclient/citadel.c b/textclient/citadel.c index d01f6fef5..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" @@ -34,14 +26,12 @@ 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. */ +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 = AxDeleted; /* access level */ +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,56 +149,43 @@ void userlist(CtdlIPC *ipc, char *patn) return; } - scr_printf(" User Name Num L Last Visit Logins Messages\n"); - scr_printf("------------------------- ----- - ---------- ------ --------\n"); - if (listing != NULL) while (!IsEmptyStr(listing)) { - extract_token(buf, listing, 0, '\n', sizeof buf); - remove_token(listing, 0, '\n'); - - 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)); - 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("User Name Last Login\n"); + scr_printf("---------------------------------------------------------------- ----------\n"); + if (listing != NULL) + while (!IsEmptyStr(listing)) { + extract_token(buf, listing, 0, '\n', sizeof buf); + remove_token(listing, 0, '\n'); + + if (sigcaught == 0) { + extract_token(fl, buf, 0, '|', sizeof fl); + if (pattern(fl, patn) >= 0) { + scr_printf("%-64s ", fl); + lc = extract_long(buf, 3); + localtime_r(&lc, &tmbuf); + scr_printf("%02d/%02d/%04d\n", (tmbuf.tm_mon + 1), tmbuf.tm_mday, (tmbuf.tm_year + 1900)); + } + } } - } free(listing); scr_printf("\n"); } -/* - * 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) @@ -247,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; @@ -288,41 +247,38 @@ 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; - int r; /* IPC result code */ + int r; /* IPC result code */ struct ctdlipcroom *room = NULL; int rv = 0; /* store ungoto information */ if (fromungoto == 0) { /* sloppy slide them all down, hey it's the client, who cares. :-) */ - if (uglistsize >= (UGLISTLEN-1)) { + if (uglistsize >= (UGLISTLEN - 1)) { int lp; - free (uglist[0]); - for (lp = 0; lp < (UGLISTLEN-1); lp++) { - uglist[lp] = uglist[lp+1]; - uglistlsn[lp] = uglistlsn[lp+1]; + free(uglist[0]); + for (lp = 0; lp < (UGLISTLEN - 1); lp++) { + uglist[lp] = uglist[lp + 1]; + uglistlsn[lp] = uglistlsn[lp + 1]; } ugpos--; - } else { + } + else { uglistsize++; } - - uglist[ugpos] = malloc(strlen(room_name)+1); + + uglist[ugpos] = malloc(strlen(room_name) + 1); strcpy(uglist[ugpos], room_name); uglistlsn[ugpos] = ls; } - + /* first try an exact match */ r = CtdlIPCGotoRoom(ipc, towhere, "", &room, aaa); if (r / 10 == 54) { @@ -332,7 +288,7 @@ void dotgoto(CtdlIPC *ipc, char *towhere, int display_name, int fromungoto) scr_printf("Wrong password.\n"); return; } - } + } /* * If a match is not found, try a partial match. @@ -381,24 +337,24 @@ 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. - */ - switch(room->RRdefaultview) { - case VIEW_BBS: - case VIEW_MAILBOX: - case VIEW_BLOG: - entmsg_ok = 1; - break; - default: - entmsg_ok = 0; - break; + // 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 = ENTMSG_OK_BLOG; + break; + default: + entmsg_ok = ENTMSG_OK_NO; + break; } remove_march(room_name, 0); @@ -437,95 +393,84 @@ 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 - ); + 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, 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); + 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; - mptr->march_floor = 0; + mptr->march_floor = 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 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); @@ -547,20 +492,18 @@ void forget_all_rooms_on(CtdlIPC *ipc, int ffloor) flist = flist->next; free(fptr); } - if (room) free(room); + if (room) + free(room); } -/* - * 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 */ + if (mode == GF_GOTO) { /* <;G>oto mode */ updatels(ipc); dotgoto(ipc, towhere, 1, 0); } @@ -576,13 +519,10 @@ 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 */ + int r; /* IPC response code */ struct march *mptr; char buf[SIZ], targ[SIZ]; @@ -626,7 +566,7 @@ void gotofloor(CtdlIPC *ipc, char *towhere, int mode) /*. . . according to room order */ if (mptr) - strcpy(targ, pop_march(tofloor, mptr)); + strcpy(targ, pop_march(tofloor, mptr)); while (mptr) { tmp = mptr->next; free(mptr); @@ -645,8 +585,8 @@ void gotofloor(CtdlIPC *ipc, char *towhere, int mode) r = CtdlIPCKnownRooms(ipc, AllAccessibleRooms, tofloor, &mptr, buf); if (r / 100 == 1) { struct march *tmp = mptr; - - /*. . . according to room order */ + + /*. . . according to room order */ if (mptr) strcpy(targ, pop_march(tofloor, mptr)); while (mptr) { @@ -657,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; @@ -710,11 +651,10 @@ 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 */ + int r; /* IPC response code */ char buf[SIZ]; struct ctdlroomlisting *rl = NULL; struct ctdlroomlisting *rp; @@ -735,8 +675,7 @@ void gotoroomstep(CtdlIPC *ipc, int direction, int mode) for (mptr = listing; mptr != NULL; mptr = mptr->next) { list_it = 1; - if ( floor_mode - && (mptr->march_floor != curr_floor)) + if (floor_mode && (mptr->march_floor != curr_floor)) list_it = 0; if (list_it) { @@ -751,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; } } @@ -775,33 +718,36 @@ void gotoroomstep(CtdlIPC *ipc, int direction, int mode) /* Find position of current room */ room_tree_list_query(NULL, NULL, 0, NULL, NULL, NULL); - room_tree_list_query(rl, room_name, 0, NULL, &rmslot, &rmtotal); + room_tree_list_query(rl, room_name, 0, NULL, &rmslot, &rmtotal); - if (direction == 0) { /* Previous room */ + if (direction == 0) { /* Previous room */ /* 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 { + rmslot = 0; + } + else { rmslot++; } } /* Get name of next/previous room */ room_tree_list_query(NULL, NULL, 0, NULL, NULL, NULL); - room_tree_list_query(rl, NULL, rmslot, rmname, NULL, NULL); + room_tree_list_query(rl, NULL, rmslot, rmname, NULL, NULL); /* Free the tree */ room_tree_list_query(rl, NULL, 0, NULL, NULL, NULL); - if (mode == 0) { /* not skipping */ - updatels(ipc); + if (mode == 0) { /* not skipping */ + updatels(ipc); } /* Free the room list */ @@ -818,55 +764,62 @@ void gotoroomstep(CtdlIPC *ipc, int direction, int mode) /* * step through floors on system */ -void gotofloorstep(CtdlIPC *ipc, int direction, int mode) -{ - int tofloor; +void gotofloorstep(CtdlIPC * ipc, int direction, int mode) { + int tofloor; if (floorlist[0][0] == 0) load_floorlist(ipc); - empty_keep_going: + empty_keep_going: - if (direction == 0) { /* Previous floor */ - if (curr_floor) tofloor = curr_floor - 1; - else tofloor = 127; + if (direction == 0) { /* Previous floor */ + if (curr_floor) + tofloor = curr_floor - 1; + else + tofloor = 127; - while (!floorlist[tofloor][0]) tofloor--; - } else { /* Next floor */ - if (curr_floor < 127) tofloor = curr_floor + 1; - else tofloor = 0; + while (!floorlist[tofloor][0]) + tofloor--; + } + else { /* Next floor */ + if (curr_floor < 127) + tofloor = curr_floor + 1; + else + tofloor = 0; - while (!floorlist[tofloor][0] && tofloor < 127) tofloor++; - if (!floorlist[tofloor][0]) tofloor = 0; + while (!floorlist[tofloor][0] && tofloor < 127) + tofloor++; + if (!floorlist[tofloor][0]) + tofloor = 0; } /* ;g works when not in floor mode so . . . */ if (!floor_mode) { - scr_printf("(%s)\n", floorlist[tofloor] ); + scr_printf("(%s)\n", floorlist[tofloor]); } gotofloor(ipc, floorlist[tofloor], mode); - if (curr_floor != tofloor) { /* gotofloor failed */ - curr_floor = tofloor; - goto empty_keep_going; - } + if (curr_floor != tofloor) { /* gotofloor failed */ + curr_floor = tofloor; + goto empty_keep_going; + } } + /* * 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]; + char _fullname[USERNAME_SIZE]; long _usernum; - int _axlevel, _timescalled, _posted; + int _axlevel; time_t _lastcall; struct ctdluser *user = NULL; - /* get misc user info */ + /* get misc user info */ r = CtdlIPCGetBio(ipc, fullname, &resp, buf); if (r / 100 != 1) { scr_printf("%s\n", buf); @@ -876,11 +829,9 @@ 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; - + /* get preferences */ r = CtdlIPCGetConfig(ipc, &user, buf); if (r / 100 != 2) { @@ -890,49 +841,74 @@ 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"); /* show preferences */ - scr_printf("Are you an experienced Citadel user: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_EXPERT) ? "Yes" : "No"); color(DIM_WHITE); - scr_printf("Print last old message on New message request: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_LASTOLD)? "Yes" : "No"); color(DIM_WHITE); - scr_printf("Prompt after each message: "); color(BRIGHT_CYAN); scr_printf("%s\n", (!(user->flags & US_NOPROMPT))? "Yes" : "No"); color(DIM_WHITE); + scr_printf("Are you an experienced Citadel user: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_EXPERT) ? "Yes" : "No"); + color(DIM_WHITE); + scr_printf("Print last old message on New message request: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_LASTOLD) ? "Yes" : "No"); + color(DIM_WHITE); + scr_printf("Prompt after each message: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (!(user->flags & US_NOPROMPT)) ? "Yes" : "No"); + color(DIM_WHITE); if ((user->flags & US_NOPROMPT) == 0) { - scr_printf("Use 'disappearing' prompts: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_DISAPPEAR)? "Yes" : "No"); color(DIM_WHITE); + scr_printf("Use 'disappearing' prompts: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_DISAPPEAR) ? "Yes" : "No"); + color(DIM_WHITE); } - scr_printf("Pause after each screenful of text: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_PAGINATOR)? "Yes" : "No"); color(DIM_WHITE); - if (rc_prompt_control == 3 && (user->flags & US_PAGINATOR)) { - scr_printf("ext and top work at paginator prompt: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_PROMPTCTL)? "Yes" : "No"); color(DIM_WHITE); + scr_printf("Pause after each screenful of text: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_PAGINATOR) ? "Yes" : "No"); + color(DIM_WHITE); + if (rc_prompt_control == 3 && (user->flags & US_PAGINATOR)) { + scr_printf("ext and top work at paginator prompt: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_PROMPTCTL) ? "Yes" : "No"); + color(DIM_WHITE); } - if (rc_floor_mode == RC_DEFAULT) { - scr_printf("View rooms by floor: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_FLOORS)? "Yes" : "No"); color(DIM_WHITE); + if (rc_floor_mode == RC_DEFAULT) { + scr_printf("View rooms by floor: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_FLOORS) ? "Yes" : "No"); + color(DIM_WHITE); } - if (rc_ansi_color == 3) { - scr_printf("Enable color support: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_COLOR)? "Yes" : "No"); color(DIM_WHITE); + if (rc_ansi_color == 3) { + scr_printf("Enable color support: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_COLOR) ? "Yes" : "No"); + color(DIM_WHITE); } - scr_printf("Be unlisted in userlog: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_UNLISTED)? "Yes" : "No"); color(DIM_WHITE); + scr_printf("Be unlisted in userlog: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_UNLISTED) ? "Yes" : "No"); + color(DIM_WHITE); if (!IsEmptyStr(editor_path)) { - scr_printf("Always enter messages with the full-screen editor: "); color(BRIGHT_CYAN); scr_printf("%s\n", (user->flags & US_EXTEDIT)? "Yes" : "No"); color(DIM_WHITE); + scr_printf("Always enter messages with the full-screen editor: "); + color(BRIGHT_CYAN); + scr_printf("%s\n", (user->flags & US_EXTEDIT) ? "Yes" : "No"); + color(DIM_WHITE); } free(user); } + /* * Display system statistics. */ -void system_info(CtdlIPC *ipc) -{ +void system_info(CtdlIPC * ipc) { char buf[SIZ]; char *resp = NULL; size_t bytes; - int mrtg_users, mrtg_active_users; + int mrtg_users, mrtg_active_users; char mrtg_server_uptime[40]; long mrtg_himessage; @@ -956,19 +932,19 @@ void system_info(CtdlIPC *ipc) CtdlIPCServerInfo(ipc, buf); scr_printf("You are connected to %s (%s) @%s\n", ipc->ServInfo.nodename, ipc->ServInfo.humannode, ipc->ServInfo.fqdn); - scr_printf("running %s with text client v%.2f,\n", ipc->ServInfo.software, (float)CLIENT_VERSION/100); - scr_printf("server build %s,\n", ipc->ServInfo.svn_revision, (float)CLIENT_VERSION/100); + scr_printf("running %s with text client v%.2f,\n", ipc->ServInfo.software, (float) CLIENT_VERSION / 100); + scr_printf("server build %s,\n", ipc->ServInfo.svn_revision, (float) CLIENT_VERSION / 100); scr_printf("and located in %s.\n", ipc->ServInfo.site_location); scr_printf("Connected users %d / Active users %d / Highest message #%ld\n", mrtg_users, mrtg_active_users, mrtg_himessage); scr_printf("Server uptime: %s\n", mrtg_server_uptime); 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; @@ -976,8 +952,7 @@ void forget_this_floor(CtdlIPC *ipc) if (floorlist[0][0] == 0) { load_floorlist(ipc); } - scr_printf("Are you sure you want to forget all rooms on %s? ", - &floorlist[(int) curr_floor][0]); + scr_printf("Are you sure you want to forget all rooms on %s? ", &floorlist[(int) curr_floor][0]); if (yesno() == 0) { return; } @@ -989,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 */ } @@ -1011,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]; @@ -1020,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); @@ -1032,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); @@ -1052,16 +1025,14 @@ void get_serv_info(CtdlIPC *ipc, char *supplied_hostname) /* be nice and identify ourself to the server */ CtdlIPCIdentifySoftware(ipc, CLIENT_TYPE, 0, CLIENT_VERSION, - (ipc->isLocal ? "local" : "Citadel text mode client"), - (supplied_hostname) ? 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. - */ - if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "dont_decode") / 100 ) != 2) { - scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n"); + (ipc->isLocal ? "local" : "Citadel text mode client"), (supplied_hostname) ? 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. + if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "dont_decode") / 100) != 2) { + scr_printf("Error %s:%d", __FILE__, __LINE__); logoff(ipc, 0); } @@ -1073,14 +1044,13 @@ void get_serv_info(CtdlIPC *ipc, char *supplied_hostname) * isn't really all that great, it's probably better to just go with * the plain text when we have it available. */ - if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "text/plain|text/html") / 100 ) != 2) { - scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n"); + if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "text/plain|text/html|text/x-markdown") / 100) != 2) { + scr_printf("Error %s:%d", __FILE__, __LINE__); logoff(ipc, 0); } } - /* * Session username compare function for SortOnlineUsers() */ @@ -1090,7 +1060,7 @@ int rwho_username_cmp(const void *rec1, const void *rec2) { u1 = strchr(rec1, '|'); u2 = strchr(rec2, '|'); - return strcasecmp( (u1?++u1:"") , (u2?++u2:"") ); + return strcasecmp((u1 ? ++u1 : ""), (u2 ? ++u2 : "")); } @@ -1103,9 +1073,11 @@ int idlecmp(const void *rec1, const void *rec2) { i1 = extract_long(rec1, 5); i2 = extract_long(rec2, 5); - if (i1 < i2) return(1); - if (i1 > i2) return(-1); - return(0); + if (i1 < i2) + return (1); + if (i1 > i2) + return (-1); + return (0); } @@ -1126,18 +1098,19 @@ char *SortOnlineUsers(char *listing, int condense) { rows = num_tokens(listing, '\n'); sortbuf = malloc(rows * SIZ); - if (sortbuf == NULL) return(listing); + if (sortbuf == NULL) + return (listing); retbuf = malloc(rows * SIZ); if (retbuf == NULL) { free(sortbuf); - return(listing); + return (listing); } /* Copy the list into a fixed-record-size array for sorting */ - for (i=0; i 1) for (i=1; i0) { - char u1[USERNAME_SIZE]; - char u2[USERNAME_SIZE]; - extract_token(u1, &sortbuf[(i-1)*SIZ], 1, '|', sizeof u1); - extract_token(u2, &sortbuf[i*SIZ], 1, '|', sizeof u2); - if (!strcasecmp(u1, u2)) { - memcpy(&sortbuf[i*SIZ], &sortbuf[(i+1)*SIZ], (rows-i-1)*SIZ); - --rows; - --i; - } - } + if (rows > 1) + for (i = 1; i < rows; ++i) + if (i > 0) { + char u1[USERNAME_SIZE]; + char u2[USERNAME_SIZE]; + extract_token(u1, &sortbuf[(i - 1) * SIZ], 1, '|', sizeof u1); + extract_token(u2, &sortbuf[i * SIZ], 1, '|', sizeof u2); + if (!strcasecmp(u1, u2)) { + memcpy(&sortbuf[i * SIZ], &sortbuf[(i + 1) * SIZ], (rows - i - 1) * SIZ); + --rows; + --i; + } + } qsort(sortbuf, rows, SIZ, idlecmp); /* idle sort again */ } /* Copy back to a \n delimited list */ strcpy(retbuf, ""); - for (i=0; i= 80) scr_printf(" Idle From host"); + if (screenwidth >= 80) + scr_printf(" Idle From host"); scr_printf("\n"); color(DIM_WHITE); scr_printf(" ------------------------- --------------------"); - if (screenwidth >= 80) scr_printf(" ---- ------------------------"); + if (screenwidth >= 80) + scr_printf(" ---- ------------------------"); scr_printf("\n"); } r = CtdlIPCOnlineUsers(ipc, &listing, &timenow, buf); @@ -1212,7 +1188,7 @@ void who_is_online(CtdlIPC *ipc, int longlist) if (r / 100 == 1) { while (!IsEmptyStr(listing)) { int isidle = 0; - + /* Get another line */ extract_token(buf, listing, 0, '\n', sizeof buf); remove_token(listing, 0, '\n'); @@ -1245,37 +1221,36 @@ void who_is_online(CtdlIPC *ipc, int longlist) scr_printf("In room: %s\n", roomname); scr_printf(" Host: %s\n", fromhost); scr_printf(" Client: %s\n", clientsoft); - scr_printf(" Idle: %ld:%02ld:%02ld\n", - (long) idlehours, - (long) idlemins, - (long) idlesecs); - - if ( (!IsEmptyStr(actual_user)&& - !IsEmptyStr(actual_room)&& - !IsEmptyStr(actual_host))) { + scr_printf(" Idle: %ld:%02ld:%02ld\n", (long) idlehours, (long) idlemins, (long) idlesecs); + + if ((!IsEmptyStr(actual_user) && !IsEmptyStr(actual_room) && !IsEmptyStr(actual_host))) { scr_printf("(really "); - if (!IsEmptyStr(actual_user)) scr_printf("<%s> ", actual_user); - if (!IsEmptyStr(actual_room)) scr_printf("in <%s> ", actual_room); - if (!IsEmptyStr(actual_host)) scr_printf("from <%s> ", actual_host); + if (!IsEmptyStr(actual_user)) + scr_printf("<%s> ", actual_user); + if (!IsEmptyStr(actual_room)) + scr_printf("in <%s> ", actual_room); + if (!IsEmptyStr(actual_host)) + scr_printf("from <%s> ", actual_host); scr_printf(")\n"); } scr_printf("\n"); - } else { + } + else { if (isidle == 0) { - if (extract_int(buf, 0) == last_session) { - scr_printf(" "); - } + if (extract_int(buf, 0) == last_session) { + scr_printf(" "); + } else { - color(BRIGHT_MAGENTA); - scr_printf("%-3s", flags); - } - last_session = extract_int(buf, 0); - color(BRIGHT_CYAN); - scr_printf("%-25s ", username); - color(BRIGHT_MAGENTA); - roomname[20] = 0; - scr_printf("%-20s", roomname); + color(BRIGHT_MAGENTA); + scr_printf("%-3s", flags); + } + last_session = extract_int(buf, 0); + color(BRIGHT_CYAN); + scr_printf("%-25s ", username); + color(BRIGHT_MAGENTA); + roomname[20] = 0; + scr_printf("%-20s", roomname); if (screenwidth >= 80) { scr_printf(" "); @@ -1283,15 +1258,15 @@ void who_is_online(CtdlIPC *ipc, int longlist) /* over 1000d, must be gone fishing */ if (idlehours > 23999) { scr_printf("fish"); - /* over 10 days */ - } else if (idlehours > 239) { + /* over 10 days */ + } + else if (idlehours > 239) { scr_printf("%3ldd", idlehours / 24); - /* over 10 hours */ - } else if (idlehours > 9) { - scr_printf("%1ldd%02ld", - idlehours / 24, - idlehours % 24); - /* less than 10 hours */ + /* over 10 hours */ + } + else if (idlehours > 9) { + scr_printf("%1ldd%02ld", idlehours / 24, idlehours % 24); + /* less than 10 hours */ } else { scr_printf("%1ld:%02ld", idlehours, idlemins); @@ -1301,66 +1276,64 @@ void who_is_online(CtdlIPC *ipc, int longlist) scr_printf(" "); } scr_printf(" "); - color(BRIGHT_CYAN); - fromhost[24] = '\0'; - scr_printf("%-24s", fromhost); + color(BRIGHT_CYAN); + fromhost[24] = '\0'; + scr_printf("%-24s", fromhost); } scr_printf("\n"); - color(DIM_WHITE); - } + color(DIM_WHITE); + } } } } 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 i; - for (i=start; i<(argc-count); ++i) { - argv[i] = argv[i+count]; + for (i = start; i < (argc - count); ++i) { + argv[i] = argv[i + count]; } argc = argc - count; return argc; } + 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 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; - CtdlIPC* ipc; /* Our server connection */ - int r; /* IPC result code */ - int rv = 0; /* fetch but ignore syscall return value to suppress warnings */ - - int relh=0; - int home=0; - char relhome[PATH_MAX]=""; - char ctdldir[PATH_MAX]=CTDLDIR; - int lp; + CtdlIPC *ipc; /* Our server connection */ + int r; /* IPC result code */ + int rv = 0; /* fetch but ignore syscall return value to suppress warnings */ + + int relh = 0; + int home = 0; + char relhome[PATH_MAX] = ""; + char ctdldir[PATH_MAX] = CTDLDIR; + int lp; calc_dirs_n_files(relh, home, relhome, ctdldir, 0); #ifdef HAVE_BACKTRACE @@ -1368,17 +1341,17 @@ int main(int argc, char **argv) params.debugLevel = ECRASH_DEBUG_VERBOSE; params.dumpAllThreads = TRUE; params.useBacktraceSymbols = 1; - params.signals[0]=SIGSEGV; - params.signals[1]=SIGILL; - params.signals[2]=SIGBUS; - params.signals[3]=SIGABRT; -#endif + params.signals[0] = SIGSEGV; + params.signals[1] = SIGILL; + params.signals[2] = SIGBUS; + params.signals[3] = SIGABRT; +#endif setIPCErrorPrintf(scr_printf); setCryptoStatusHook(statusHook); - - stty_ctdl(SB_SAVE); /* Store the old terminal parameters */ - load_command_set(); /* parse the citadel.rc file */ - stty_ctdl(SB_NO_INTR); /* Install the new ones */ + + stty_ctdl(SB_SAVE); /* Store the old terminal parameters */ + load_command_set(); /* parse the citadel.rc file */ + stty_ctdl(SB_NO_INTR); /* Install the new ones */ signal(SIGPIPE, dropcarr); /* Cleanup gracefully if local conn. dropped */ signal(SIGTERM, dropcarr); /* Cleanup gracefully if terminated */ signal(SIGCONT, catch_sigcont); /* Catch SIGCONT so we can reset terminal */ @@ -1390,13 +1363,10 @@ 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) - */ - for (a=0; a a+1) && (!strcmp(argv[a], "-h")) ) { - telnet_client_host = argv[a+1]; + // 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]; argc = shift(argc, argv, a, 2); } if (!strcmp(argv[a], "-x")) { @@ -1419,18 +1389,13 @@ int main(int argc, char **argv) argc = shift(argc, argv, a, 1); } } - + screen_new(); /* Get screen dimensions. First we go to a default of 80x24. * Then attempt to read the actual screen size from the terminal. */ 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) { @@ -1452,29 +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) { @@ -1486,31 +1429,26 @@ int main(int argc, char **argv) #endif get_serv_info(ipc, telnet_client_host); - scr_printf("%-24s\n%s\n%s\n", ipc->ServInfo.software, ipc->ServInfo.humannode, - ipc->ServInfo.site_location); + scr_printf("%-24s\n%s\n%s\n", ipc->ServInfo.software, ipc->ServInfo.humannode, ipc->ServInfo.site_location); scr_printf(" pause next stop\n"); scr_printf(" ctrl-s ctrl-o ctrl-c\n\n"); formout(ipc, "hello"); /* print the opening greeting */ scr_printf("\n"); - GSTA: /* See if we have a username and password on disk */ + GSTA: /* See if we have a username and password on disk */ if (rc_remember_passwords) { get_stored_password(hostbuf, portbuf, fullname, password); 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, "", ""); } } @@ -1521,15 +1459,15 @@ 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); if (!strcasecmp(fullname, "new")) { /* just in case */ scr_printf("Please enter the name you wish to log in with.\n"); } - } while ( - (!strcasecmp(fullname, "bbs")) + } while ((!strcasecmp(fullname, "bbs")) || (!strcasecmp(fullname, "new")) || (IsEmptyStr(fullname))); @@ -1539,7 +1477,7 @@ int main(int argc, char **argv) } /* 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")) ) { + if ((ipc->ServInfo.guest_logins) && (!strcasecmp(fullname, "guest"))) { goto PWOK; } @@ -1551,28 +1489,20 @@ int main(int argc, char **argv) /* password authentication */ if (!IsEmptyStr(rc_password)) { strcpy(password, rc_password); - } else { - newprompt("\rPlease enter your password: ", password, -(SIZ-1)); + } + 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) { load_user_info(aaa); - offer_to_remember_password(ipc, hostbuf, portbuf, - fullname, password); + offer_to_remember_password(ipc, hostbuf, portbuf, fullname, password); goto PWOK; } scr_printf("<< wrong password >>\n"); @@ -1580,14 +1510,13 @@ int main(int argc, char **argv) logoff(ipc, 2); goto GSTA; -NEWUSR: if (IsEmptyStr(rc_password)) { + NEWUSR:if (IsEmptyStr(rc_password)) { scr_printf("'%s' not found.\n", fullname); scr_printf("Type 'off' if you would like to exit.\n"); if (ipc->ServInfo.newuser_disabled == 1) { goto GSTA; } - scr_printf("Do you want to create a new user account called '%s'? ", - fullname); + scr_printf("Do you want to create a new user account called '%s'? ", fullname); if (yesno() == 0) { goto GSTA; } @@ -1605,7 +1534,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { enter_config(ipc, 1); - PWOK: + PWOK: /* Switch color support on or off if we're in user mode */ if (rc_ansi_color == 3) { if (userflags & US_COLOR) @@ -1615,13 +1544,8 @@ NEWUSR: if (IsEmptyStr(rc_password)) { } 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"); @@ -1638,8 +1562,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { 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); + scr_printf("*** failed to check for mail calling %s Reason %d.\n", rc_gotmail_cmd, rv); } } @@ -1667,7 +1590,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { dotgoto(ipc, "_BASEROOM_", 1, 0); /* Main loop for the system... user is logged in. */ - free(uglist[0]); + free(uglist[0]); uglistsize = 0; if (newnow == 1) @@ -1680,7 +1603,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { mcmd = getcmd(ipc, argbuf); /* Get keyboard command */ #ifdef TIOCGWINSZ - check_screen_dims(); /* get screen size */ + check_screen_dims(); /* get screen size */ #endif if (termn8 == 0) @@ -1700,17 +1623,17 @@ NEWUSR: if (IsEmptyStr(rc_password)) { case 78: entmsg(ipc, 0, ((userflags & US_EXTEDIT) ? 2 : 0), 1); break; - case 5: /* oto */ + case 5: /* oto */ updatels(ipc); gotonext(ipc); break; - case 47: /* bandon */ + case 47: /* bandon */ gotonext(ipc); break; - case 90: /* <.A>bandon */ + case 90: /* <.A>bandon */ dotgoto(ipc, argbuf, 0, 0); break; - case 58: /* ail */ + case 58: /* ail */ updatelsa(ipc); dotgoto(ipc, "_MAIL_", 1, 0); break; @@ -1725,7 +1648,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { dotgoto(ipc, argbuf, 0, 0); } break; - case 95: /* what exactly is the numbering scheme supposed to be anyway? --Ford, there isn't one. -IO */ + case 95: /* what exactly is the numbering scheme supposed to be anyway? --Ford, there isn't one. -IO */ dotungoto(ipc, argbuf); break; case 10: @@ -1744,8 +1667,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { readmsgs(ipc, OldMessages, ReadReverse, 0); break; case 71: - readmsgs(ipc, LastMessages, ReadForward, - atoi(argbuf)); + readmsgs(ipc, LastMessages, ReadForward, atoi(argbuf)); break; case 7: forget(ipc); @@ -1834,25 +1756,6 @@ NEWUSR: if (IsEmptyStr(rc_password)) { case 73: cli_image_upload(ipc, "_roompic_"); break; - case 75: - enternew(ipc, "roomname", aaa, 20); - r = CtdlIPCChangeRoomname(ipc, aaa, bbb); - if (r / 100 != 2) - scr_printf("\n%s\n", bbb); - break; - case 76: - enternew(ipc, "hostname", aaa, 25); - r = CtdlIPCChangeHostname(ipc, aaa, bbb); - if (r / 100 != 2) - scr_printf("\n%s\n", bbb); - 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; @@ -1879,8 +1782,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { break; case 85: - scr_printf("All users will be disconnected! " - "Really terminate the server? "); + scr_printf("All users will be disconnected! " "Really terminate the server? "); if (yesno() == 1) { updatels(ipc); r = CtdlIPCTerminateServerNow(ipc, aaa); @@ -1893,19 +1795,16 @@ NEWUSR: if (IsEmptyStr(rc_password)) { break; case 86: - scr_printf("Do you really want to schedule a " - "server shutdown? "); + scr_printf("Do you really want to schedule a " "server shutdown? "); if (yesno() == 1) { r = CtdlIPCTerminateServerScheduled(ipc, 1, aaa); if (r / 100 == 2) { if (atoi(aaa)) { - scr_printf( - "The Citadel server will terminate when all users are logged off.\n" - ); - } else { - scr_printf( - "The Citadel server will not terminate.\n" - ); + scr_printf + ("The Citadel server will terminate when all users are logged off.\n"); + } + else { + scr_printf("The Citadel server will not terminate.\n"); } } } @@ -1938,7 +1837,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { case 91: who_is_online(ipc, 2); break; - + case 80: do_system_configuration(ipc); break; @@ -2044,79 +1943,75 @@ NEWUSR: if (IsEmptyStr(rc_password)) { page_user(ipc); break; - case 110: /* <+> Next room */ - gotoroomstep(ipc, 1, 0); - break; - - case 111: /* <-> Previous room */ - gotoroomstep(ipc, 0, 0); - break; + case 110: /* <+> Next room */ + gotoroomstep(ipc, 1, 0); + break; - case 112: /* <>> Next floor */ - gotofloorstep(ipc, 1, GF_GOTO); - break; + case 111: /* <-> Previous room */ + gotoroomstep(ipc, 0, 0); + break; - case 113: /* <<> Previous floor */ - gotofloorstep(ipc, 0, GF_GOTO); - break; + case 112: /* <>> Next floor */ + gotofloorstep(ipc, 1, GF_GOTO); + break; - case 116: /* <.> skip to <+> Next room */ - gotoroomstep(ipc, 1, 1); - break; + case 113: /* <<> Previous floor */ + gotofloorstep(ipc, 0, GF_GOTO); + break; - case 117: /* <.> skip to <-> Previous room */ - gotoroomstep(ipc, 0, 1); - break; + case 116: /* <.> skip to <+> Next room */ + gotoroomstep(ipc, 1, 1); + break; - case 118: /* <.> skip to <>> Next floor */ - gotofloorstep(ipc, 1, GF_SKIP); - break; + case 117: /* <.> skip to <-> Previous room */ + gotoroomstep(ipc, 0, 1); + break; - case 119: /* <.> skip to <<> Previous floor */ - gotofloorstep(ipc, 0, GF_SKIP); - break; + case 118: /* <.> skip to <>> Next floor */ + gotofloorstep(ipc, 1, GF_SKIP); + break; - case 114: - read_config(ipc); - break; + case 119: /* <.> skip to <<> Previous floor */ + gotofloorstep(ipc, 0, GF_SKIP); + break; - case 115: - system_info(ipc); - break; + case 114: + read_config(ipc); + break; - case 120: /* .KAnonymous */ - dotknown(ipc, 0, NULL); - break; + case 115: + system_info(ipc); + break; - case 121: /* .KDirectory */ - dotknown(ipc, 1, NULL); - break; + case 120: /* .KAnonymous */ + dotknown(ipc, 0, NULL); + break; - case 122: /* .KMatch */ - dotknown(ipc, 2, argbuf); - break; + case 121: /* .KDirectory */ + dotknown(ipc, 1, NULL); + break; - case 123: /* .KpreferredOnly */ - dotknown(ipc, 3, NULL); - break; + case 122: /* .KMatch */ + dotknown(ipc, 2, argbuf); + break; - case 124: /* .KPrivate */ - dotknown(ipc, 4, NULL); - break; + case 123: /* .KpreferredOnly */ + dotknown(ipc, 3, NULL); + break; - case 125: /* .KRead only */ - dotknown(ipc, 5, NULL); - break; + case 124: /* .KPrivate */ + dotknown(ipc, 4, NULL); + break; - case 126: /* .KShared */ - dotknown(ipc, 6, NULL); - break; + case 125: /* .KRead only */ + dotknown(ipc, 5, NULL); + break; - case 127: /* Configure POP3 aggregation */ + case 127: /* Configure POP3 aggregation */ do_pop3client_configuration(ipc); break; - case 128: /* Configure XML/RSS feed retrieval */ + case 128: /* Configure XML/RSS feed retrieval */ do_rssclient_configuration(ipc); break; @@ -2125,7 +2020,7 @@ NEWUSR: if (IsEmptyStr(rc_password)) { } /* end switch */ } while (termn8 == 0); -TERMN8: scr_printf("%s logged out.", fullname); + TERMN8:scr_printf("%s logged out.", fullname); termn8 = 0; color(ORIGINAL_PAIR); scr_printf("\n"); @@ -2145,8 +2040,7 @@ TERMN8: scr_printf("%s logged out.", fullname); for (lp = 0; lp < uglistsize; lp++) { free(uglist[lp]); } - uglistsize = 0; + uglistsize = 0; goto GSTA; -} /* end main() */ - +} /* end main() */