Mercurial > dropbear
changeset 1235:11f645c3715b
allow specifying dropbearmulti command as an argument
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 10 Mar 2016 21:35:23 +0800 |
parents | 32cdbbe4b67e |
children | 428d83f2e5db |
files | dbmulti.c |
diffstat | 1 files changed, 22 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/dbmulti.c Thu Mar 10 20:57:47 2016 +0800 +++ b/dbmulti.c Thu Mar 10 21:35:23 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