Telnet URL handler, part 3

Philip continues to play devil’s advocate / script kiddie for my telnet URL handler. My input checker allowed host/port definitions to begin with a hyphen character. That’s an invalid domain name, so I ignored the possibility that someone might try it. Philip used it to pass a switch to the telnet/ssh command.

Here is attempt number 3, now with more complicated regular expressions:

#!/usr/bin/perl
# parse URL
($protocol,$host) = split /:\/\//, $ARGV[0];
($host,$port) = split /:/, $host;

# validate input
if ( $protocol !~ /^(telnet|ssh)$/ ||
   $host !~ /^[a-zA-Z0-9][a-zA-Z0-9.-]*$/ ||
   $port !~ /(^[a-zA-Z0-9][a-zA-Z0-9_-]*$|^$)/ ) {
        warn "Invalid URL";
        exit 1;
}

# if SSH, add -p argument
if ( $protocol eq "ssh" && $port != '' ) { $port = "-p $port" ; }

# call terminal emulator
exec("konsole --hold -e $protocol $host $port");
exit;

Your move, sir.

You can download an updated url-terminal script here. You can read the post that started this here.

Tags: , ,

  1. Stocky’s avatar

    Its not entirely clear to me what your use case here is, but when you’re execing with elevated privileges you normally want to specify your binaries by a full path, otherwise I can put a ‘konsole’ script in my path ahead of the real binary. Same with ssh and telnet.

    Looks good!

    Reply

    1. tyler’s avatar

      My intention is to protect against mal-formed URLs. If the user has a local script named konsole, ssh, or telnet, that’s his own problem. :)

      Reply

  2. Stocky’s avatar

    Ah, fair enough. I should check older posts before I speak. :)

    Reply

  3. Philip’s avatar

    I’m officially declaring the script bug-free, and waiting to be proved wrong ;)

    Reply

    1. tyler’s avatar

      That endorsement is totally going in the source code. It’s all your fault now!

      Reply

    2. tyler’s avatar

      And seriously, thanks for the help. I learned some things.

      Reply

Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>