int main(void) { char *ssh_connection; char *ssh_tty; char *ssh_logname; char *delimiter = " "; char *ip_address; ssh_connection = getenv("SSH_CONNECTION"); ssh_tty = getenv("SSH_TTY"); ssh_logname = getenv("LOGNAME"); ip_address = strtok(ssh_connection, delimiter); if (ssh_connection) { log_entry(ssh_logname, ssh_tty, ip_address); while (1) { clear(); get_time(); display_motd(MOTD); sleep(60); } } else { puts("This shell is meant to use only for ssh forward users."); } return 0; }
int login_user( int unum, char *msg ) { int i, utent, fd = users[unum].sockfd; char accessbytes[MAX_CLNTCMDS]; char *utentstr = nextword(&msg); char *chatid = nextword(&msg); USERDATA udata; PATH ignorefile; utent = atoi(utentstr); if (utable_get_record(utent, &udata) != S_OK || udata.u.mode != M_CHAT) { send_to_unum(unum, CHAT_LOGIN_BOGUS, -1); return -1; } for (i=0; i<bbs_max_users; i++) { if (users[i].sockfd != -1 && users[i].utent == utent) { /* Either a "ghost" or a hacker */ if (kill(users[i].client_pid, 0) == 0) { send_to_unum(unum, CHAT_LOGIN_BOGUS, -1); return -1; } else { exit_room(i, EXIT_LOSTCONN, (char *)NULL); logout_user(i); } } } if (strlen(chatid) > CHATID_MAX) chatid[CHATID_MAX] = '\0'; if (!is_valid_chatid(chatid)) { send_to_unum(unum, CHAT_LOGIN_INVALID, -1); return 0; /* TODO change to -1 when possible */ } if (chatid_to_indx(chatid) != -1) { /* userid in use */ send_to_unum(unum, CHAT_LOGIN_EXISTS, -1); return 0; /* TODO: change to -1 when possible */ } /* Login is ok. Set flags and fill in user record. */ utable_get_record(utent, &udata); if (udata.u.flags & FLG_CLOAK) { udata.u.flags &= ~FLG_CLOAK; users[unum].flags |= FLG_RESTORECLOAK; } utable_set_record(utent, &udata); if (is_in_namelist(manager_list, udata.u.userid)) users[unum].flags |= FLG_CHATMGR; else if (is_in_namelist(restricted_list, udata.u.userid)) users[unum].flags |= FLG_CHATGUEST; users[unum].utent = utent; users[unum].client_pid = udata.u.pid; strncpy(users[unum].userid, udata.u.userid, NAMELEN); if (!RESTRICTED(unum)) { chat_get_ignore_file(users[unum].userid, ignorefile); read_namelist(ignorefile, &users[unum].ignorelist); } users[unum].ignoring = NULL; for (i = 0; i < bbs_max_users; i++) { if (users[i].sockfd == -1) continue; if (is_in_namelist(users[i].ignorelist, udata.u.userid)) { if (users[unum].ignoring == NULL) users[unum].ignoring = (char *)calloc(bbs_max_users, sizeof(char)); if (users[unum].ignoring != NULL) users[unum].ignoring[i] = 1; } if (is_in_namelist(users[unum].ignorelist, users[i].userid)) { if (users[i].ignoring == NULL) users[i].ignoring = (char *)calloc(bbs_max_users, sizeof(char)); if (users[i].ignoring != NULL) users[i].ignoring[unum] = 1; } } strcpy(users[unum].chatid, chatid); send_to_unum(unum, CHAT_LOGIN_OK, -1); sprintf(genbuf, "*** Welcome to Chat, %s\n", users[unum].chatid); send_to_unum(unum, genbuf, -1); display_motd(unum); print_user_counts(unum); enter_room(unum, mainroom, (char *)NULL); return 0; }