<div dir="ltr"><br><div>How to call it, the example you gave is what I was looking for, and I&#39;ll put that in.</div><div><br></div><div>If you have an example which is simple ( so I don&#39;t have to figure out what are the relevant parts ) I would like to learn some of this.  The only thing is this is the first C program I&#39;ve written in over 20 years and very likely the last for the next 20, I just don&#39;t have reason to do it.</div>

<div><br></div><div>Robert</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 27, 2014 at 1:29 PM, Alex Carver <span dir="ltr">&lt;<a href="mailto:agcarver+ale@acarver.net" target="_blank">agcarver+ale@acarver.net</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It&#39;s already written as a function definition, you just have to put it<br>
in the file and then call it in your program before the system() call:<br>
<div class=""><br>
int main(int argc, char **argv)<br>
{<br>
   setuid( 662705787 );<br>
<br>
   char Command[512];<br>
</div>   if ( is_5char_alnum(argv[1]) == 1 )<br>
<div class="">   {<br>
        sprintf(Command, &quot;ssh user2@Server2 -C &#39;/home/user2/bin/Test.sh<br>
%s&#39;&quot;, argv[1]);<br>
      system((char *)Command);<br>
   }<br>
</div>   else<br>
   {<br>
     printf(&quot;Bad input\n&quot;);<br>
   }<br>
   return 0;<br>
}<br>
<br>
<br>
Though you really should adjust things to use snprintf() and reparse<br>
argv[] into another variable first to sanitize it before feeding it into<br>
a command.<br>
<div class="HOEnZb"><div class="h5"><br>
On 2014-05-27 11:05, Robert L. Harris wrote:<br>
&gt; How would I tie that in to my program?  I would read it as a function I<br>
&gt; would run once I have my input but before I execute the system command but<br>
&gt; don&#39;t know how to do that in C.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Tue, May 27, 2014 at 11:59 AM, David Tomaschik<br>
&gt; &lt;<a href="mailto:david@systemoverlord.com">david@systemoverlord.com</a>&gt;wrote:<br>
&gt;<br>
&gt;&gt; int is_5char_alnum(char *str) {<br>
&gt;&gt;   /* Returns 1 if 5 char alnum, 0 otherwise. */<br>
&gt;&gt;   int i;<br>
&gt;&gt;   if (!str)<br>
&gt;&gt;     return 0;<br>
&gt;&gt;   for (i=0;i&lt;5;i++) {<br>
&gt;&gt;     if (!((str[i] &gt;= &#39;A&#39; &amp;&amp; str[i] &lt;= &#39;Z&#39;) ||<br>
&gt;&gt;           (str[i] &gt;= &#39;a&#39; &amp;&amp; str[i] &lt;= &#39;a&#39;) ||<br>
&gt;&gt;           (str[i] &gt;= &#39;0&#39; &amp;&amp; str[i] &lt;= &#39;9&#39;)))<br>
&gt;&gt;       return 0;<br>
&gt;&gt;   }<br>
&gt;&gt;   return (str[5] == &#39;\0&#39;)?1:0;<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Tue, May 27, 2014 at 10:37 AM, Robert L. Harris &lt;<br>
&gt;&gt; <a href="mailto:robert.l.harris@gmail.com">robert.l.harris@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Here is what I ended up with from a &quot;get this working&quot; perspective:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; #include &lt;stdio.h&gt;<br>
&gt;&gt;&gt; #include &lt;stdlib.h&gt;<br>
&gt;&gt;&gt; #include &lt;sys/types.h&gt;<br>
&gt;&gt;&gt; #include &lt;unistd.h&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; int main(int argc, char **argv)<br>
&gt;&gt;&gt; {<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    setuid( 662705787 );<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    char Command[512];<br>
&gt;&gt;&gt;     sprintf(Command, &quot;ssh user2@Server2 -C &#39;/home/user2/bin/Test.sh<br>
&gt;&gt;&gt; %s&#39;&quot;, argv[1]);<br>
&gt;&gt;&gt;    system((char *)Command);<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    return 0;<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Given that I have something that works, I need to put the data checks in<br>
&gt;&gt;&gt; for a character length of 5 alpha numeric.  What changes should I make?<br>
&gt;&gt;&gt;  What other &#39;good to do&#39; would anyone suggest?  I need to have this basic<br>
&gt;&gt;&gt; functionality, but I&#39;d like to make it &quot;better&quot; as well but I don&#39;t know C<br>
&gt;&gt;&gt; other than how to do a &quot;gcc&quot; or read very specific examples.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Robert<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Sat, May 24, 2014 at 6:57 AM, Horkan Smith &lt;<a href="mailto:ale@horkan.net">ale@horkan.net</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; You might also want to restrict what a user could do via ssh on the 2nd<br>
&gt;&gt;&gt;&gt; server:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login" target="_blank">http://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login</a><br>


&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="http://www.wallix.org/2011/10/18/restricting-remote-commands-over-ssh/" target="_blank">http://www.wallix.org/2011/10/18/restricting-remote-commands-over-ssh/</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="http://cybermashup.com/2013/05/14/restrict-ssh-logins-to-a-single-command/" target="_blank">http://cybermashup.com/2013/05/14/restrict-ssh-logins-to-a-single-command/</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; later!<br>
&gt;&gt;&gt;&gt;    horkan<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Thu, May 22, 2014 at 05:37:32PM -0600, Robert L. Harris wrote:<br>
&gt;&gt;&gt;&gt;&gt; The reason for the &quot;system&quot; is just to see what value I&#39;m getting out.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I have a perl script doing a bunch of processing which will be run by a<br>
&gt;&gt;&gt;&gt;&gt; couple different users.  One aspect of the perl script is to connect to<br>
&gt;&gt;&gt;&gt;&gt; another machine and run a command as a specific user.  Instead of<br>
&gt;&gt;&gt;&gt; having<br>
&gt;&gt;&gt;&gt;&gt; others know the passwd, etc.  I have a hostkey set up from my server<br>
&gt;&gt;&gt;&gt; as a<br>
&gt;&gt;&gt;&gt;&gt; non-privledged user to another system.  I want to have the C program<br>
&gt;&gt;&gt;&gt; setuid<br>
&gt;&gt;&gt;&gt;&gt; to the non-privledged user, ssh to the second server and run 1 command<br>
&gt;&gt;&gt;&gt; with<br>
&gt;&gt;&gt;&gt;&gt; the only variable being XXXXX.  More convoluted than I want but the<br>
&gt;&gt;&gt;&gt; safest<br>
&gt;&gt;&gt;&gt;&gt; method I can come up with to get just the output I need from the second<br>
&gt;&gt;&gt;&gt;&gt; server.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Thu, May 22, 2014 at 5:31 PM, Ed Cashin &lt;<a href="mailto:ecashin@noserose.net">ecashin@noserose.net</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; In general, with this kind of stuff, you want to avoid using the<br>
&gt;&gt;&gt;&gt;&gt;&gt; shell, so no use of &quot;system&quot; or other library calls that implicitly<br>
&gt;&gt;&gt;&gt;&gt;&gt; run a shell.  The reason is that most programmers cannot anticipate<br>
&gt;&gt;&gt;&gt;&gt;&gt; all the corner cases that allow unexpected things to happen when you<br>
&gt;&gt;&gt;&gt;&gt;&gt; run a shell from your C program based on user data.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; But this extra information is making me less certain that I&#39;m coming<br>
&gt;&gt;&gt;&gt;&gt;&gt; up with the best feedback.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Does it happen to be the case that you&#39;re using C because you want to<br>
&gt;&gt;&gt;&gt;&gt;&gt; create an executable that you will make setuid root?<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; On Thu, May 22, 2014 at 7:12 PM, Robert L. Harris<br>
&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:robert.l.harris@gmail.com">robert.l.harris@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; My main goal is to make sure someone doesn&#39;t run this command and<br>
&gt;&gt;&gt;&gt; pass it<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; somethign like :     &quot;15361; rm -rf ~/*&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; I will need another version where XXXXX can be any alpha-numeric<br>
&gt;&gt;&gt;&gt;&gt;&gt; character<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; too but the main concern is the moron doing something stupid.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Robert<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Thu, May 22, 2014 at 4:40 PM, Ed Cashin &lt;<a href="mailto:ecashin@noserose.net">ecashin@noserose.net</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I&#39;m not at a keyboard now, but strtol could do it all if you<br>
&gt;&gt;&gt;&gt; provide a<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; non-NULL end pointer. (That will make sense on reading the strtol<br>
&gt;&gt;&gt;&gt; man<br>
&gt;&gt;&gt;&gt;&gt;&gt; page.)<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Just subtract the end from the start and compare to 5,after<br>
&gt;&gt;&gt;&gt; specifying<br>
&gt;&gt;&gt;&gt;&gt;&gt; base<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ten.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On May 22, 2014 6:17 PM, &quot;Robert L. Harris&quot; &lt;<br>
&gt;&gt;&gt;&gt; <a href="mailto:robert.l.harris@gmail.com">robert.l.harris@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Anyone have a very simple C program source that given a command<br>
&gt;&gt;&gt;&gt; of :<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ./Validate XXXXX<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; it will verify that XXXXX is a 5 digit integer and then execute<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; system( &quot;/bin/touch XXXXX&quot;);<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; There&#39;s much more to it but I&#39;m hung up on this.  Unfortunately<br>
&gt;&gt;&gt;&gt; I&#39;m<br>
&gt;&gt;&gt;&gt;&gt;&gt; not a<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; C person.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Robert<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
<br>
</div></div><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Ale mailing list<br>
<a href="mailto:Ale@ale.org">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
See JOBS, ANNOUNCE and SCHOOLS lists at<br>
<a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>:wq!<br>---------------------------------------------------------------------------<br>Robert L. Harris<br><br>DISCLAIMER:<br>      These are MY OPINIONS             With Dreams To Be A King,<br>

       ALONE.  I speak for                      First One Should Be A Man<br>       no-one else.                                     - Manowar
</div>