Replace printf / fprintf(stderr... with dolog
This commit is contained in:
parent
7a12fb716f
commit
6b78526669
12
bbs.c
12
bbs.c
@ -41,7 +41,7 @@ void dolog(char *fmt, ...) {
|
||||
snprintf(buffer, 512, "%s/%04d%02d%02d.log", conf.log_path, time_now.tm_year + 1900, time_now.tm_mon + 1, time_now.tm_mday);
|
||||
logfptr = fopen(buffer, "a");
|
||||
if (!logfptr) {
|
||||
printf("Error opening log file!\n");
|
||||
dolog("Error opening log file!");
|
||||
return;
|
||||
}
|
||||
va_list ap;
|
||||
@ -422,7 +422,7 @@ void automessage_write(int socket, struct user_record *user) {
|
||||
fwrite(automsg, strlen(automsg), 1, fptr);
|
||||
fclose(fptr);
|
||||
} else {
|
||||
printf("Unable to open automessage.txt for writing\n");
|
||||
dolog("Unable to open automessage.txt for writing");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -446,7 +446,7 @@ void automessage_display(int socket) {
|
||||
}
|
||||
fclose(fptr);
|
||||
} else {
|
||||
printf("Error opening automessage.txt\n");
|
||||
dolog("Error opening automessage.txt");
|
||||
}
|
||||
} else {
|
||||
s_putstring(socket, "No automessage!\r\n");
|
||||
@ -491,7 +491,7 @@ void runbbs(int socket, char *ip) {
|
||||
mynode = i;
|
||||
nodefile = fopen(buffer, "w");
|
||||
if (!nodefile) {
|
||||
printf("Error opening nodefile!\n");
|
||||
dolog("Error opening nodefile!");
|
||||
close(socket);
|
||||
exit(1);
|
||||
}
|
||||
@ -548,7 +548,7 @@ void runbbs(int socket, char *ip) {
|
||||
if (stat(buffer, &s) == 0) {
|
||||
nodefile = fopen(buffer, "r");
|
||||
if (!nodefile) {
|
||||
printf("Error opening nodefile!\n");
|
||||
dolog("Error opening nodefile!");
|
||||
disconnect(socket, "Error opening nodefile!");
|
||||
}
|
||||
fgets(buffer, 256, nodefile);
|
||||
@ -566,7 +566,7 @@ void runbbs(int socket, char *ip) {
|
||||
sprintf(buffer, "%s/nodeinuse.%d", conf.bbs_path, mynode);
|
||||
nodefile = fopen(buffer, "w");
|
||||
if (!nodefile) {
|
||||
printf("Error opening nodefile!\n");
|
||||
dolog("Error opening nodefile!");
|
||||
close(socket);
|
||||
exit(1);
|
||||
}
|
||||
|
92
bbs_list.c
92
bbs_list.c
@ -15,7 +15,7 @@ void add_bbs(int socket, struct user_record *user) {
|
||||
"sysop TEXT,"
|
||||
"telnet TEXT,"
|
||||
"owner INTEGER);";
|
||||
|
||||
|
||||
char *insert_sql = "INSERT INTO bbslist (bbsname, sysop, telnet, owner) VALUES(?,?, ?, ?)";
|
||||
|
||||
char bbsname[19];
|
||||
@ -23,20 +23,20 @@ void add_bbs(int socket, struct user_record *user) {
|
||||
char telnet[39];
|
||||
char buffer[256];
|
||||
char c;
|
||||
char *err_msg = 0;
|
||||
char *err_msg = 0;
|
||||
sqlite3 *db;
|
||||
sqlite3_stmt *res;
|
||||
int rc;
|
||||
|
||||
int rc;
|
||||
|
||||
s_putstring(socket, "\r\n\e[1;37mEnter the BBS Name: \e[0m");
|
||||
s_readstring(socket, bbsname, 18);
|
||||
|
||||
|
||||
s_putstring(socket, "\r\n\e[1;37mEnter the Sysop's Name: \e[0m");
|
||||
s_readstring(socket, sysop, 16);
|
||||
|
||||
|
||||
s_putstring(socket, "\r\n\e[1;37mEnter the Telnet URL: \e[0m");
|
||||
s_readstring(socket, telnet, 38);
|
||||
|
||||
|
||||
s_putstring(socket, "\r\nYou entered:\r\n");
|
||||
s_putstring(socket, "\e[1;30m----------------------------------------------\e[0m\r\n");
|
||||
sprintf(buffer, "\e[1;37mBBS Name: \e[1;32m%s\r\n", bbsname);
|
||||
@ -47,55 +47,55 @@ void add_bbs(int socket, struct user_record *user) {
|
||||
s_putstring(socket, buffer);
|
||||
s_putstring(socket, "\e[1;30m----------------------------------------------\e[0m\r\n");
|
||||
s_putstring(socket, "Is this correct? (Y/N) :");
|
||||
|
||||
|
||||
c = s_getc(socket);
|
||||
if (tolower(c) == 'y') {
|
||||
sprintf(buffer, "%s/bbslist.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
rc = sqlite3_exec(db, create_sql, 0, 0, &err_msg);
|
||||
if (rc != SQLITE_OK ) {
|
||||
|
||||
fprintf(stderr, "SQL error: %s\n", err_msg);
|
||||
|
||||
sqlite3_free(err_msg);
|
||||
|
||||
dolog("SQL error: %s", err_msg);
|
||||
|
||||
sqlite3_free(err_msg);
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
rc = sqlite3_prepare_v2(db, insert_sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, bbsname, -1, 0);
|
||||
sqlite3_bind_text(res, 2, sysop, -1, 0);
|
||||
sqlite3_bind_text(res, 3, telnet, -1, 0);
|
||||
sqlite3_bind_int(res, 4, user->id);
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
|
||||
if (rc != SQLITE_DONE) {
|
||||
|
||||
printf("execution failed: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
dolog("execution failed: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\n\e[1;32mAdded!\e[0m\r\n");
|
||||
} else {
|
||||
s_putstring(socket, "\r\n\e[1;31mAborted!\e[0m\r\n");
|
||||
@ -111,13 +111,13 @@ void delete_bbs(int socket, struct user_record *user) {
|
||||
char *dsql = "DELETE FROM bbslist WHERE id=?";
|
||||
int i;
|
||||
char c;
|
||||
|
||||
|
||||
s_putstring(socket, "\r\nPlease enter the id of the BBS you want to delete: ");
|
||||
s_readstring(socket, buffer, 5);
|
||||
i = atoi(buffer);
|
||||
|
||||
|
||||
sprintf(buffer, "%s/bbslist.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
return;
|
||||
@ -165,12 +165,12 @@ void list_bbses(int socket) {
|
||||
int rc;
|
||||
char *sql = "SELECT id,bbsname,sysop,telnet FROM bbslist";
|
||||
int i;
|
||||
|
||||
|
||||
sprintf(buffer, "%s/bbslist.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
@ -190,29 +190,29 @@ void list_bbses(int socket) {
|
||||
if (i == 20) {
|
||||
sprintf(buffer, "Press any key to continue...\r\n");
|
||||
s_putstring(socket, buffer);
|
||||
s_getc(socket);
|
||||
s_getc(socket);
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
s_putstring(socket, "\e[1;30m-------------------------------------------------------------------------------\e[0m\r\n");
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
sprintf(buffer, "Press any key to continue...\r\n");
|
||||
s_putstring(socket, buffer);
|
||||
s_getc(socket);
|
||||
s_getc(socket);
|
||||
}
|
||||
|
||||
void bbs_list(int socket, struct user_record *user) {
|
||||
int doquit = 0;
|
||||
char c;
|
||||
|
||||
|
||||
while(!doquit) {
|
||||
s_putstring(socket, "\r\n\e[1;32mBBS Listings: \e[1;37m(\e[1;33mL\e[1;37m) \e[1;32mList, \e[1;37m(\e[1;33mA\e[1;37m) \e[1;32mAdd \e[1;37m(\e[1;33mD\e[1;37m) \e[1;32mDelete \e[1;37m(\e[1;33mQ\e[1;37m) \e[1;32mQuit\e[0m\r\n");
|
||||
|
||||
|
||||
c = s_getc(socket);
|
||||
|
||||
|
||||
switch(tolower(c)) {
|
||||
case 'l':
|
||||
list_bbses(socket);
|
||||
|
84
doors.c
84
doors.c
@ -42,22 +42,22 @@ int write_door32sys(int socket, struct user_record *user) {
|
||||
FILE *fptr;
|
||||
char *ptr;
|
||||
int i;
|
||||
|
||||
|
||||
sprintf(buffer, "%s/node%d", conf.bbs_path, mynode);
|
||||
|
||||
|
||||
if (stat(buffer, &s) != 0) {
|
||||
mkdir(buffer, 0755);
|
||||
}
|
||||
|
||||
|
||||
sprintf(buffer, "%s/node%d/door32.sys", conf.bbs_path, mynode);
|
||||
|
||||
|
||||
fptr = fopen(buffer, "w");
|
||||
|
||||
|
||||
if (!fptr) {
|
||||
printf("Unable to open %s for writing!\n", buffer);
|
||||
dolog("Unable to open %s for writing!", buffer);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
fprintf(fptr, "2\n"); // telnet type
|
||||
fprintf(fptr, "%d\n", socket); // socket
|
||||
fprintf(fptr, "38400\n"); // baudrate
|
||||
@ -69,30 +69,30 @@ int write_door32sys(int socket, struct user_record *user) {
|
||||
fprintf(fptr, "%d\n", user->timeleft);
|
||||
fprintf(fptr, "1\n"); // ansi emulation = 1
|
||||
fprintf(fptr, "%d\n", mynode);
|
||||
|
||||
|
||||
fclose(fptr);
|
||||
|
||||
|
||||
// create dorinfo1.def
|
||||
|
||||
|
||||
sprintf(buffer, "%s/node%d", conf.bbs_path, mynode);
|
||||
|
||||
|
||||
if (stat(buffer, &s) != 0) {
|
||||
mkdir(buffer, 0755);
|
||||
}
|
||||
|
||||
|
||||
sprintf(buffer, "%s/node%d/dorinfo1.def", conf.bbs_path, mynode);
|
||||
|
||||
|
||||
fptr = fopen(buffer, "w");
|
||||
|
||||
|
||||
if (!fptr) {
|
||||
printf("Unable to open %s for writing!\n", buffer);
|
||||
dolog("Unable to open %s for writing!", buffer);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
strcpy(buffer, conf.sysop_name);
|
||||
|
||||
|
||||
ptr = NULL;
|
||||
|
||||
|
||||
for (i=0;i<strlen(buffer);i++) {
|
||||
if (buffer[i] == ' ') {
|
||||
ptr = &buffer[i+1];
|
||||
@ -100,7 +100,7 @@ int write_door32sys(int socket, struct user_record *user) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fprintf(fptr, "%s\n", conf.bbs_name); // telnet type
|
||||
fprintf(fptr, "%s\n", buffer);
|
||||
if (ptr != NULL) {
|
||||
@ -119,10 +119,10 @@ int write_door32sys(int socket, struct user_record *user) {
|
||||
fprintf(fptr, "%d\n", user->timeleft);
|
||||
fprintf(fptr, "-1\n");
|
||||
|
||||
|
||||
|
||||
fclose(fptr);
|
||||
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -140,27 +140,27 @@ void rundoor(int socket, struct user_record *user, char *cmd, int stdio) {
|
||||
int t;
|
||||
struct winsize ws;
|
||||
struct sigaction sa;
|
||||
|
||||
|
||||
timeoutpaused = 1;
|
||||
|
||||
|
||||
if (write_door32sys(socket, user) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (stdio) {
|
||||
|
||||
|
||||
arguments[0] = strdup(cmd);
|
||||
sprintf(buffer, "%d", mynode);
|
||||
arguments[1] = strdup(buffer);
|
||||
sprintf(buffer, "%d", socket);
|
||||
arguments[2] = strdup(buffer);
|
||||
arguments[3] = NULL;
|
||||
|
||||
|
||||
ws.ws_row = 24;
|
||||
ws.ws_col = 80;
|
||||
|
||||
|
||||
running_door = 1;
|
||||
|
||||
|
||||
if (openpty(&master, &slave, NULL, NULL, &ws) == 0) {
|
||||
sa.sa_handler = doorchld_handler;
|
||||
sigemptyset(&sa.sa_mask);
|
||||
@ -169,26 +169,26 @@ void rundoor(int socket, struct user_record *user, char *cmd, int stdio) {
|
||||
perror("sigaction");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
return;
|
||||
} else if (pid == 0) {
|
||||
|
||||
|
||||
close(master);
|
||||
dup2(slave, 0);
|
||||
dup2(slave, 1);
|
||||
|
||||
|
||||
close(slave);
|
||||
|
||||
|
||||
setsid();
|
||||
|
||||
|
||||
ioctl(0, TIOCSCTTY, 1);
|
||||
|
||||
|
||||
execvp(cmd, arguments);
|
||||
} else {
|
||||
running_door_pid = pid;
|
||||
|
||||
|
||||
while(running_door != 0) {
|
||||
FD_ZERO(&fdset);
|
||||
FD_SET(master, &fdset);
|
||||
@ -245,7 +245,7 @@ int door_menu(int socket, struct user_record *user) {
|
||||
char *lRet;
|
||||
lua_State *L;
|
||||
int result;
|
||||
|
||||
|
||||
if (conf.script_path != NULL) {
|
||||
sprintf(buffer, "%s/doors.lua", conf.script_path);
|
||||
if (stat(buffer, &s) == 0) {
|
||||
@ -256,7 +256,7 @@ int door_menu(int socket, struct user_record *user) {
|
||||
do_internal_menu = 0;
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
}
|
||||
} else {
|
||||
@ -269,16 +269,16 @@ int door_menu(int socket, struct user_record *user) {
|
||||
while (!dodoors) {
|
||||
if (do_internal_menu == 1) {
|
||||
s_displayansi(socket, "doors");
|
||||
|
||||
|
||||
sprintf(prompt, "\e[0m\r\nTL: %dm :> ", user->timeleft);
|
||||
s_putstring(socket, prompt);
|
||||
|
||||
|
||||
c = s_getc(socket);
|
||||
} else {
|
||||
lua_getglobal(L, "menu");
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
lua_close(L);
|
||||
continue;
|
||||
@ -292,7 +292,7 @@ int door_menu(int socket, struct user_record *user) {
|
||||
dodoors = 1;
|
||||
break;
|
||||
case 'g':
|
||||
{
|
||||
{
|
||||
s_putstring(socket, "\r\nAre you sure you want to log off? (Y/N)");
|
||||
c = s_getc(socket);
|
||||
if (tolower(c) == 'y') {
|
||||
|
188
email.c
188
email.c
@ -26,10 +26,10 @@ void send_email(int socket, struct user_record *user) {
|
||||
"seen INTEGER);";
|
||||
char *isql = "INSERT INTO email (sender, recipient, subject, body, date, seen) VALUES(?, ?, ?, ?, ?, 0)";
|
||||
char *err_msg = 0;
|
||||
|
||||
|
||||
s_putstring(socket, "\r\nTO: ");
|
||||
s_readstring(socket, buffer, 16);
|
||||
|
||||
|
||||
if (strlen(buffer) == 0) {
|
||||
s_putstring(socket, "\r\nAborted\r\n");
|
||||
return;
|
||||
@ -38,7 +38,7 @@ void send_email(int socket, struct user_record *user) {
|
||||
s_putstring(socket, "\r\n\r\nInvalid Username\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
recipient = strdup(buffer);
|
||||
s_putstring(socket, "\r\nSUBJECT: ");
|
||||
s_readstring(socket, buffer, 25);
|
||||
@ -48,54 +48,54 @@ void send_email(int socket, struct user_record *user) {
|
||||
return;
|
||||
}
|
||||
subject = strdup(buffer);
|
||||
|
||||
|
||||
// post a message
|
||||
msg = external_editor(socket, user, user->loginname, recipient, NULL, NULL, subject, 1);
|
||||
|
||||
|
||||
if (msg != NULL) {
|
||||
sprintf(buffer, "%s/email.sq3", conf.bbs_path);
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
rc = sqlite3_exec(db, csql, 0, 0, &err_msg);
|
||||
if (rc != SQLITE_OK ) {
|
||||
|
||||
fprintf(stderr, "SQL error: %s\n", err_msg);
|
||||
|
||||
sqlite3_free(err_msg);
|
||||
|
||||
dolog("SQL error: %s", err_msg);
|
||||
|
||||
sqlite3_free(err_msg);
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
rc = sqlite3_prepare_v2(db, isql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, user->loginname, -1, 0);
|
||||
sqlite3_bind_text(res, 2, recipient, -1, 0);
|
||||
sqlite3_bind_text(res, 3, subject, -1, 0);
|
||||
sqlite3_bind_text(res, 4, msg, -1, 0);
|
||||
sqlite3_bind_int(res, 5, time(NULL));
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
return;
|
||||
}
|
||||
sqlite3_step(res);
|
||||
|
||||
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
free(msg);
|
||||
}
|
||||
}
|
||||
free(subject);
|
||||
free(recipient);
|
||||
}
|
||||
@ -120,26 +120,26 @@ void show_email(int socket, struct user_record *user, int msgno) {
|
||||
char c;
|
||||
char *replybody;
|
||||
int chars;
|
||||
|
||||
|
||||
sprintf(buffer, "%s/email.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, user->loginname, -1, 0);
|
||||
sqlite3_bind_int(res, 2, msgno);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
return;
|
||||
}
|
||||
if (sqlite3_step(res) == SQLITE_ROW) {
|
||||
@ -148,8 +148,8 @@ void show_email(int socket, struct user_record *user, int msgno) {
|
||||
subject = strdup((char *)sqlite3_column_text(res, 2));
|
||||
body = strdup((char *)sqlite3_column_text(res, 3));
|
||||
date = (time_t)sqlite3_column_int(res, 4);
|
||||
|
||||
|
||||
|
||||
|
||||
sprintf(buffer, "\e[2J\e[1;32mFrom : \e[1;37m%s\r\n", sender);
|
||||
s_putstring(socket, buffer);
|
||||
sprintf(buffer, "\e[1;32mSubject : \e[1;37m%s\r\n", subject);
|
||||
@ -160,10 +160,10 @@ void show_email(int socket, struct user_record *user, int msgno) {
|
||||
strcat(buffer, "\r\n");
|
||||
s_putstring(socket, buffer);
|
||||
s_putstring(socket, "\e[1;30m-------------------------------------------------------------------------------\e[0m\r\n");
|
||||
|
||||
|
||||
lines = 0;
|
||||
chars = 0;
|
||||
|
||||
|
||||
for (z=0;z<strlen(body);z++) {
|
||||
if (body[z] == '\r' || chars == 79) {
|
||||
chars = 0;
|
||||
@ -180,24 +180,24 @@ void show_email(int socket, struct user_record *user, int msgno) {
|
||||
chars++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sqlite3_finalize(res);
|
||||
|
||||
rc = sqlite3_prepare_v2(db, ssql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_int(res, 1, id);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
sqlite3_close(db);
|
||||
return;
|
||||
}
|
||||
sqlite3_step(res);
|
||||
|
||||
|
||||
s_putstring(socket, "Press R to reply, D to delete Enter to quit...\r\n");
|
||||
c = s_getc(socket);
|
||||
if (tolower(c) == 'r') {
|
||||
if (tolower(c) == 'r') {
|
||||
if (subject != NULL) {
|
||||
if (strncasecmp(buffer, "RE:", 3) != 0) {
|
||||
snprintf(buffer, 256, "RE: %s", subject);
|
||||
@ -208,58 +208,58 @@ void show_email(int socket, struct user_record *user, int msgno) {
|
||||
}
|
||||
subject = (char *)malloc(strlen(buffer) + 1);
|
||||
strcpy(subject, buffer);
|
||||
|
||||
|
||||
//replybody = editor(socket, user, body, sender);
|
||||
replybody = external_editor(socket, user, user->loginname, sender, body, sender, subject, 1);
|
||||
replybody = external_editor(socket, user, user->loginname, sender, body, sender, subject, 1);
|
||||
if (replybody != NULL) {
|
||||
rc = sqlite3_prepare_v2(db, isql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, user->loginname, -1, 0);
|
||||
sqlite3_bind_text(res, 2, sender, -1, 0);
|
||||
sqlite3_bind_text(res, 3, subject, -1, 0);
|
||||
sqlite3_bind_text(res, 4, replybody, -1, 0);
|
||||
sqlite3_bind_int(res, 5, time(NULL));
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
return;
|
||||
}
|
||||
sqlite3_step(res);
|
||||
|
||||
|
||||
sqlite3_finalize(res);
|
||||
free(replybody);
|
||||
}
|
||||
free(sender);
|
||||
free(subject);
|
||||
free(body);
|
||||
sqlite3_close(db);
|
||||
sqlite3_close(db);
|
||||
} else if (tolower(c) == 'd') {
|
||||
free(sender);
|
||||
free(subject);
|
||||
free(body);
|
||||
|
||||
|
||||
rc = sqlite3_prepare_v2(db, dsql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_int(res, 1, id);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo such email\r\n");
|
||||
return;
|
||||
}
|
||||
sqlite3_step(res);
|
||||
|
||||
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
sqlite3_close(db);
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
printf("Failed\n");
|
||||
dolog("Failed");
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
}
|
||||
@ -280,31 +280,31 @@ void list_emails(int socket, struct user_record *user) {
|
||||
int msgid;
|
||||
int msgtoread;
|
||||
struct tm msg_date;
|
||||
|
||||
|
||||
sprintf(buffer, "%s/email.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, user->loginname, -1, 0);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nYou have no email\r\n");
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nYou have no email\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
msgid = 0;
|
||||
|
||||
while (sqlite3_step(res) == SQLITE_ROW) {
|
||||
|
||||
while (sqlite3_step(res) == SQLITE_ROW) {
|
||||
from = strdup((char *)sqlite3_column_text(res, 0));
|
||||
subject = strdup((char *)sqlite3_column_text(res, 1));
|
||||
seen = sqlite3_column_int(res, 2);
|
||||
@ -316,10 +316,10 @@ void list_emails(int socket, struct user_record *user) {
|
||||
sprintf(buffer, "\e[1;30m[\e[1;34m%4d\e[1;30m] \e[1;37m%-39.39s \e[1;32m%-16.16s \e[1;35m%02d:%02d %02d-%02d-%02d\e[0m\r\n", msgid, subject, from, msg_date.tm_hour, msg_date.tm_min, msg_date.tm_mday, msg_date.tm_mon + 1, msg_date.tm_year - 100);
|
||||
}
|
||||
s_putstring(socket, buffer);
|
||||
|
||||
|
||||
free(from);
|
||||
free(subject);
|
||||
|
||||
|
||||
if (msgid % 22 == 0 && msgid != 0) {
|
||||
s_putstring(socket, "Enter # to read, Q to quit or Enter to continue\r\n");
|
||||
|
||||
@ -337,9 +337,9 @@ void list_emails(int socket, struct user_record *user) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
msgid++;
|
||||
}
|
||||
if (msgid == 0) {
|
||||
@ -354,7 +354,7 @@ void list_emails(int socket, struct user_record *user) {
|
||||
show_email(socket, user, msgtoread);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
@ -367,36 +367,36 @@ int mail_getemailcount(struct user_record *user) {
|
||||
char buffer[256];
|
||||
sqlite3 *db;
|
||||
sqlite3_stmt *res;
|
||||
int rc;
|
||||
|
||||
int rc;
|
||||
|
||||
sprintf(buffer, "%s/email.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, user->loginname, -1, 0);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
sqlite3_close(db);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
count = 0;
|
||||
|
||||
if (sqlite3_step(res) == SQLITE_ROW) {
|
||||
if (sqlite3_step(res) == SQLITE_ROW) {
|
||||
count = sqlite3_column_int(res, 0);
|
||||
}
|
||||
|
||||
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
|
||||
sqlite3_close(db);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
209
files.c
209
files.c
@ -28,7 +28,7 @@ int tagged_count = 0;
|
||||
|
||||
int ZXmitStr(u_char *str, int len, ZModem *info) {
|
||||
int i;
|
||||
|
||||
|
||||
for (i=0;i<len;i++) {
|
||||
if (str[i] == 255) {
|
||||
if (write(info->ofd, &str[i], 1) == 0) {
|
||||
@ -39,7 +39,7 @@ int ZXmitStr(u_char *str, int len, ZModem *info) {
|
||||
return ZmErrSys;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ int ZAttn(ZModem *info) {
|
||||
|
||||
for(ptr = info->attn; *ptr != '\0'; ++ptr) {
|
||||
if( *ptr == ATTNBRK ) {
|
||||
|
||||
|
||||
} else if( *ptr == ATTNPSE ) {
|
||||
sleep(1);
|
||||
} else {
|
||||
@ -78,18 +78,17 @@ char *upload_path;
|
||||
char upload_filename[1024];
|
||||
|
||||
FILE *ZOpenFile(char *name, u_long crc, ZModem *info) {
|
||||
|
||||
|
||||
FILE *fptr;
|
||||
struct stat s;
|
||||
|
||||
|
||||
snprintf(upload_filename, 1023, "%s/%s", upload_path, basename(name));
|
||||
fprintf(stderr, "%s\n", upload_filename);
|
||||
if (stat(upload_filename, &s) == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
fptr = fopen(upload_filename, "wb");
|
||||
|
||||
|
||||
return fptr;
|
||||
}
|
||||
|
||||
@ -115,14 +114,14 @@ int doIO(ZModem *zm) {
|
||||
int done = 0;
|
||||
int i;
|
||||
int j;
|
||||
|
||||
|
||||
while(!done) {
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(zm->ifd, &readfds) ;
|
||||
timeout.tv_sec = zm->timeout ;
|
||||
timeout.tv_usec = 0 ;
|
||||
i = select(zm->ifd+1, &readfds,NULL,NULL, &timeout) ;
|
||||
|
||||
|
||||
if( i==0 ) {
|
||||
done = ZmodemTimeout(zm) ;
|
||||
} else if (i > 0) {
|
||||
@ -130,7 +129,7 @@ int doIO(ZModem *zm) {
|
||||
if (len == 0) {
|
||||
disconnect(zm->ifd, "Socket closed");
|
||||
}
|
||||
|
||||
|
||||
pos = 0;
|
||||
for (j=0;j<len;j++) {
|
||||
if (buffer[j] == 255) {
|
||||
@ -153,7 +152,7 @@ int doIO(ZModem *zm) {
|
||||
} else {
|
||||
// SIG INT catch
|
||||
if (errno != EINTR) {
|
||||
printf("SELECT ERROR %s\n", strerror(errno));
|
||||
dolog("SELECT ERROR %s", strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -166,19 +165,19 @@ void upload_zmodem(int socket, struct user_record *user) {
|
||||
|
||||
|
||||
upload_path = conf.file_directories[user->cur_file_dir]->file_subs[user->cur_file_sub]->upload_path;
|
||||
|
||||
|
||||
zm.attn = NULL;
|
||||
zm.windowsize = 0;
|
||||
zm.bufsize = 0;
|
||||
|
||||
|
||||
zm.ifd = socket;
|
||||
zm.ofd = socket;
|
||||
|
||||
|
||||
zm.zrinitflags = 0;
|
||||
zm.zsinitflags = 0;
|
||||
|
||||
|
||||
zm.packetsize = 1024;
|
||||
|
||||
|
||||
done = ZmodemRInit(&zm);
|
||||
|
||||
doIO(&zm);
|
||||
@ -202,9 +201,9 @@ void upload(int socket, struct user_record *user) {
|
||||
int rc;
|
||||
struct stat s;
|
||||
char *err_msg = NULL;
|
||||
|
||||
|
||||
upload_zmodem(socket, user);
|
||||
|
||||
|
||||
s_putstring(socket, "\r\nPlease enter a description:\r\n");
|
||||
buffer[0] = '\0';
|
||||
for (i=0;i<5;i++) {
|
||||
@ -217,45 +216,45 @@ void upload(int socket, struct user_record *user) {
|
||||
strcat(buffer, buffer2);
|
||||
strcat(buffer, "\n");
|
||||
}
|
||||
|
||||
|
||||
sprintf(buffer3, "%s/%s.sq3", conf.bbs_path, conf.file_directories[user->cur_file_dir]->file_subs[user->cur_file_sub]->database);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer3, &db);
|
||||
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
rc = sqlite3_exec(db, create_sql, 0, 0, &err_msg);
|
||||
if (rc != SQLITE_OK ) {
|
||||
fprintf(stderr, "SQL error: %s\n", err_msg);
|
||||
sqlite3_free(err_msg);
|
||||
if (rc != SQLITE_OK ) {
|
||||
dolog("SQL error: %s", err_msg);
|
||||
sqlite3_free(err_msg);
|
||||
sqlite3_close(db);
|
||||
return;
|
||||
}
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
stat(upload_filename, &s);
|
||||
|
||||
|
||||
sqlite3_bind_text(res, 1, upload_filename, -1, 0);
|
||||
sqlite3_bind_text(res, 2, buffer, -1, 0);
|
||||
sqlite3_bind_int(res, 3, s.st_size);
|
||||
sqlite3_bind_int(res, 3, s.st_size);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
return;
|
||||
sqlite3_close(db);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
|
||||
if (rc != SQLITE_DONE) {
|
||||
printf("execution failed: %s", sqlite3_errmsg(db));
|
||||
dolog("execution failed: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
sqlite3_close(db);
|
||||
return;
|
||||
}
|
||||
sqlite3_finalize(res);
|
||||
@ -271,43 +270,43 @@ void download_zmodem(int socket, struct user_record *user, char *filename) {
|
||||
int j;
|
||||
int len;
|
||||
int pos;
|
||||
|
||||
|
||||
u_char buffer[2048];
|
||||
u_char buffer2[1024];
|
||||
|
||||
printf("Attempting to upload %s\n", filename);
|
||||
|
||||
|
||||
dolog("Attempting to upload %s", filename);
|
||||
|
||||
zm.attn = NULL;
|
||||
zm.windowsize = 0;
|
||||
zm.bufsize = 0;
|
||||
|
||||
|
||||
zm.ifd = socket;
|
||||
zm.ofd = socket;
|
||||
|
||||
|
||||
zm.zrinitflags = 0;
|
||||
zm.zsinitflags = 0;
|
||||
|
||||
|
||||
zm.packetsize = 1024;
|
||||
|
||||
|
||||
|
||||
|
||||
ZmodemTInit(&zm) ;
|
||||
done = doIO(&zm);
|
||||
if ( done != ZmDone ) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
done = ZmodemTFile(filename, basename(filename), ZCBIN,0,0,0,0,0, &zm) ;
|
||||
|
||||
|
||||
switch( done ) {
|
||||
case 0:
|
||||
case 0:
|
||||
break ;
|
||||
|
||||
case ZmErrCantOpen:
|
||||
fprintf(stderr, "cannot open file \"%s\": %s\n", filename, strerror(errno)) ;
|
||||
dolog("cannot open file \"%s\": %s\n", filename, strerror(errno)) ;
|
||||
return;
|
||||
|
||||
case ZmFileTooLong:
|
||||
fprintf(stderr, "filename \"%s\" too long, skipping...\n", filename) ;
|
||||
dolog("filename \"%s\" too long, skipping...\n", filename) ;
|
||||
return;
|
||||
|
||||
case ZmDone:
|
||||
@ -316,17 +315,17 @@ void download_zmodem(int socket, struct user_record *user, char *filename) {
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!done) {
|
||||
done = doIO(&zm);
|
||||
}
|
||||
|
||||
|
||||
if ( done != ZmDone ) {
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
done = ZmodemTFinish(&zm);
|
||||
|
||||
|
||||
if (!done) {
|
||||
done = doIO(&zm);
|
||||
}
|
||||
@ -342,55 +341,55 @@ void download(int socket, struct user_record *user) {
|
||||
sqlite3 *db;
|
||||
sqlite3_stmt *res;
|
||||
int rc;
|
||||
|
||||
|
||||
for (i=0;i<tagged_count;i++) {
|
||||
download_zmodem(socket, user, tagged_files[i]);
|
||||
|
||||
|
||||
sprintf(buffer, "%s/%s.sq3", conf.bbs_path, conf.file_directories[user->cur_file_dir]->file_subs[user->cur_file_sub]->database);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, ssql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, tagged_files[i], -1, 0);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
}
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
if (rc != SQLITE_ROW) {
|
||||
fprintf(stderr, "Downloaded a file not in database!!!!!");
|
||||
dolog("Downloaded a file not in database!!!!!");
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
dloads = sqlite3_column_int(res, 0);
|
||||
dloads++;
|
||||
sqlite3_finalize(res);
|
||||
|
||||
|
||||
rc = sqlite3_prepare_v2(db, usql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_int(res, 1, dloads);
|
||||
sqlite3_bind_text(res, 2, tagged_files[i], -1, 0);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
}
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
}
|
||||
|
||||
|
||||
for (i=0;i<tagged_count;i++) {
|
||||
free(tagged_files[i]);
|
||||
}
|
||||
@ -414,28 +413,28 @@ void list_files(int socket, struct user_record *user) {
|
||||
int z;
|
||||
int k;
|
||||
int match;
|
||||
|
||||
|
||||
struct file_entry **files_e;
|
||||
|
||||
|
||||
sprintf(buffer, "%s/%s.sq3", conf.bbs_path, conf.file_directories[user->cur_file_dir]->file_subs[user->cur_file_sub]->database);
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
s_putstring(socket, "\r\nNo files in this area!\r\n");
|
||||
return;
|
||||
s_putstring(socket, "\r\nNo files in this area!\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
files_c = 0;
|
||||
|
||||
while (sqlite3_step(res) == SQLITE_ROW) {
|
||||
@ -449,15 +448,15 @@ void list_files(int socket, struct user_record *user) {
|
||||
files_e[files_c]->description = strdup((char *)sqlite3_column_text(res, 1));
|
||||
files_e[files_c]->size = sqlite3_column_int(res, 2);
|
||||
files_e[files_c]->dlcount = sqlite3_column_int(res, 3);
|
||||
|
||||
|
||||
files_c++;
|
||||
}
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
|
||||
sqlite3_close(db);
|
||||
|
||||
if (files_c == 0) {
|
||||
s_putstring(socket, "\r\nNo files in this area!\r\n");
|
||||
return;
|
||||
s_putstring(socket, "\r\nNo files in this area!\r\n");
|
||||
return;
|
||||
}
|
||||
s_putstring(socket, "\r\n");
|
||||
for (i=0;i<files_c;i++) {
|
||||
@ -534,7 +533,7 @@ void list_files(int socket, struct user_record *user) {
|
||||
} else {
|
||||
s_putchar(socket, files_e[i]->description[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while (1) {
|
||||
s_putstring(socket, "\r\n\e[0mEnter # to tag, Enter to quit: ");
|
||||
@ -576,7 +575,7 @@ void list_files(int socket, struct user_record *user) {
|
||||
s_putstring(socket, "\r\nSorry, you don't have permission to download from this area\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -592,7 +591,7 @@ int file_menu(int socket, struct user_record *user) {
|
||||
char *lRet;
|
||||
lua_State *L;
|
||||
int result;
|
||||
|
||||
|
||||
if (conf.script_path != NULL) {
|
||||
sprintf(prompt, "%s/filemenu.lua", conf.script_path);
|
||||
if (stat(prompt, &s) == 0) {
|
||||
@ -603,7 +602,7 @@ int file_menu(int socket, struct user_record *user) {
|
||||
do_internal_menu = 0;
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
}
|
||||
} else {
|
||||
@ -612,27 +611,27 @@ int file_menu(int socket, struct user_record *user) {
|
||||
} else {
|
||||
do_internal_menu = 1;
|
||||
}
|
||||
|
||||
|
||||
while (!dofiles) {
|
||||
if (do_internal_menu == 1) {
|
||||
s_displayansi(socket, "filemenu");
|
||||
|
||||
|
||||
sprintf(prompt, "\e[0m\r\nDir: (%d) %s\r\nSub: (%d) %s\r\nTL: %dm :> ", user->cur_file_dir, conf.file_directories[user->cur_file_dir]->name, user->cur_file_sub, conf.file_directories[user->cur_file_dir]->file_subs[user->cur_file_sub]->name, user->timeleft);
|
||||
s_putstring(socket, prompt);
|
||||
|
||||
|
||||
c = s_getc(socket);
|
||||
} else {
|
||||
lua_getglobal(L, "menu");
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
lua_close(L);
|
||||
continue;
|
||||
}
|
||||
lRet = (char *)lua_tostring(L, -1);
|
||||
lua_pop(L, 1);
|
||||
c = lRet[0];
|
||||
c = lRet[0];
|
||||
}
|
||||
switch(tolower(c)) {
|
||||
case 'i':
|
||||
@ -686,7 +685,7 @@ int file_menu(int socket, struct user_record *user) {
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case 'l':
|
||||
list_files(socket, user);
|
||||
break;
|
||||
@ -704,7 +703,7 @@ int file_menu(int socket, struct user_record *user) {
|
||||
break;
|
||||
case 'c':
|
||||
{
|
||||
// Clear tagged files
|
||||
// Clear tagged files
|
||||
if (tagged_count > 0) {
|
||||
for (i=0;i<tagged_count;i++) {
|
||||
free(tagged_files[i]);
|
||||
|
30
mail_menu.c
30
mail_menu.c
@ -48,7 +48,7 @@ s_JamBase *open_jam_base(char *path) {
|
||||
}
|
||||
} else {
|
||||
free(jb);
|
||||
printf("Got %d\n", ret);
|
||||
dolog("Got %d", ret);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -104,7 +104,7 @@ struct msg_headers *read_message_headers(int msgconf, int msgarea, struct user_r
|
||||
|
||||
jb = open_jam_base(conf.mail_conferences[msgconf]->mail_areas[msgarea]->path);
|
||||
if (!jb) {
|
||||
printf("Error opening JAM base.. %s\n", conf.mail_conferences[msgconf]->mail_areas[msgarea]->path);
|
||||
dolog("Error opening JAM base.. %s", conf.mail_conferences[msgconf]->mail_areas[msgarea]->path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -119,7 +119,7 @@ struct msg_headers *read_message_headers(int msgconf, int msgarea, struct user_r
|
||||
memset(&jmh, 0, sizeof(s_JamMsgHeader));
|
||||
z = JAM_ReadMsgHeader(jb, i, &jmh, &jsp);
|
||||
if (z != 0) {
|
||||
printf("Failed to read msg header: %d Erro %d\n", z, JAM_Errno(jb));
|
||||
dolog("Failed to read msg header: %d Erro %d", z, JAM_Errno(jb));
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -730,7 +730,7 @@ void read_message(int socket, struct user_record *user, struct msg_headers *msgh
|
||||
|
||||
jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
if (!jb) {
|
||||
printf("Error opening JAM base.. %s\n", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
dolog("Error opening JAM base.. %s", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -961,7 +961,7 @@ void read_message(int socket, struct user_record *user, struct msg_headers *msgh
|
||||
|
||||
jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
if (!jb) {
|
||||
printf("Error opening JAM base.. %s\n", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
dolog("Error opening JAM base.. %s", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
free(replybody);
|
||||
free(body);
|
||||
free(subject);
|
||||
@ -1135,12 +1135,12 @@ void read_message(int socket, struct user_record *user, struct msg_headers *msgh
|
||||
free(subject);
|
||||
free(to);
|
||||
free(from);
|
||||
printf("Failed to lock msg base!\n");
|
||||
dolog("Failed to lock msg base!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (JAM_AddMessage(jb, &jmh, jsp, (char *)replybody, strlen(replybody))) {
|
||||
printf("Failed to add message\n");
|
||||
dolog("Failed to add message");
|
||||
} else {
|
||||
if (conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->type == TYPE_NETMAIL_AREA) {
|
||||
if (conf.netmail_sem != NULL) {
|
||||
@ -1252,7 +1252,7 @@ int mail_menu(int socket, struct user_record *user) {
|
||||
do_internal_menu = 0;
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
}
|
||||
} else {
|
||||
@ -1275,7 +1275,7 @@ int mail_menu(int socket, struct user_record *user) {
|
||||
lua_getglobal(L, "menu");
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
lua_close(L);
|
||||
continue;
|
||||
@ -1293,7 +1293,7 @@ int mail_menu(int socket, struct user_record *user) {
|
||||
if (msghs != NULL && msghs->msg_count > 0) {
|
||||
jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
if (!jb) {
|
||||
printf("Error opening JAM base.. %s\n", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
dolog("Error opening JAM base.. %s", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
break;
|
||||
} else {
|
||||
all_unread = 0;
|
||||
@ -1402,7 +1402,7 @@ int mail_menu(int socket, struct user_record *user) {
|
||||
if (msg != NULL) {
|
||||
jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
if (!jb) {
|
||||
printf("Error opening JAM base.. %s\n", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
dolog("Error opening JAM base.. %s", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
free(msg);
|
||||
free(to);
|
||||
free(subject);
|
||||
@ -1557,7 +1557,7 @@ int mail_menu(int socket, struct user_record *user) {
|
||||
free(msg);
|
||||
free(to);
|
||||
free(subject);
|
||||
printf("Failed to lock msg base!\n");
|
||||
dolog("Failed to lock msg base!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1567,7 +1567,7 @@ int mail_menu(int socket, struct user_record *user) {
|
||||
}
|
||||
|
||||
if (JAM_AddMessage(jb, &jmh, jsp, (char *)msg, strlen(msg))) {
|
||||
printf("Failed to add message\n");
|
||||
dolog("Failed to add message");
|
||||
} else {
|
||||
if (conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->type == TYPE_NETMAIL_AREA) {
|
||||
if (conf.netmail_sem != NULL) {
|
||||
@ -1600,7 +1600,7 @@ int mail_menu(int socket, struct user_record *user) {
|
||||
if (msghs != NULL && msghs->msg_count > 0) {
|
||||
jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
if (!jb) {
|
||||
printf("Error opening JAM base.. %s\n", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
dolog("Error opening JAM base.. %s", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path);
|
||||
break;
|
||||
} else {
|
||||
all_unread = 0;
|
||||
@ -1854,7 +1854,7 @@ void mail_scan(int socket, struct user_record *user) {
|
||||
}
|
||||
jb = open_jam_base(conf.mail_conferences[i]->mail_areas[j]->path);
|
||||
if (!jb) {
|
||||
printf("Unable to open message base\n");
|
||||
dolog("Unable to open message base");
|
||||
continue;
|
||||
}
|
||||
if (JAM_ReadMBHeader(jb, &jbh) != 0) {
|
||||
|
12
main.c
12
main.c
@ -341,7 +341,7 @@ void server(int port) {
|
||||
|
||||
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (socket_desc == -1) {
|
||||
printf("Couldn't create socket..\n");
|
||||
fprintf(stderr, "Couldn't create socket..\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -393,7 +393,7 @@ int main(int argc, char **argv) {
|
||||
FILE *fptr;
|
||||
|
||||
if (argc < 3) {
|
||||
printf("Usage ./magicka config/bbs.ini port\n");
|
||||
fprintf(stderr, "Usage ./magicka config/bbs.ini port\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -412,26 +412,26 @@ int main(int argc, char **argv) {
|
||||
|
||||
// Load BBS data
|
||||
if (ini_parse(argv[1], handler, &conf) <0) {
|
||||
printf("Unable to load configuration ini (%s)!\n", argv[1]);
|
||||
fprintf(stderr, "Unable to load configuration ini (%s)!\n", argv[1]);
|
||||
exit(-1);
|
||||
}
|
||||
// Load mail Areas
|
||||
for (i=0;i<conf.mail_conference_count;i++) {
|
||||
if (ini_parse(conf.mail_conferences[i]->path, mail_area_handler, conf.mail_conferences[i]) <0) {
|
||||
printf("Unable to load configuration ini (%s)!\n", conf.mail_conferences[i]->path);
|
||||
fprintf(stderr, "Unable to load configuration ini (%s)!\n", conf.mail_conferences[i]->path);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
// Load file Subs
|
||||
for (i=0;i<conf.file_directory_count;i++) {
|
||||
if (ini_parse(conf.file_directories[i]->path, file_sub_handler, conf.file_directories[i]) <0) {
|
||||
printf("Unable to load configuration ini (%s)!\n", conf.file_directories[i]->path);
|
||||
fprintf(stderr, "Unable to load configuration ini (%s)!\n", conf.file_directories[i]->path);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (ini_parse("config/doors.ini", door_config_handler, &conf) <0) {
|
||||
printf("Unable to load configuration ini (doors.ini)!\n");
|
||||
fprintf(stderr, "Unable to load configuration ini (doors.ini)!\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
28
main_menu.c
28
main_menu.c
@ -8,7 +8,7 @@
|
||||
#include "lua/lualib.h"
|
||||
#include "lua/lauxlib.h"
|
||||
|
||||
extern struct bbs_config conf;
|
||||
extern struct bbs_config conf;
|
||||
|
||||
void main_menu(int socket, struct user_record *user) {
|
||||
int doquit = 0;
|
||||
@ -21,7 +21,7 @@ void main_menu(int socket, struct user_record *user) {
|
||||
char *lRet;
|
||||
lua_State *L;
|
||||
int result;
|
||||
|
||||
|
||||
if (conf.script_path != NULL) {
|
||||
sprintf(buffer, "%s/mainmenu.lua", conf.script_path);
|
||||
if (stat(buffer, &s) == 0) {
|
||||
@ -32,7 +32,7 @@ void main_menu(int socket, struct user_record *user) {
|
||||
do_internal_menu = 0;
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
}
|
||||
} else {
|
||||
@ -41,22 +41,22 @@ void main_menu(int socket, struct user_record *user) {
|
||||
} else {
|
||||
do_internal_menu = 1;
|
||||
}
|
||||
|
||||
|
||||
while (!doquit) {
|
||||
|
||||
|
||||
if (do_internal_menu == 1) {
|
||||
s_displayansi(socket, "mainmenu");
|
||||
|
||||
|
||||
|
||||
|
||||
sprintf(prompt, "\r\n\e[0mTL: %dm :> ", user->timeleft);
|
||||
s_putstring(socket, prompt);
|
||||
|
||||
|
||||
c = s_getc(socket);
|
||||
} else {
|
||||
lua_getglobal(L, "menu");
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_menu = 1;
|
||||
lua_close(L);
|
||||
continue;
|
||||
@ -65,7 +65,7 @@ void main_menu(int socket, struct user_record *user) {
|
||||
lua_pop(L, 1);
|
||||
c = lRet[0];
|
||||
}
|
||||
|
||||
|
||||
switch(tolower(c)) {
|
||||
case 'o':
|
||||
{
|
||||
@ -75,11 +75,11 @@ void main_menu(int socket, struct user_record *user) {
|
||||
case 'a':
|
||||
{
|
||||
if (conf.text_file_count > 0) {
|
||||
|
||||
|
||||
while(1) {
|
||||
s_putstring(socket, "\r\n\e[1;32mText Files Collection\r\n");
|
||||
s_putstring(socket, "\e[1;30m-------------------------------------------------------------------------------\e[0m\r\n");
|
||||
|
||||
|
||||
for (i=0;i<conf.text_file_count;i++) {
|
||||
sprintf(buffer, "\e[1;30m[\e[1;34m%3d\e[1;30m] \e[1;37m%s\r\n", i, conf.text_files[i]->name);
|
||||
s_putstring(socket, buffer);
|
||||
@ -126,7 +126,7 @@ void main_menu(int socket, struct user_record *user) {
|
||||
{
|
||||
i = 0;
|
||||
sprintf(buffer, "%s/bulletin%d.ans", conf.ansi_path, i);
|
||||
|
||||
|
||||
while (stat(buffer, &s) == 0) {
|
||||
sprintf(buffer, "bulletin%d", i);
|
||||
s_displayansi(socket, buffer);
|
||||
@ -135,7 +135,7 @@ void main_menu(int socket, struct user_record *user) {
|
||||
s_getc(socket);
|
||||
i++;
|
||||
sprintf(buffer, "%s/bulletin%d.ans", conf.ansi_path, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '1':
|
||||
|
220
users.c
220
users.c
@ -12,12 +12,12 @@ static int secLevel(void* user, const char* section, const char* name,
|
||||
const char* value)
|
||||
{
|
||||
struct sec_level_t *conf = (struct sec_level_t *)user;
|
||||
|
||||
|
||||
if (strcasecmp(section, "main") == 0) {
|
||||
if (strcasecmp(name, "time per day") == 0) {
|
||||
conf->timeperday = atoi(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -26,25 +26,25 @@ int save_user(struct user_record *user) {
|
||||
sqlite3 *db;
|
||||
sqlite3_stmt *res;
|
||||
int rc;
|
||||
|
||||
|
||||
char *update_sql = "UPDATE users SET password=?, firstname=?,"
|
||||
"lastname=?, email=?, location=?, sec_level=?, last_on=?, time_left=?, cur_mail_conf=?, cur_mail_area=?, cur_file_dir=?, cur_file_sub=?, times_on=? where loginname LIKE ?";
|
||||
char *err_msg = 0;
|
||||
|
||||
|
||||
sprintf(buffer, "%s/users.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
rc = sqlite3_prepare_v2(db, update_sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, user->password, -1, 0);
|
||||
sqlite3_bind_text(res, 2, user->firstname, -1, 0);
|
||||
sqlite3_bind_text(res, 3, user->lastname, -1, 0);
|
||||
@ -60,16 +60,16 @@ int save_user(struct user_record *user) {
|
||||
sqlite3_bind_int(res, 13, user->timeson);
|
||||
sqlite3_bind_text(res, 14, user->loginname, -1, 0);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
|
||||
if (rc != SQLITE_DONE) {
|
||||
|
||||
printf("execution failed: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
dolog("execution failed: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
sqlite3_close(db);
|
||||
@ -98,36 +98,36 @@ int inst_user(struct user_record *user) {
|
||||
"cur_file_sub INTEGER,"
|
||||
"cur_file_dir INTEGER,"
|
||||
"times_on INTEGER);";
|
||||
|
||||
|
||||
char *insert_sql = "INSERT INTO users (loginname, password, firstname,"
|
||||
"lastname, email, location, sec_level, last_on, time_left, cur_mail_conf, cur_mail_area, cur_file_dir, cur_file_sub, times_on) VALUES(?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
char *err_msg = 0;
|
||||
|
||||
|
||||
sprintf(buffer, "%s/users.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
rc = sqlite3_exec(db, create_sql, 0, 0, &err_msg);
|
||||
if (rc != SQLITE_OK ) {
|
||||
|
||||
fprintf(stderr, "SQL error: %s\n", err_msg);
|
||||
|
||||
sqlite3_free(err_msg);
|
||||
|
||||
dolog("SQL error: %s", err_msg);
|
||||
|
||||
sqlite3_free(err_msg);
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
rc = sqlite3_prepare_v2(db, insert_sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, user->loginname, -1, 0);
|
||||
sqlite3_bind_text(res, 2, user->password, -1, 0);
|
||||
sqlite3_bind_text(res, 3, user->firstname, -1, 0);
|
||||
@ -142,24 +142,24 @@ int inst_user(struct user_record *user) {
|
||||
sqlite3_bind_int(res, 12, user->cur_file_dir);
|
||||
sqlite3_bind_int(res, 13, user->cur_file_sub);
|
||||
sqlite3_bind_int(res, 14, user->timeson);
|
||||
|
||||
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
rc = sqlite3_step(res);
|
||||
|
||||
|
||||
if (rc != SQLITE_DONE) {
|
||||
|
||||
printf("execution failed: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
dolog("execution failed: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
user->id = sqlite3_last_insert_rowid(db);
|
||||
|
||||
sqlite3_finalize(res);
|
||||
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
return 1;
|
||||
}
|
||||
@ -171,30 +171,30 @@ struct user_record *check_user_pass(int socket, char *loginname, char *password)
|
||||
sqlite3_stmt *res;
|
||||
int rc;
|
||||
char *sql = "SELECT * FROM users WHERE loginname LIKE ?";
|
||||
|
||||
|
||||
sprintf(buffer, "%s/users.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, loginname, -1, 0);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
return NULL;
|
||||
sqlite3_close(db);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int step = sqlite3_step(res);
|
||||
|
||||
if (step == SQLITE_ROW) {
|
||||
|
||||
if (step == SQLITE_ROW) {
|
||||
user = (struct user_record *)malloc(sizeof(struct user_record));
|
||||
user->id = sqlite3_column_int(res, 0);
|
||||
user->loginname = strdup((char *)sqlite3_column_text(res, 1));
|
||||
@ -211,7 +211,7 @@ struct user_record *check_user_pass(int socket, char *loginname, char *password)
|
||||
user->cur_file_dir = sqlite3_column_int(res, 13);
|
||||
user->cur_file_sub = sqlite3_column_int(res, 12);
|
||||
user->timeson = sqlite3_column_int(res, 14);
|
||||
|
||||
|
||||
if (strcmp(password, user->password) != 0) {
|
||||
free(user->loginname);
|
||||
free(user->firstname);
|
||||
@ -220,33 +220,33 @@ struct user_record *check_user_pass(int socket, char *loginname, char *password)
|
||||
free(user->location);
|
||||
free(user);
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
sqlite3_close(db);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sqlite3_close(db);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
user->sec_info = (struct sec_level_t *)malloc(sizeof(struct sec_level_t));
|
||||
|
||||
|
||||
sprintf(buffer, "%s/config/s%d.ini", conf.bbs_path, user->sec_level);
|
||||
if (ini_parse(buffer, secLevel, user->sec_info) <0) {
|
||||
printf("Unable to load sec Level ini (%s)!\n", buffer);
|
||||
dolog("Unable to load sec Level ini (%s)!", buffer);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (user->cur_mail_conf > conf.mail_conference_count) {
|
||||
user->cur_mail_conf = 0;
|
||||
}
|
||||
if (user->cur_file_dir > conf.file_directory_count) {
|
||||
user->cur_file_dir = 0;
|
||||
}
|
||||
|
||||
|
||||
if (user->cur_mail_area > conf.mail_conferences[user->cur_mail_conf]->mail_area_count) {
|
||||
user->cur_mail_area = 0;
|
||||
}
|
||||
@ -255,8 +255,8 @@ struct user_record *check_user_pass(int socket, char *loginname, char *password)
|
||||
user->cur_file_sub = 0;
|
||||
}
|
||||
|
||||
|
||||
return user;
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
void list_users(int socket, struct user_record *user) {
|
||||
@ -265,21 +265,21 @@ void list_users(int socket, struct user_record *user) {
|
||||
sqlite3_stmt *res;
|
||||
int rc;
|
||||
int i;
|
||||
|
||||
|
||||
char *sql = "SELECT loginname,location,times_on FROM users";
|
||||
|
||||
|
||||
sprintf(buffer, "%s/users.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot prepare statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot prepare statement: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
exit(1);
|
||||
}
|
||||
@ -290,22 +290,22 @@ void list_users(int socket, struct user_record *user) {
|
||||
while (sqlite3_step(res) == SQLITE_ROW) {
|
||||
sprintf(buffer, "\e[1;37m%-16s \e[1;36m%-32s \e[1;32m%5d\r\n", sqlite3_column_text(res, 0), sqlite3_column_text(res, 1), sqlite3_column_int(res, 2));
|
||||
s_putstring(socket, buffer);
|
||||
|
||||
|
||||
i++;
|
||||
if (i == 20) {
|
||||
sprintf(buffer, "Press any key to continue...\r\n");
|
||||
s_putstring(socket, buffer);
|
||||
s_getc(socket);
|
||||
s_getc(socket);
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
s_putstring(socket, "\e[1;30m-------------------------------------------------------------------------------\e[0m\r\n");
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
sprintf(buffer, "Press any key to continue...\r\n");
|
||||
s_putstring(socket, buffer);
|
||||
s_getc(socket);
|
||||
s_getc(socket);
|
||||
}
|
||||
|
||||
int check_user(char *loginname) {
|
||||
@ -314,33 +314,33 @@ int check_user(char *loginname) {
|
||||
sqlite3_stmt *res;
|
||||
int rc;
|
||||
char *sql = "SELECT * FROM users WHERE loginname = ?";
|
||||
|
||||
|
||||
sprintf(buffer, "%s/users.sq3", conf.bbs_path);
|
||||
|
||||
|
||||
rc = sqlite3_open(buffer, &db);
|
||||
|
||||
|
||||
if (rc != SQLITE_OK) {
|
||||
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Cannot open database: %s", sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
|
||||
|
||||
exit(1);
|
||||
}
|
||||
rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
|
||||
if (rc == SQLITE_OK) {
|
||||
sqlite3_bind_text(res, 1, loginname, -1, 0);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
|
||||
dolog("Failed to execute statement: %s", sqlite3_errmsg(db));
|
||||
}
|
||||
|
||||
|
||||
int step = sqlite3_step(res);
|
||||
|
||||
|
||||
if (step == SQLITE_ROW) {
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sqlite3_finalize(res);
|
||||
sqlite3_close(db);
|
||||
return 1;
|
||||
@ -354,11 +354,11 @@ struct user_record *new_user(int socket) {
|
||||
int nameok = 0;
|
||||
int passok = 0;
|
||||
int i;
|
||||
|
||||
|
||||
user = (struct user_record *)malloc(sizeof(struct user_record));
|
||||
s_putstring(socket, "\r\n\r\n");
|
||||
s_displayansi(socket, "newuser");
|
||||
|
||||
|
||||
do {
|
||||
passok = 0;
|
||||
nameok = 0;
|
||||
@ -370,12 +370,12 @@ struct user_record *new_user(int socket) {
|
||||
s_putstring(socket, "Sorry, that name is too short.\r\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
for (i=0;i<strlen(buffer);i++) {
|
||||
if (!(tolower(buffer[i]) >= 97 && tolower(buffer[i]) <= 122)) {
|
||||
s_putstring(socket, "Sorry, invalid character, can only use alpha characters.\r\n");
|
||||
nameok = 1;
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nameok == 1) {
|
||||
@ -384,16 +384,16 @@ struct user_record *new_user(int socket) {
|
||||
}
|
||||
if (strcasecmp(buffer, "unknown") == 0) {
|
||||
s_putstring(socket, "Sorry, that name is reserved.\r\n");
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
if (strcasecmp(buffer, "all") == 0) {
|
||||
s_putstring(socket, "Sorry, that name is reserved.\r\n");
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
if (strcasecmp(buffer, "new") == 0) {
|
||||
s_putstring(socket, "Sorry, that name is reserved.\r\n");
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
user->loginname = strdup(buffer);
|
||||
nameok = check_user(user->loginname);
|
||||
if (!nameok) {
|
||||
@ -407,7 +407,7 @@ struct user_record *new_user(int socket) {
|
||||
s_readstring(socket, buffer, 32);
|
||||
s_putstring(socket, "\r\n");
|
||||
user->firstname = strdup(buffer);
|
||||
|
||||
|
||||
s_putstring(socket, "What is your last name: ");
|
||||
memset(buffer, 0, 256);
|
||||
s_readstring(socket, buffer, 32);
|
||||
@ -424,7 +424,7 @@ struct user_record *new_user(int socket) {
|
||||
memset(buffer, 0, 256);
|
||||
s_readstring(socket, buffer, 32);
|
||||
s_putstring(socket, "\r\n");
|
||||
user->location = strdup(buffer);
|
||||
user->location = strdup(buffer);
|
||||
|
||||
do {
|
||||
s_putstring(socket, "What password would you like (at least 8 characters): ");
|
||||
@ -438,7 +438,7 @@ struct user_record *new_user(int socket) {
|
||||
}
|
||||
} while (!passok);
|
||||
user->password = strdup(buffer);
|
||||
|
||||
|
||||
s_putstring(socket, "You Entered:\r\n");
|
||||
s_putstring(socket, "-------------------------------------\r\n");
|
||||
s_putstring(socket, "Login Name: ");
|
||||
@ -459,7 +459,7 @@ struct user_record *new_user(int socket) {
|
||||
while (tolower(c) != 'y' && tolower(c) != 'n') {
|
||||
c = s_getchar(socket);
|
||||
}
|
||||
|
||||
|
||||
if (tolower(c) == 'y') {
|
||||
done = 1;
|
||||
}
|
||||
@ -467,13 +467,13 @@ struct user_record *new_user(int socket) {
|
||||
user->sec_level = conf.newuserlvl;
|
||||
|
||||
user->sec_info = (struct sec_level_t *)malloc(sizeof(struct sec_level_t));
|
||||
|
||||
|
||||
sprintf(buffer, "%s/config/s%d.ini", conf.bbs_path, user->sec_level);
|
||||
|
||||
|
||||
if (ini_parse(buffer, secLevel, user->sec_info) <0) {
|
||||
printf("Unable to load sec Level ini (%s)!\n", buffer);
|
||||
dolog("Unable to load sec Level ini (%s)!", buffer);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
user->laston = time(NULL);
|
||||
user->timeleft = user->sec_info->timeperday;
|
||||
@ -483,6 +483,6 @@ struct user_record *new_user(int socket) {
|
||||
user->cur_mail_conf = 0;
|
||||
user->timeson = 0;
|
||||
inst_user(user);
|
||||
|
||||
|
||||
return user;
|
||||
}
|
||||
|
Reference in New Issue
Block a user