Просмотр исходного кода

support setting a port for rsh:// in sources.list

[Commiter comment: Untested, but looks and compiles fine, so what could
possibly go wrong]

Closes: 624727
Daniel Hartwig лет назад: 11
Родитель
Сommit
c7872a2c85
2 измененных файлов с 21 добавлено и 2 удалено
  1. 20 2
      methods/rsh.cc
  2. 1 0
      methods/rsh.h

+ 20 - 2
methods/rsh.cc

@@ -84,7 +84,7 @@ bool RSHConn::Open()
    if (Process != -1)
       return true;
 
-   if (Connect(ServerName.Host,ServerName.User) == false)
+   if (Connect(ServerName.Host,ServerName.Port,ServerName.User) == false)
       return false;
 
    return true;
@@ -93,8 +93,15 @@ bool RSHConn::Open()
 // RSHConn::Connect - Fire up rsh and connect				/*{{{*/
 // ---------------------------------------------------------------------
 /* */
-bool RSHConn::Connect(std::string Host, std::string User)
+bool RSHConn::Connect(std::string Host, unsigned int Port, std::string User)
 {
+   char *PortStr = NULL;
+   if (Port != 0)
+   {
+      if (asprintf (&PortStr, "%d", Port) == -1 || PortStr == NULL)
+         return _error->Errno("asprintf", _("Failed"));
+   }
+
    // Create the pipes
    int Pipes[4] = {-1,-1,-1,-1};
    if (pipe(Pipes) != 0 || pipe(Pipes+2) != 0)
@@ -140,6 +147,10 @@ bool RSHConn::Connect(std::string Host, std::string User)
          Args[i++] = "-l";
 	 Args[i++] = User.c_str();
       }
+      if (PortStr != NULL) {
+         Args[i++] = "-p";
+         Args[i++] = PortStr;
+      }
       if (Host.empty() == false) {
          Args[i++] = Host.c_str();
       }
@@ -149,6 +160,9 @@ bool RSHConn::Connect(std::string Host, std::string User)
       exit(100);
    }
 
+   if (PortStr != NULL)
+      free(PortStr);
+
    ReadFd = Pipes[0];
    WriteFd = Pipes[3];
    SetNonBlock(Pipes[0],true);
@@ -157,6 +171,10 @@ bool RSHConn::Connect(std::string Host, std::string User)
    close(Pipes[2]);
    
    return true;
+}
+bool RSHConn::Connect(std::string Host, std::string User)
+{
+   return Connect(Host, 0, User);
 }
 									/*}}}*/
 // RSHConn::ReadLine - Very simple buffered read with timeout		/*{{{*/

+ 1 - 0
methods/rsh.h

@@ -36,6 +36,7 @@ class RSHConn
    // Raw connection IO
    bool WriteMsg(std::string &Text,bool Sync,const char *Fmt,...);
    bool Connect(std::string Host, std::string User);
+   bool Connect(std::string Host, unsigned int Port, std::string User);
    bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;};
 
    // Connection control