]> git.saurik.com Git - apt.git/commitdiff
Merge branch 'debian/experimental' into feature/srv-records
authorMichael Vogt <mvo@debian.org>
Tue, 18 Aug 2015 09:54:05 +0000 (11:54 +0200)
committerMichael Vogt <mvo@debian.org>
Tue, 18 Aug 2015 09:54:05 +0000 (11:54 +0200)
Conflicts:
cmdline/apt-helper.cc
cmdline/makefile

1  2 
cmdline/apt-helper.cc
cmdline/makefile

diff --combined cmdline/apt-helper.cc
index aeeccf06d7a140563026c5ec34f2939cc7d5c2d6,a97fc903f35f33bf225621cbd6a22b0bd34dde7f..482e64dd15cff48980187cfcee2d8e33481ca866
  #include <apt-pkg/fileutl.h>
  #include <apt-pkg/acquire.h>
  #include <apt-pkg/acquire-item.h>
+ #include <apt-pkg/proxy.h>
  
  #include <apt-private/acqprogress.h>
  #include <apt-private/private-output.h>
  #include <apt-private/private-download.h>
  #include <apt-private/private-cmndline.h>
 +#include <apt-pkg/srvrec.h>
  
  #include <iostream>
  #include <string>
  #include <apti18n.h>
                                                                        /*}}}*/
  
+ static bool DoAutoDetectProxy(CommandLine &CmdL)
+ {
+    if (CmdL.FileSize() != 2)
+       return _error->Error(_("Need one URL as argument"));
+    URI ServerURL(CmdL.FileList[1]);
+    AutoDetectProxy(ServerURL);
+    std::string SpecificProxy = _config->Find("Acquire::"+ServerURL.Access+"::Proxy::" + ServerURL.Host);
+    ioprintf(std::cout, "Using proxy '%s' for URL '%s'\n",
+             SpecificProxy.c_str(), std::string(ServerURL).c_str());
+    return true;
+ }
  static bool DoDownloadFile(CommandLine &CmdL)
  {
     if (CmdL.FileSize() <= 2)
        return _error->Error(_("Must specify at least one pair url/filename"));
  
+    AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0));
+    pkgAcquire Fetcher(&Stat);
+    size_t fileind = 0;
+    std::vector<std::string> targetfiles;
+    while (fileind + 2 <= CmdL.FileSize())
+    {
+       std::string download_uri = CmdL.FileList[fileind + 1];
+       std::string targetfile = CmdL.FileList[fileind + 2];
+       std::string hash;
+       if (CmdL.FileSize() > fileind + 3)
+        hash = CmdL.FileList[fileind + 3];
+       // we use download_uri as descr and targetfile as short-descr
+       new pkgAcqFile(&Fetcher, download_uri, hash, 0, download_uri, targetfile,
+           "dest-dir-ignored", targetfile);
+       targetfiles.push_back(targetfile);
+       fileind += 3;
+    }
+    // Disable drop-privs if "_apt" can not write to the target dir
+    CheckDropPrivsMustBeDisabled(Fetcher);
  
-    pkgAcquire Fetcher;
-    AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0));
-    Fetcher.Setup(&Stat);
-    std::string download_uri = CmdL.FileList[1];
-    std::string targetfile = CmdL.FileList[2];
-    std::string hash;
-    if (CmdL.FileSize() > 3)
-       hash = CmdL.FileList[3];
-    new pkgAcqFile(&Fetcher, download_uri, hash, 0, "desc", "short-desc", 
-                   "dest-dir-ignored", targetfile);
-    Fetcher.Run();
     bool Failed = false;
-    if (AcquireRun(Fetcher, 0, &Failed, NULL) == false || Failed == true ||
-        FileExists(targetfile) == false)
+    if (AcquireRun(Fetcher, 0, &Failed, NULL) == false || Failed == true)
        return _error->Error(_("Download Failed"));
