]> git.saurik.com Git - apt.git/commitdiff
methods: Fail if we cannot drop privileges
authorJulian Andres Klode <jak@debian.org>
Wed, 24 Sep 2014 19:49:19 +0000 (21:49 +0200)
committerJulian Andres Klode <jak@debian.org>
Wed, 24 Sep 2014 19:49:19 +0000 (21:49 +0200)
apt-pkg/acquire-method.cc
apt-pkg/acquire-method.h
methods/copy.cc
methods/ftp.cc
methods/gpgv.cc
methods/gzip.cc
methods/http_main.cc
methods/https.cc

index e4a937d1dd6de8b363998a43b24abaf48e3a2a0a..82f2fb3ce091e51c9e11afe88f21bedc60bef096 100644 (file)
@@ -118,6 +118,18 @@ void pkgAcqMethod::Fail(string Err,bool Transient)
 
    std::cout << "\n" << std::flush;
 }
 
    std::cout << "\n" << std::flush;
 }
+                                                                       /*}}}*/
+// AcqMethod::DropPrivsOrDie - Drop privileges or die          /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqMethod::DropPrivsOrDie()
+{
+   if (!DropPrivs()) {
+      Fail(false);
+      exit(112);       /* call the european emergency number */
+   }
+}
+
                                                                        /*}}}*/
 // AcqMethod::URIStart - Indicate a download is starting               /*{{{*/
 // ---------------------------------------------------------------------
                                                                        /*}}}*/
 // AcqMethod::URIStart - Indicate a download is starting               /*{{{*/
 // ---------------------------------------------------------------------
index cbf79f8609be84b6d72e204e983095696f1ce258..cdeecc9a73983d602db3e304da750e6bcf9c7d3c 100644 (file)
@@ -105,7 +105,7 @@ class pkgAcqMethod
    
    pkgAcqMethod(const char *Ver,unsigned long Flags = 0);
    virtual ~pkgAcqMethod() {};
    
    pkgAcqMethod(const char *Ver,unsigned long Flags = 0);
    virtual ~pkgAcqMethod() {};
-
+   void DropPrivsOrDie();
    private:
    APT_HIDDEN void Dequeue();
 };
    private:
    APT_HIDDEN void Dequeue();
 };
index 18d70e153abefa2be495d174d5ed15a627eae28d..3883c822b2417a6f8a72f6a94a84b6f27188f51f 100644 (file)
@@ -118,8 +118,8 @@ int main()
 {
    setlocale(LC_ALL, "");
 
 {
    setlocale(LC_ALL, "");
 
-   DropPrivs();
-
    CopyMethod Mth;
    CopyMethod Mth;
+
+   Mth.DropPrivsOrDie();
    return Mth.Run();
 }
    return Mth.Run();
 }
index 9d58aa3b9591e44eb7db4e67c609175965806452..a658b5657e552b3557c941d3f306e6edc0123c35 100644 (file)
@@ -1107,9 +1107,6 @@ int main(int, const char *argv[])
 { 
    setlocale(LC_ALL, "");
 
 { 
    setlocale(LC_ALL, "");
 
-   // no more active ftp, sorry
-   DropPrivs();
-
    /* See if we should be come the http client - we do this for http
       proxy urls */
    if (getenv("ftp_proxy") != 0)
    /* See if we should be come the http client - we do this for http
       proxy urls */
    if (getenv("ftp_proxy") != 0)
@@ -1134,6 +1131,9 @@ int main(int, const char *argv[])
    }
    
    FtpMethod Mth;
    }
    
    FtpMethod Mth;
+
+   // no more active ftp, sorry
+   Mth.DropPrivsOrDie();
    
    return Mth.Run();
 }
    
    return Mth.Run();
 }
index 1594178839c652a5d2d63bdee0be1b3391f33b85..4071cbac6d76ac5de9e8ce6432deb447f4991c9a 100644 (file)
@@ -262,10 +262,10 @@ bool GPGVMethod::Fetch(FetchItem *Itm)
 int main()
 {
    setlocale(LC_ALL, "");
 int main()
 {
    setlocale(LC_ALL, "");
-   
-   DropPrivs();
 
    GPGVMethod Mth;
 
 
    GPGVMethod Mth;
 
+   Mth.DropPrivsOrDie();
+
    return Mth.Run();
 }
    return Mth.Run();
 }
index 518e58f824604a6d5d2fc37009e7f38336ddd18e..7ffcda60f66cace2b11fceaad4cbbeb6521fa346 100644 (file)
@@ -135,11 +135,12 @@ int main(int, char *argv[])
 {
    setlocale(LC_ALL, "");
 
 {
    setlocale(LC_ALL, "");
 
-   DropPrivs();
-
    Prog = strrchr(argv[0],'/');
    ++Prog;
 
    GzipMethod Mth;
    Prog = strrchr(argv[0],'/');
    ++Prog;
 
    GzipMethod Mth;
+
+   Mth.DropPrivsOrDie();
+
    return Mth.Run();
 }
    return Mth.Run();
 }
index 78858263266dc3fd1521d5d347bf645ae5ccb735..d7724701a761017dcf4e7ff2bf500715868c0f41 100644 (file)
@@ -12,8 +12,8 @@ int main()
    // closes the connection (this is dealt with via ServerDie())
    signal(SIGPIPE, SIG_IGN);
 
    // closes the connection (this is dealt with via ServerDie())
    signal(SIGPIPE, SIG_IGN);
 
-   DropPrivs();
-
    HttpMethod Mth;
    HttpMethod Mth;
+
+   Mth.DropPrivsOrDie();
    return Mth.Loop();
 }
    return Mth.Loop();
 }
index a40f377101c7b836d9ac55c1eb59755f92c9fab3..a74d2a38be4ba416ee7f1bfffbc1fdc3e43a9e0a 100644 (file)
@@ -443,11 +443,11 @@ int main()
 {
    setlocale(LC_ALL, "");
 
 {
    setlocale(LC_ALL, "");
 
-   DropPrivs();
-
    HttpsMethod Mth;
    curl_global_init(CURL_GLOBAL_SSL) ;
 
    HttpsMethod Mth;
    curl_global_init(CURL_GLOBAL_SSL) ;
 
+   Mth.DropPrivsOrDie();
+
    return Mth.Run();
 }
 
    return Mth.Run();
 }