<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 &gt; 0) {</div><div style="font-family:arial,sans-serif;font-size:13px">-<span style="white-space:pre-wrap">                </span>/* figure which form we&#39;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 &gt; 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 &lt; 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 &gt; 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&#39;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, &quot;%s %s&quot;, 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, &quot;dropbear&quot;) == 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 &amp;&amp; argc &gt; 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, &quot;Dropbear SSH multi-purpose v%s\n&quot;</div><div style="font-family:arial,sans-serif;font-size:13px">
-<span style="white-space:pre-wrap">                        </span>&quot;Make a symlink pointing at this binary with one of the following names:\n&quot;</div><div style="font-family:arial,sans-serif;font-size:13px">+<span style="white-space:pre-wrap">                        </span>&quot;Make a symlink pointing at this binary&quot;</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>&quot;, or pass a name to it as the first parameter,&quot;</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>&quot; with one of the following names:\n&quot;</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>&quot;&#39;dropbear&#39; - the Dropbear server\n&quot;</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 &lt;options here&gt;</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 &lt;options here&gt;</div><div style="font-family:arial,sans-serif;font-size:13px">
+./dropbearmulti dbclient &lt;options here&gt;</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">
�&quot;make install&quot; doesn&#39;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 &quot;22&quot;</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 &quot;&quot;</div></div>