+    if (targetfiles.empty() == false)
+       for (std::vector<std::string>::const_iterator f = targetfiles.begin(); f != targetfiles.end(); ++f)
+        if (FileExists(*f) == false)
+           return _error->Error(_("Download Failed"));
     return true;
  }
  
 +static bool DoSrvLookup(CommandLine &CmdL)
 +{
 +   if (CmdL.FileSize() < 1)
 +      return _error->Error(_("Must specifc at least one srv record"));
 +   
 +   std::vector<SrvRec> srv_records;
 +   for(int i=1; CmdL.FileList[i] != NULL; i++)
 +   {
 +      if(GetSrvRecords(CmdL.FileList[i], srv_records) == false)
 +         _error->Warning(_("GetSrvRec failed for %s"), CmdL.FileList[i]);
 +      for (std::vector<SrvRec>::const_iterator I = srv_records.begin();
 +           I != srv_records.end(); ++I)
 +      {
 +         c1out << (*I).target.c_str() << " " 
 +               << (*I).priority << " " 
 +               << (*I).weight << " "
 +               << (*I).port << " "
 +               << std::endl;
 +      }
 +   }
 +   return true;
 +}
 +
  static bool ShowHelp(CommandLine &)
  {
-    ioprintf(std::cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION,
-           COMMON_ARCH,__DATE__,__TIME__);
+    ioprintf(std::cout, "%s %s (%s)\n", PACKAGE, PACKAGE_VERSION, COMMON_ARCH);
  
     if (_config->FindB("version") == true)
       return true;
        "\n"
        "Commands:\n"
        "   download-file - download the given uri to the target-path\n"
+       "   auto-detect-proxy - detect proxy using apt.conf\n"
        "\n"
        "                       This APT helper has Super Meep Powers.\n");
     return true;
@@@ -103,7 -107,7 +131,8 @@@ int main(int argc,const char *argv[]
  {
     CommandLine::Dispatch Cmds[] = {{"help",&ShowHelp},
                                   {"download-file", &DoDownloadFile},
 +                                 {"srv-lookup", &DoSrvLookup},
+                                  {"auto-detect-proxy", &DoAutoDetectProxy},
                                     {0,0}};
  
     std::vector<CommandLine::Args> Args = getCommandArgs(
     textdomain(PACKAGE);
  
     // Parse the command line and initialize the package library
-    CommandLine CmdL(Args.data(),_config);
-    if (pkgInitConfig(*_config) == false ||
-        CmdL.Parse(argc,argv) == false ||
-        pkgInitSystem(*_config,_system) == false)
-    {
-       if (_config->FindB("version") == true)
-        ShowHelp(CmdL);
-       _error->DumpErrors();
-       return 100;
-    }
-    // See if the help should be shown
-    if (_config->FindB("help") == true ||
-        _config->FindB("version") == true ||
-        CmdL.FileSize() == 0)
-    {
-       ShowHelp(CmdL);
-       return 0;
-    }
+    CommandLine CmdL;
+    ParseCommandLine(CmdL, Cmds, Args.data(), &_config, &_system, argc, argv, ShowHelp);
  
     InitOutput();
  
diff --combined cmdline/makefile
index a24738e63115e92362dba8817fb0460ad1f535cc,816038c3b381045148fff4c0c814568a7768a0c0..6d21b08031ab34d5bc1d20ec29240adb741e791e
@@@ -8,49 -8,49 +8,49 @@@ include ../buildlib/defaults.ma
  # The apt program
  PROGRAM=apt
  SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt.cc
  include $(PROGRAM_H)
  
  # The apt-cache program
  PROGRAM=apt-cache
  SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-cache.cc
  include $(PROGRAM_H)
  
  # The apt-get program
  PROGRAM=apt-get
  SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-get.cc 
  include $(PROGRAM_H)
  
  # The apt-config program
  PROGRAM=apt-config
  SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-config.cc
  include $(PROGRAM_H)
  
  # The apt-cdrom program
  PROGRAM=apt-cdrom
  SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-cdrom.cc 
  include $(PROGRAM_H)
  
  # The apt-mark program
  PROGRAM=apt-mark
  SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-mark.cc
  include $(PROGRAM_H)
  
  # The apt-helper
  PROGRAM=apt-helper
 -SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
 +SLIBS = -lapt-pkg -lapt-private $(INTLLIBS) -lresolv
- LIB_MAKES = apt-pkg/makefile
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-helper.cc
  include $(PROGRAM_H)
  
@@@ -67,22 -67,22 +67,22 @@@ APT_DOMAIN:=apt-util
  
  # The apt-sortpkgs program
  PROGRAM=apt-sortpkgs
- SLIBS = -lapt-pkg $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-sortpkgs.cc
  include $(PROGRAM_H)
  
  # The apt-extracttemplates program
  PROGRAM=apt-extracttemplates
- SLIBS = -lapt-pkg -lapt-inst $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ SLIBS = -lapt-pkg -lapt-inst -lapt-private $(INTLLIBS)
+ LIB_MAKES = apt-pkg/makefile apt-inst/makefile apt-private/makefile
  SOURCE = apt-extracttemplates.cc 
  include $(PROGRAM_H)
  
  # The internal solver acting as an external
  PROGRAM=apt-internal-solver
- SLIBS = -lapt-pkg $(INTLLIBS)
- LIB_MAKES = apt-pkg/makefile
+ SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
+ LIB_MAKES = apt-pkg/makefile apt-private/makefile
  SOURCE = apt-internal-solver.cc
  include $(PROGRAM_H)