diff options
| author | Franklin Wei <git@fwei.tk> | 2016-01-26 20:46:27 -0500 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2016-01-26 20:46:27 -0500 |
| commit | aac76c84d5c2c9f68c16ed1a7dfeb98d200e3a30 (patch) | |
| tree | 634275773e69a1a49aaa12207593f3d8336489a6 /src | |
| parent | 0a3939a5ac30a0707ef33e971c4881b34b463c43 (diff) | |
| download | netcosm-aac76c84d5c2c9f68c16ed1a7dfeb98d200e3a30.zip netcosm-aac76c84d5c2c9f68c16ed1a7dfeb98d200e3a30.tar.gz netcosm-aac76c84d5c2c9f68c16ed1a7dfeb98d200e3a30.tar.bz2 netcosm-aac76c84d5c2c9f68c16ed1a7dfeb98d200e3a30.tar.xz | |
add some very basic command-line parsing
Diffstat (limited to 'src')
| -rw-r--r-- | src/server.c | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/src/server.c b/src/server.c index e67fa20..3b428d3 100644 --- a/src/server.c +++ b/src/server.c @@ -24,7 +24,7 @@ #include "userdb.h" #include "util.h" -#define PORT 1234 +#define DEFAULT_PORT 1234 #define BACKLOG 512 /* global data */ @@ -35,7 +35,7 @@ void *child_map = NULL; volatile int num_clients = 0; /* local data */ -static uint16_t port; +static uint16_t port = DEFAULT_PORT; static int server_socket; @@ -144,10 +144,18 @@ static void __attribute__((noreturn)) sigint_handler(int s) exit(0); } +static bool autoconfig = false; +const char *autouser, *autopass; + static void check_userfile(void) { if(access(USERFILE, F_OK) < 0 || userdb_size() == 0) - first_run_setup(); + { + if(!autoconfig) + first_run_setup(); + else + auth_user_add(autouser, autopass, PRIV_ADMIN); + } if(access(USERFILE, R_OK | W_OK) < 0) error("cannot access "USERFILE); @@ -330,6 +338,40 @@ static void init_signals(void) error("sigaction"); } +static void parse_args(int argc, char *argv[]) +{ + for(int i = 1; i < argc; ++i) + { + if(argv[i][0] == '-') + { + if(strlen(argv[i]) > 1) + { + char c = argv[i][1]; + retry: + switch(c) + { + case 'h': /* help */ + debugf("FIXME: usage message"); + exit(0); + case 'a': /* automatic first-run config */ + autoconfig = true; + autouser = argv[++i]; + autopass = argv[++i]; + break; + case 'd': /* set data prefix */ + chdir(argv[++i]); + break; + default: + c = 'h'; + goto retry; + } + } + } + else + port = strtol(argv[i], NULL, 10); + } +} + static SIMP_HASH(pid_t, pid_hash); static SIMP_EQUAL(pid_t, pid_equal); @@ -341,10 +383,7 @@ int server_main(int argc, char *argv[]) assert(ev_version_major() == EV_VERSION_MAJOR && ev_version_minor() >= EV_VERSION_MINOR); - if(argc != 2) - port = PORT; - else - port = strtol(argv[1], NULL, 0); + parse_args(argc, argv); srand(time(0)); |