Mercurial > dropbear
diff dbmulti.c @ 1256:506f7681d0f8 coverity
merge up to date
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 15 Mar 2016 22:45:43 +0800 |
parents | 11f645c3715b |
children | 0dcc5b0d93fa |
line wrap: on
line diff
--- a/dbmulti.c Tue Dec 15 22:24:34 2015 +0800 +++ b/dbmulti.c Tue Mar 15 22:45:43 2016 +0800 @@ -26,17 +26,13 @@ /* definitions are cleanest if we just put them here */ int dropbear_main(int argc, char ** argv); +int cli_main(int argc, char ** argv); int dropbearkey_main(int argc, char ** argv); int dropbearconvert_main(int argc, char ** argv); int scp_main(int argc, char ** argv); -int main(int argc, char ** argv) { - - char * progname; - - if (argc > 0) { - /* figure which form we're being called as */ - progname = basename(argv[0]); +static int runprog(const char *progname, int argc, char ** argv, int *match) { + *match = DROPBEAR_SUCCESS; #ifdef DBMULTI_dropbear if (strcmp(progname, "dropbear") == 0) { @@ -64,10 +60,28 @@ return scp_main(argc, argv); } #endif + *match = DROPBEAR_FAILURE; + return 1; +} + +int main(int argc, char ** argv) { + int i; + for (i = 0; i < 2; i++) { + /* Try symlink first, then try as an argument eg "dropbearmulti dbclient host ..." */ + if (argc > i) { + int match, res; + /* figure which form we're being called as */ + const char* progname = basename(argv[i]); + res = runprog(progname, argc-i, &argv[i], &match); + if (match == DROPBEAR_SUCCESS) { + return res; + } + } } fprintf(stderr, "Dropbear SSH multi-purpose v%s\n" - "Make a symlink pointing at this binary with one of the following names:\n" + "Make a symlink pointing at this binary with one of the\n" + "following names or run 'dropbearmulti <command>'.\n" #ifdef DBMULTI_dropbear "'dropbear' - the Dropbear server\n" #endif