diff options
| author | Franklin Wei <git@fwei.tk> | 2015-05-24 20:43:27 -0400 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2015-05-24 20:43:27 -0400 |
| commit | 5b23089915079c634d260aa01d8eff1dd025fa31 (patch) | |
| tree | b5a37481fc0170712ffb55c280d13ff738c0a4dc /src | |
| parent | b307e719416e39ed525a1c51d7df61ae55b35eec (diff) | |
| download | market-sim-5b23089915079c634d260aa01d8eff1dd025fa31.zip market-sim-5b23089915079c634d260aa01d8eff1dd025fa31.tar.gz market-sim-5b23089915079c634d260aa01d8eff1dd025fa31.tar.bz2 market-sim-5b23089915079c634d260aa01d8eff1dd025fa31.tar.xz | |
enable restricted mode
Diffstat (limited to 'src')
| -rw-r--r-- | src/globals.h | 29 | ||||
| -rw-r--r-- | src/help.c | 4 | ||||
| -rw-r--r-- | src/load.c | 5 | ||||
| -rw-r--r-- | src/main.c | 10 | ||||
| -rw-r--r-- | src/save.c | 5 | ||||
| -rw-r--r-- | src/util.c | 27 |
6 files changed, 64 insertions, 16 deletions
diff --git a/src/globals.h b/src/globals.h index 0dbd723..bf37e8b 100644 --- a/src/globals.h +++ b/src/globals.h @@ -15,7 +15,7 @@ #include <unistd.h> #include <curl/curl.h> -#include <ncurses.h> +#include <curses.h> #define ARRAYLEN(x) (sizeof(x) / sizeof(x[0])) @@ -26,6 +26,8 @@ #define ARG_FAILURE (1<<1) #define ARG_VERBOSE (1<<2) #define ARG_NOCURSES (1<<3) +#define ARG_BATCHMODE (1<<4) +#define ARG_RESTRICTED (1<<5) /* don't change this, it will corrupt existing saves */ #define EPOCH_YEAR 2000 @@ -93,13 +95,22 @@ struct command_t { extern bool have_color; -void do_menu(struct player_t*, const struct command_t*, uint, const char*); +/* restricted mode disables things that would be considered "dangerous" when + used in a web-facing script such as interactive loading/saving */ +extern bool restricted; + +#define COL_NORM 0 +#define COL_RED 1 +#define COL_GREEN 2 + bool get_stock_info(char *sym, struct money_t*, char **name); -char *csv_read(char**); char *(*read_string)(void); +char *csv_read(char**); char *read_ticker(void); +extern int (*output)(const char*, ...); +extern void (*heading)(const char *text, ...); +extern void (*horiz_line)(void); int compare_stocks(const void*, const void*); -void fail(const char*, ...);; struct stock_t *find_stock(struct player_t*, char*); uint parse_args(int argc, char *argv[], char**); uint16_t to_be16(uint16_t); @@ -112,20 +123,16 @@ ullong read_int(void); void add_hist(struct stock_t*, enum history_action, ullong count); void all_lower(char*); void all_upper(char*); +void batch_init(void); void cleanup(void); void curses_init(void); +void do_menu(struct player_t*, const struct command_t*, uint, const char*); +void fail(const char*, ...);; void load_portfolio(struct player_t*, const char*); void print_history(struct stock_t*); void print_usage(int argc, char *argv[]); void print_version(void); void sig_handler(int); -extern int (*output)(const char*, ...); -extern void (*heading)(const char *text, ...); -extern void (*horiz_line)(void); - -#define COL_NORM 0 -#define COL_RED 1 -#define COL_GREEN 2 void use_color(int); void stop_color(int); @@ -5,11 +5,13 @@ void print_usage(int argc, char *argv[]) assert(argc > 1); output("Usage: %s [OPTION] [PORTFOLIO]\n", argv[0]); - output("Runs a simulated trading session with PORTFOLIO (creating a new one by default).\n\n"); + output("Runs a interactive trading session with PORTFOLIO or create a new portfolio.\n\n"); output("Options:\n"); + output(" --batch\tEnables batch operation, taking commands from standard input\n"); output(" -h, --help\tShow this help and exit\n"); output(" --nocurses\tOperate without curses\n"); + output(" -r, --restrict\tOperate in restricted mode, suitable for use as a CGI program\n"); output(" -v, --verbose\tEnable verbose operation\n"); output(" --version\tOutput version information and exit\n"); } @@ -179,6 +179,11 @@ void load_portfolio(struct player_t *player, const char *filename) void load_handler(struct player_t *player) { + if(restricted) + { + output("Forbidden.\n"); + return; + } output("Enter the file to load portfolio from: "); char *filename = read_string(); @@ -1,5 +1,7 @@ #include "globals.h" +bool restricted = false; + /*** utility functions ***/ void quit_handler(struct player_t *player) @@ -20,9 +22,12 @@ int main(int argc, char *argv[]) uint args_status = parse_args(argc, argv, save_file_p); - if(!(args_status & ARG_NOCURSES)) + if(!(args_status & ARG_NOCURSES) && !(args_status & ARG_BATCHMODE)) curses_init(); + if(args_status & ARG_BATCHMODE) + batch_init(); + atexit(cleanup); const struct sigaction handler = { @@ -36,6 +41,9 @@ int main(int argc, char *argv[]) if(args_status & ARG_FAILURE) return EXIT_FAILURE; + if(args_status & ARG_RESTRICTED) + restricted = true; + if(args_status & ARG_LOADED) load_portfolio(player, save_file); else @@ -65,6 +65,11 @@ size_t ck_write(const char *buf, size_t sz, size_t nmemb, FILE *f) void save_handler(struct player_t *player) { + if(restricted) + { + output("Forbidden.\n"); + return; + } output("Enter the file to save your portfolio in: "); char *filename = read_string(); @@ -302,8 +302,12 @@ uint parse_args(int argc, char *argv[], char **port_file) { if(arg[0] == '-') { - if(strcmp(arg, "--help") == 0 || - strcmp(arg, "-h") == 0) + if(strcmp(arg, "--batch") == 0) + { + ret |= ARG_BATCHMODE; + } + else if(strcmp(arg, "--help") == 0 || + strcmp(arg, "-h") == 0) { print_usage(argc, argv); ret |= ARG_FAILURE; @@ -313,6 +317,11 @@ uint parse_args(int argc, char *argv[], char **port_file) { ret |= ARG_NOCURSES; } + else if(strcmp(arg, "-r") == 0 || + strcmp(arg, "--restrict") == 0) + { + ret |= ARG_RESTRICTED; + } else if(strcmp(arg, "-v") == 0 || strcmp(arg, "--verbose") == 0) { @@ -330,7 +339,8 @@ uint parse_args(int argc, char *argv[], char **port_file) } else { - output("Unrecognized option '%s'\nTry %s --help for more information.\n", arg, argv[0]); + output("Unrecognized option '%s'\n", arg, argv[0]); + print_usage(argc, argv); ret |= ARG_FAILURE; } } @@ -505,3 +515,14 @@ void curses_init(void) have_color = false; } } + +int dummy_output(const char* f, ...) +{ + (void) f; + return 0; +} + +void batch_init(void) +{ + output = dummy_output; +} |