<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px">This patch adds support for calling dropbearmulti with a program name as its *first* parameter.</div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px">This enables use of dropbearmulti without any symlinks. The following are examples of where this can be useful:</div><div style="font-family:arial,sans-serif;font-size:13px">
1) on file systems which do not support symlinks (FAT for example)</div><div style="font-family:arial,sans-serif;font-size:13px">2) for convenience; needing only one file</div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px">Enjoy</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">=============================</div>
<div style="font-family:arial,sans-serif;font-size:13px">diff -u a/dbmulti.c b/dbmulti.c</div><div style="font-family:arial,sans-serif;font-size:13px">--- a/dbmulti.c</div><div style="font-family:arial,sans-serif;font-size:13px">
+++ b/dbmulti.c</div><div style="font-family:arial,sans-serif;font-size:13px">@@ -33,10 +33,33 @@</div><div style="font-family:arial,sans-serif;font-size:13px">�int main(int argc, char ** argv) {</div><div style="font-family:arial,sans-serif;font-size:13px">
�</div><div style="font-family:arial,sans-serif;font-size:13px">�<span style="white-space:pre-wrap">        </span>char * progname;</div><div style="font-family:arial,sans-serif;font-size:13px">+#ifdef DROPBEARMULTI_ARG1</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">        </span>int arg1;</div><div style="font-family:arial,sans-serif;font-size:13px">+#endif</div><div style="font-family:arial,sans-serif;font-size:13px">�</div><div style="font-family:arial,sans-serif;font-size:13px">
-<span style="white-space:pre-wrap">        </span>if (argc > 0) {</div><div style="font-family:arial,sans-serif;font-size:13px">-<span style="white-space:pre-wrap">                </span>/* figure which form we're being called as */</div>
<div style="font-family:arial,sans-serif;font-size:13px">-<span style="white-space:pre-wrap">                </span>progname = basename(argv[0]);</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">        </span>if (argc > 0�</div>
<div style="font-family:arial,sans-serif;font-size:13px">+#ifdef DROPBEARMULTI_ARG1</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>|| argc < 0</div><div style="font-family:arial,sans-serif;font-size:13px">
+#endif</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                </span>) {</div><div style="font-family:arial,sans-serif;font-size:13px">+#ifdef DROPBEARMULTI_ARG1</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">                </span>if (argc > 0) {</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>arg1 = 0;</div><div style="font-family:arial,sans-serif;font-size:13px">
+#endif</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>/* figure which form we're being called as */</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">                        </span>progname = basename(argv[0]);</div><div style="font-family:arial,sans-serif;font-size:13px">+#ifdef DROPBEARMULTI_ARG1</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">                </span>} else {</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>char buf[64];</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">                        </span>arg1 = -1;</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>progname = argv[1];</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">                        </span>snprintf(buf, sizeof buf, "%s %s", argv[0], progname); /* this appears in usages, maybe should just use original argv0 if needed by a sub-program */</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">                        </span>argv[1] = buf; /* new argv[0] */</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>argv += 1;</div><div style="font-family:arial,sans-serif;font-size:13px">
+<span style="white-space:pre-wrap">                        </span>argc = -argc; /* restore argc to pre-signaling state */</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>argc -= 1;</div>
<div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                </span>}</div><div style="font-family:arial,sans-serif;font-size:13px">+#endif</div><div style="font-family:arial,sans-serif;font-size:13px">
�</div><div style="font-family:arial,sans-serif;font-size:13px">�#ifdef DBMULTI_dropbear</div><div style="font-family:arial,sans-serif;font-size:13px">�<span style="white-space:pre-wrap">                </span>if (strcmp(progname, "dropbear") == 0) {</div>
<div style="font-family:arial,sans-serif;font-size:13px">@@ -66,8 +89,19 @@</div><div style="font-family:arial,sans-serif;font-size:13px">�#endif</div><div style="font-family:arial,sans-serif;font-size:13px">�<span style="white-space:pre-wrap">        </span>}</div>
<div style="font-family:arial,sans-serif;font-size:13px">�</div><div style="font-family:arial,sans-serif;font-size:13px">+#ifdef DROPBEARMULTI_ARG1</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">        </span>if (!arg1 && argc > 1) { /* matched none of the prognames, has args on cmdline */</div>
<div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                </span>argc = -argc; /* negate argc as signal */</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                </span>return main(argc, argv);</div>
<div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">        </span>}</div><div style="font-family:arial,sans-serif;font-size:13px">+#endif</div><div style="font-family:arial,sans-serif;font-size:13px">
+</div><div style="font-family:arial,sans-serif;font-size:13px"><span style="white-space:pre-wrap">        </span>fprintf(stderr, "Dropbear SSH multi-purpose v%s\n"</div><div style="font-family:arial,sans-serif;font-size:13px">
-<span style="white-space:pre-wrap">                        </span>"Make a symlink pointing at this binary with one of the following names:\n"</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>"Make a symlink pointing at this binary"</div>
<div style="font-family:arial,sans-serif;font-size:13px">+#ifdef DROPBEARMULTI_ARG1</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>", or pass a name to it as the first parameter,"</div>
<div style="font-family:arial,sans-serif;font-size:13px">+#endif</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>" with one of the following names:\n"</div>
<div style="font-family:arial,sans-serif;font-size:13px">�#ifdef DBMULTI_dropbear</div><div style="font-family:arial,sans-serif;font-size:13px">�<span style="white-space:pre-wrap">                        </span>"'dropbear' - the Dropbear server\n"</div>
<div style="font-family:arial,sans-serif;font-size:13px">�#endif</div><div style="font-family:arial,sans-serif;font-size:13px">diff -u a/MULTI b/MULTI</div><div style="font-family:arial,sans-serif;font-size:13px">--- a/MULTI</div>
<div style="font-family:arial,sans-serif;font-size:13px">+++ b/MULTI</div><div style="font-family:arial,sans-serif;font-size:13px">@@ -21,6 +21,12 @@</div><div style="font-family:arial,sans-serif;font-size:13px">�</div><div style="font-family:arial,sans-serif;font-size:13px">
�./dropbear <options here></div><div style="font-family:arial,sans-serif;font-size:13px">�</div><div style="font-family:arial,sans-serif;font-size:13px">+Alternatively, call dropbearmulti with the name of an executable as its first argument (if this option was chosen):</div>
<div style="font-family:arial,sans-serif;font-size:13px">+</div><div style="font-family:arial,sans-serif;font-size:13px">+./dropbearmulti dropbear <options here></div><div style="font-family:arial,sans-serif;font-size:13px">
+./dropbearmulti dbclient <options here></div><div style="font-family:arial,sans-serif;font-size:13px">+etc</div><div style="font-family:arial,sans-serif;font-size:13px">+</div><div style="font-family:arial,sans-serif;font-size:13px">
�"make install" doesn't currently work for multi-binary configuration, though</div><div style="font-family:arial,sans-serif;font-size:13px">�in most situations where it is being used, the target and build systems will</div>
<div style="font-family:arial,sans-serif;font-size:13px">�differ.</div><div style="font-family:arial,sans-serif;font-size:13px">diff -u a/options.h b/options.h</div><div style="font-family:arial,sans-serif;font-size:13px">
--- a/options.h</div><div style="font-family:arial,sans-serif;font-size:13px">+++ b/options.h</div><div style="font-family:arial,sans-serif;font-size:13px">@@ -14,6 +14,11 @@</div><div style="font-family:arial,sans-serif;font-size:13px">
�#define DROPBEAR_DEFPORT "22"</div><div style="font-family:arial,sans-serif;font-size:13px">�#endif</div><div style="font-family:arial,sans-serif;font-size:13px">�</div><div style="font-family:arial,sans-serif;font-size:13px">
+#ifndef DROPBEARMULTI_ARG1</div><div style="font-family:arial,sans-serif;font-size:13px">+/* Dropbearmulti program invocation via argv1 */</div><div style="font-family:arial,sans-serif;font-size:13px">+#define DROPBEARMULTI_ARG1</div>
<div style="font-family:arial,sans-serif;font-size:13px">+#endif</div><div style="font-family:arial,sans-serif;font-size:13px">+</div><div style="font-family:arial,sans-serif;font-size:13px">�#ifndef DROPBEAR_DEFADDRESS</div>
<div style="font-family:arial,sans-serif;font-size:13px">�/* Listen on all interfaces */</div><div style="font-family:arial,sans-serif;font-size:13px">�#define DROPBEAR_DEFADDRESS ""</div></div>