]> git.saurik.com Git - apt.git/blobdiff - methods/ftp.cc
all errors should be printed to stderr
[apt.git] / methods / ftp.cc
index 2d05364d5849d6bc340a387f369c136bf2e569cb..ac76295f02ef1342e00dc7a0e9aac52fa38a77a5 100644 (file)
@@ -3,7 +3,7 @@
 // $Id: ftp.cc,v 1.31.2.1 2004/01/16 18:58:50 mdz 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.
+   FTP Acquire Method - This is the FTP acquire method for APT.
 
    This is a very simple implementation that does not try to optimize
    at all. Commands are sent syncronously with the FTP server (as the
 
    This is a very simple implementation that does not try to optimize
    at all. Commands are sent syncronously with the FTP server (as the
 #include <apt-pkg/hashes.h>
 #include <apt-pkg/netrc.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/hashes.h>
 #include <apt-pkg/netrc.h>
 #include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
 
 
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <unistd.h>
@@ -42,6 +46,7 @@
 #include "rfc2553emu.h"
 #include "connect.h"
 #include "ftp.h"
 #include "rfc2553emu.h"
 #include "connect.h"
 #include "ftp.h"
+
 #include <apti18n.h>
                                                                        /*}}}*/
 
 #include <apti18n.h>
                                                                        /*}}}*/
 
@@ -56,9 +61,9 @@ struct AFMap
 };
 
 #ifndef AF_INET6
 };
 
 #ifndef AF_INET6
-struct AFMap AFMap[] = {{AF_INET,1},{}};
+struct AFMap AFMap[] = {{AF_INET,1},{0, 0}};
 #else
 #else
-struct AFMap AFMap[] = {{AF_INET,1},{AF_INET6,2},{}};
+struct AFMap AFMap[] = {{AF_INET,1},{AF_INET6,2},{0, 0}};
 #endif
 
 unsigned long TimeOut = 120;
 #endif
 
 unsigned long TimeOut = 120;
@@ -70,9 +75,10 @@ time_t FtpMethod::FailTime = 0;
 // FTPConn::FTPConn - Constructor                                      /*{{{*/
 // ---------------------------------------------------------------------
 /* */
 // FTPConn::FTPConn - Constructor                                      /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-FTPConn::FTPConn(URI Srv) : Len(0), ServerFd(-1), DataFd(-1), 
+FTPConn::FTPConn(URI Srv) : Len(0), ServerFd(-1), DataFd(-1),
                             DataListenFd(-1), ServerName(Srv),
                             DataListenFd(-1), ServerName(Srv),
-                           ForceExtended(false), TryPassive(true)
+                           ForceExtended(false), TryPassive(true),
+                           PeerAddrLen(0), ServerAddrLen(0)
 {
    Debug = _config->FindB("Debug::Acquire::Ftp",false);
    PasvAddr = 0;
 {
    Debug = _config->FindB("Debug::Acquire::Ftp",false);
    PasvAddr = 0;
@@ -946,7 +952,7 @@ FtpMethod::FtpMethod() : pkgAcqMethod("1.0",SendConfig)
                                                                        /*}}}*/
 // FtpMethod::SigTerm - Handle a fatal signal                          /*{{{*/
 // ---------------------------------------------------------------------
                                                                        /*}}}*/
 // FtpMethod::SigTerm - Handle a fatal signal                          /*{{{*/
 // ---------------------------------------------------------------------
-/* This closes and timestamps the open file. This is neccessary to get 
+/* This closes and timestamps the open file. This is necessary to get
    resume behavoir on user abort */
 void FtpMethod::SigTerm(int)
 {
    resume behavoir on user abort */
 void FtpMethod::SigTerm(int)
 {
@@ -954,11 +960,11 @@ void FtpMethod::SigTerm(int)
       _exit(100);
 
    // Timestamp
       _exit(100);
 
    // Timestamp
-   struct timespec times[2];
+   struct timeval times[2];
    times[0].tv_sec = FailTime;
    times[1].tv_sec = FailTime;
    times[0].tv_sec = FailTime;
    times[1].tv_sec = FailTime;
-   times[0].tv_nsec = times[1].tv_nsec = 0;
-   futimens(FailFd, times);
+   times[0].tv_usec = times[1].tv_usec = 0;
+   utimes(FailFile.c_str(), times);
 
    close(FailFd);
 
 
    close(FailFd);
 
@@ -1062,11 +1068,11 @@ bool FtpMethod::Fetch(FetchItem *Itm)
         Fd.Close();
 
         // Timestamp
         Fd.Close();
 
         // Timestamp
-        struct timespec times[2];
+        struct timeval times[2];
         times[0].tv_sec = FailTime;
         times[1].tv_sec = FailTime;
         times[0].tv_sec = FailTime;
         times[1].tv_sec = FailTime;
-        times[0].tv_nsec = times[1].tv_nsec = 0;
-        futimens(FailFd, times);
+        times[0].tv_usec = times[1].tv_usec = 0;
+        utimes(FailFile.c_str(), times);
 
         // If the file is missing we hard fail and delete the destfile
         // otherwise transient fail
 
         // If the file is missing we hard fail and delete the destfile
         // otherwise transient fail
@@ -1081,11 +1087,11 @@ bool FtpMethod::Fetch(FetchItem *Itm)
       Res.Size = Fd.Size();
 
       // Timestamp
       Res.Size = Fd.Size();
 
       // Timestamp
-      struct timespec times[2];
+      struct timeval times[2];
       times[0].tv_sec = FailTime;
       times[1].tv_sec = FailTime;
       times[0].tv_sec = FailTime;
       times[1].tv_sec = FailTime;
-      times[0].tv_nsec = times[1].tv_nsec = 0;
-      futimens(Fd.Fd(), times);
+      times[0].tv_usec = times[1].tv_usec = 0;
+      utimes(Fd.Name().c_str(), times);
       FailFd = -1;
    }
 
       FailFd = -1;
    }
 
@@ -1098,7 +1104,7 @@ bool FtpMethod::Fetch(FetchItem *Itm)
 }
                                                                        /*}}}*/
 
 }
                                                                        /*}}}*/
 
-int main(int argc,const char *argv[])
+int main(intconst char *argv[])
 { 
    setlocale(LC_ALL, "");
 
 { 
    setlocale(LC_ALL, "");
 
@@ -1126,6 +1132,9 @@ int main(int argc,const char *argv[])
    }
    
    FtpMethod Mth;
    }
    
    FtpMethod Mth;
+
+   // no more active ftp, sorry
+   Mth.DropPrivsOrDie();
    
    return Mth.Run();
 }
    
    return Mth.Run();
 }