add seclevel to menu items

This commit is contained in:
Andrew Pamment 2017-04-16 19:04:29 +10:00
parent b5c1ca9184
commit e8777eae69

328
menus.c
View File

@ -53,6 +53,7 @@ struct menu_item {
char hotkey; char hotkey;
int command; int command;
char *data; char *data;
int seclevel;
}; };
int menu_system(char *menufile) { int menu_system(char *menufile) {
@ -104,6 +105,7 @@ int menu_system(char *menufile) {
menu[menu_items-1] = (struct menu_item *)malloc(sizeof(struct menu_item)); menu[menu_items-1] = (struct menu_item *)malloc(sizeof(struct menu_item));
menu[menu_items-1]->hotkey = buffer[7]; menu[menu_items-1]->hotkey = buffer[7];
menu[menu_items-1]->data = NULL; menu[menu_items-1]->data = NULL;
menu[menu_items-1]->seclevel = 0;
} else if (strncasecmp(buffer, "COMMAND", 7) == 0 && menu_items > 0) { } else if (strncasecmp(buffer, "COMMAND", 7) == 0 && menu_items > 0) {
if (strncasecmp(&buffer[8], "SUBMENU", 7) == 0) { if (strncasecmp(&buffer[8], "SUBMENU", 7) == 0) {
menu[menu_items-1]->command = MENU_SUBMENU; menu[menu_items-1]->command = MENU_SUBMENU;
@ -180,6 +182,8 @@ int menu_system(char *menufile) {
} else if (strncasecmp(&buffer[8], "DOSCRIPT", 8) == 0) { } else if (strncasecmp(&buffer[8], "DOSCRIPT", 8) == 0) {
menu[menu_items-1]->command = MENU_DOSCRIPT; menu[menu_items-1]->command = MENU_DOSCRIPT;
} }
} else if (strncasecmp(buffer, "SECLEVEL", 8) == 0) {
menu[menu_items-1]->seclevel = atoi(&buffer[9]);
} else if (strncasecmp(buffer, "DATA", 4) == 0) { } else if (strncasecmp(buffer, "DATA", 4) == 0) {
menu[menu_items-1]->data = strdup(&buffer[5]); menu[menu_items-1]->data = strdup(&buffer[5]);
} else if (strncasecmp(buffer, "LUASCRIPT", 9) == 0) { } else if (strncasecmp(buffer, "LUASCRIPT", 9) == 0) {
@ -251,14 +255,35 @@ int menu_system(char *menufile) {
for (i=0;i<menu_items;i++) { for (i=0;i<menu_items;i++) {
if (tolower(menu[i]->hotkey) == tolower(c)) { if (tolower(menu[i]->hotkey) == tolower(c)) {
switch(menu[i]->command) { if (menu[i]->seclevel <= gUser->sec_level) {
case MENU_SUBMENU: switch(menu[i]->command) {
doquit = menu_system(menu[i]->data); case MENU_SUBMENU:
if (doquit == 1) { doquit = menu_system(menu[i]->data);
// free menus if (doquit == 1) {
if (do_lua_menu) { // free menus
lua_close(L); if (do_lua_menu) {
} lua_close(L);
}
if (lua_script != NULL) {
free(lua_script);
}
if (ansi_file != NULL) {
free(ansi_file);
}
for (i=0;i<menu_items;i++) {
if (menu[i]->data != NULL) {
free(menu[i]->data);
}
free(menu[i]);
}
free(menu);
return doquit;
}
break;
case MENU_LOGOFF:
if (do_lua_menu) {
lua_close(L);
}
if (lua_script != NULL) { if (lua_script != NULL) {
free(lua_script); free(lua_script);
} }
@ -272,162 +297,143 @@ int menu_system(char *menufile) {
free(menu[i]); free(menu[i]);
} }
free(menu); free(menu);
return doquit; return 1;
} case MENU_PREVMENU:
break; if (do_lua_menu) {
case MENU_LOGOFF: lua_close(L);
if (do_lua_menu) {
lua_close(L);
}
if (lua_script != NULL) {
free(lua_script);
}
if (ansi_file != NULL) {
free(ansi_file);
}
for (i=0;i<menu_items;i++) {
if (menu[i]->data != NULL) {
free(menu[i]->data);
} }
free(menu[i]); if (lua_script != NULL) {
} free(lua_script);
free(menu);
return 1;
case MENU_PREVMENU:
if (do_lua_menu) {
lua_close(L);
}
if (lua_script != NULL) {
free(lua_script);
}
if (ansi_file != NULL) {
free(ansi_file);
}
for (i=0;i<menu_items;i++) {
if (menu[i]->data != NULL) {
free(menu[i]->data);
} }
free(menu[i]); if (ansi_file != NULL) {
} free(ansi_file);
free(menu); }
return 0; for (i=0;i<menu_items;i++) {
case MENU_AUTOMESSAGEWRITE: if (menu[i]->data != NULL) {
automessage_write(gUser); free(menu[i]->data);
break; }
case MENU_TEXTFILES: free(menu[i]);
display_textfiles(); }
break; free(menu);
case MENU_CHATSYSTEM: return 0;
chat_system(gUser); case MENU_AUTOMESSAGEWRITE:
break; automessage_write(gUser);
case MENU_BBSLIST: break;
bbs_list(gUser); case MENU_TEXTFILES:
break; display_textfiles();
case MENU_LISTUSERS: break;
list_users(gUser); case MENU_CHATSYSTEM:
break; chat_system(gUser);
case MENU_BULLETINS: break;
display_bulletins(); case MENU_BBSLIST:
break; bbs_list(gUser);
case MENU_LAST10: break;
display_last10_callers(gUser); case MENU_LISTUSERS:
break; list_users(gUser);
case MENU_SETTINGS: break;
settings_menu(gUser); case MENU_BULLETINS:
break; display_bulletins();
case MENU_DOOR: break;
{ case MENU_LAST10:
for (j=0;j<conf.door_count;j++) { display_last10_callers(gUser);
if (strcasecmp(menu[i]->data, conf.doors[j]->name) == 0) { break;
dolog("%s launched door %s, on node %d", gUser->loginname, conf.doors[j]->name, mynode); case MENU_SETTINGS:
rundoor(gUser, conf.doors[j]->command, conf.doors[j]->stdio); settings_menu(gUser);
dolog("%s returned from door %s, on node %d", gUser->loginname, conf.doors[j]->name, mynode); break;
break; case MENU_DOOR:
} {
} for (j=0;j<conf.door_count;j++) {
} if (strcasecmp(menu[i]->data, conf.doors[j]->name) == 0) {
break; dolog("%s launched door %s, on node %d", gUser->loginname, conf.doors[j]->name, mynode);
case MENU_MAILSCAN: rundoor(gUser, conf.doors[j]->command, conf.doors[j]->stdio);
mail_scan(gUser); dolog("%s returned from door %s, on node %d", gUser->loginname, conf.doors[j]->name, mynode);
break; break;
case MENU_READMAIL: }
read_mail(gUser); }
break; }
case MENU_POSTMESSAGE: break;
post_message(gUser); case MENU_MAILSCAN:
break; mail_scan(gUser);
case MENU_CHOOSEMAILCONF: break;
choose_conference(gUser); case MENU_READMAIL:
break; read_mail(gUser);
case MENU_CHOOSEMAILAREA: break;
choose_area(gUser); case MENU_POSTMESSAGE:
break; post_message(gUser);
case MENU_SENDEMAIL: break;
send_email(gUser); case MENU_CHOOSEMAILCONF:
break; choose_conference(gUser);
case MENU_LISTEMAIL: break;
list_emails(gUser); case MENU_CHOOSEMAILAREA:
break; choose_area(gUser);
case MENU_NEXTMAILCONF: break;
next_mail_conf(gUser); case MENU_SENDEMAIL:
break; send_email(gUser);
case MENU_PREVMAILCONF: break;
prev_mail_conf(gUser); case MENU_LISTEMAIL:
break; list_emails(gUser);
case MENU_NEXTMAILAREA: break;
next_mail_area(gUser); case MENU_NEXTMAILCONF:
break; next_mail_conf(gUser);
case MENU_PREVMAILAREA: break;
prev_mail_area(gUser); case MENU_PREVMAILCONF:
break; prev_mail_conf(gUser);
case MENU_BLUEWAVEDOWN: break;
bwave_create_packet(); case MENU_NEXTMAILAREA:
break; next_mail_area(gUser);
case MENU_BLUEWAVEUP: break;
bwave_upload_reply(); case MENU_PREVMAILAREA:
break; prev_mail_area(gUser);
case MENU_CHOOSEFILEDIR: break;
choose_directory(gUser); case MENU_BLUEWAVEDOWN:
break; bwave_create_packet();
case MENU_CHOOSEFILESUB: break;
choose_subdir(gUser); case MENU_BLUEWAVEUP:
break; bwave_upload_reply();
case MENU_LISTFILES: break;
list_files(gUser); case MENU_CHOOSEFILEDIR:
break; choose_directory(gUser);
case MENU_UPLOAD: break;
if (gUser->sec_level >= conf.file_directories[gUser->cur_file_dir]->file_subs[gUser->cur_file_sub]->upload_sec_level) { case MENU_CHOOSEFILESUB:
upload(gUser); choose_subdir(gUser);
} else { break;
s_printf(get_string(84)); case MENU_LISTFILES:
} list_files(gUser);
break; break;
case MENU_DOWNLOAD: case MENU_UPLOAD:
download(gUser); if (gUser->sec_level >= conf.file_directories[gUser->cur_file_dir]->file_subs[gUser->cur_file_sub]->upload_sec_level) {
break; upload(gUser);
case MENU_CLEARTAGGEDFILES: } else {
clear_tagged_files(); s_printf(get_string(84));
break; }
case MENU_NEXTFILEDIR: break;
next_file_dir(gUser); case MENU_DOWNLOAD:
break; download(gUser);
case MENU_PREVFILEDIR: break;
prev_file_dir(gUser); case MENU_CLEARTAGGEDFILES:
break; clear_tagged_files();
case MENU_NEXTFILESUB: break;
next_file_sub(gUser); case MENU_NEXTFILEDIR:
break; next_file_dir(gUser);
case MENU_PREVFILESUB: break;
prev_file_sub(gUser); case MENU_PREVFILEDIR:
break; prev_file_dir(gUser);
case MENU_LISTMESSAGES: break;
list_messages(gUser); case MENU_NEXTFILESUB:
break; next_file_sub(gUser);
case MENU_DOSCRIPT: break;
do_lua_script(menu[i]->data); case MENU_PREVFILESUB:
break; prev_file_sub(gUser);
break;
case MENU_LISTMESSAGES:
list_messages(gUser);
break;
case MENU_DOSCRIPT:
do_lua_script(menu[i]->data);
break;
}
break;
} }
break;
} }
} }
} }