]> git.saurik.com Git - apt.git/blobdiff - methods/ftp.cc
support running "--simulate" as user
[apt.git] / methods / ftp.cc
index cc2f1395d92bfdbffa3155594139ea43db8e091b..554a24cf52c52c19a7ca11a23477a61b934d7bc3 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: ftp.cc,v 1.30 2003/02/10 07:34:41 doogie Exp $
+// $Id: ftp.cc,v 1.31.2.1 2004/01/16 18:58:50 mdz Exp $
 /* ######################################################################
 
    FTP Aquire Method - This is the FTP aquire method for APT.
@@ -15,7 +15,6 @@
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#include <apti18n.h>
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/acquire-method.h>
 #include <apt-pkg/error.h>
@@ -30,6 +29,7 @@
 #include <errno.h>
 #include <stdarg.h>
 #include <iostream>
+#include <apti18n.h>
 
 // Internet stuff
 #include <netinet/in.h>
@@ -201,7 +201,7 @@ bool FTPConn::Login()
       if (ReadResp(Tag,Msg) == false)
         return false;
       if (Tag >= 400)
-        return _error->Error(_("Server refused our connection and said: %s"),Msg.c_str());
+        return _error->Error(_("The server refused the connection and said: %s"),Msg.c_str());
       
       // Send the user
       if (WriteMsg(Tag,Msg,"USER %s",User.c_str()) == false)
@@ -209,11 +209,13 @@ bool FTPConn::Login()
       if (Tag >= 400)
         return _error->Error(_("USER failed, server said: %s"),Msg.c_str());
       
-      // Send the Password
-      if (WriteMsg(Tag,Msg,"PASS %s",Pass.c_str()) == false)
-        return false;
-      if (Tag >= 400)
-        return _error->Error(_("PASS failed, server said: %s"),Msg.c_str());
+      if (Tag == 331) { // 331 User name okay, need password.
+         // Send the Password
+         if (WriteMsg(Tag,Msg,"PASS %s",Pass.c_str()) == false)
+            return false;
+         if (Tag >= 400)
+            return _error->Error(_("PASS failed, server said: %s"),Msg.c_str());
+      }
       
       // Enter passive mode
       if (_config->Exists("Acquire::FTP::Passive::" + ServerName.Host) == true)
@@ -227,7 +229,7 @@ bool FTPConn::Login()
       if (ReadResp(Tag,Msg) == false)
         return false;
       if (Tag >= 400)
-        return _error->Error(_("Server refused our connection and said: %s"),Msg.c_str());
+        return _error->Error(_("The server refused the connection and said: %s"),Msg.c_str());
       
       // Perform proxy script execution
       Configuration::Item const *Opts = _config->Tree("Acquire::ftp::ProxyLogin");
@@ -441,7 +443,7 @@ bool FTPConn::WriteMsg(unsigned int &Ret,string &Text,const char *Fmt,...)
       int Res = write(ServerFd,S + Start,Len);
       if (Res <= 0)
       {
-        _error->Errno("write",_("Write Error"));
+        _error->Errno("write",_("Write error"));
         Close();
         return false;
       }
@@ -1053,9 +1055,12 @@ bool FtpMethod::Fetch(FetchItem *Itm)
         UBuf.modtime = FailTime;
         utime(FailFile.c_str(),&UBuf);
         
-        // If the file is missing we hard fail otherwise transient fail
-        if (Missing == true)
+        // If the file is missing we hard fail and delete the destfile
+        // otherwise transient fail
+        if (Missing == true) {
+           unlink(FailFile.c_str());
            return false;
+        }
         Fail(true);
         return true;
       }
@@ -1081,6 +1086,8 @@ bool FtpMethod::Fetch(FetchItem *Itm)
 
 int main(int argc,const char *argv[])
 { 
+   setlocale(LC_ALL, "");
+
    /* See if we should be come the http client - we do this for http
       proxy urls */
    if (getenv("ftp_proxy") != 0)
@@ -1094,11 +1101,11 @@ int main(int argc,const char *argv[])
         char S[300];
         snprintf(S,sizeof(S),"http_proxy=%s",getenv("ftp_proxy"));
         putenv(S);
-        putenv("no_proxy=");
+        putenv((char *)"no_proxy=");
         
         // Run the http method
         string Path = flNotFile(argv[0]) + "http";
-        execl(Path.c_str(),Path.c_str(),0);
+        execl(Path.c_str(),Path.c_str(),(char *)NULL);
         cerr << _("Unable to invoke ") << Path << endl;
         exit(100);
       }