Bugzilla – Attachment 401780 Details for
Bug 655483
[patch] libproxy support in libzypp
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
libproxy sysconfig support
libproxy-sysconfig.diff (text/plain), 6.45 KB, created by
Duncan Mac-Vicar
on 2010-11-23 12:24:14 UTC
(
hide
)
Description:
libproxy sysconfig support
Filename:
MIME Type:
Creator:
Duncan Mac-Vicar
Created:
2010-11-23 12:24:14 UTC
Size:
6.45 KB
patch
obsolete
>Index: libproxy/cmake/modules.cmk >=================================================================== >--- libproxy/cmake/modules.cmk (revision 775) >+++ libproxy/cmake/modules.cmk (working copy) >@@ -9,6 +9,7 @@ > include(cmake/pxmodule.cmk) > include(cmake/pkgconfig.cmk) > include(cmake/modules/config_envvar.cmk) >+include(cmake/modules/config_sysconfig.cmk) > include(cmake/modules/config_gnome.cmk) > include(cmake/modules/config_kde4.cmk) > include(cmake/modules/config_macosx.cmk) >@@ -27,6 +28,7 @@ > # > message("MODULES TO BUILD:") > px_module(config_envvar "${ENVVAR_FOUND}" 1) >+px_module(config_sysconfig "${SYSCONFIG_FOUND}" 1) > px_module(config_gnome "${GNOME_FOUND}" 0) > px_module(config_kde4 "${KDE4_FOUND}" 0 ${KDE4_LIBRARIES}) > px_module(config_macosx "${SC_FOUND}" 1 ${SC_LIBRARIES} ${CF_LIBRARIES}) >Index: libproxy/cmake/modules/config_sysconfig.cmk >=================================================================== >--- libproxy/cmake/modules/config_sysconfig.cmk (revision 0) >+++ libproxy/cmake/modules/config_sysconfig.cmk (revision 0) >@@ -0,0 +1,5 @@ >+if (NOT WIN32 AND NOT APPLE) >+ if (EXISTS "/etc/sysconfig" AND IS_DIRECTORY "/etc/sysconfig") >+ set(SYSCONFIG_FOUND 1) >+ endif() >+endif() >\ No newline at end of file >Index: libproxy/modules/config_sysconfig.cpp >=================================================================== >--- libproxy/modules/config_sysconfig.cpp (revision 0) >+++ libproxy/modules/config_sysconfig.cpp (revision 0) >@@ -0,0 +1,163 @@ >+/******************************************************************************* >+ * libproxy sysconfig module >+ * Copyright (C) 2010 Novell Inc. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Lesser General Public >+ * License as published by the Free Software Foundation; either >+ * version 2.1 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Lesser General Public License for more details. >+ * >+ * You should have received a copy of the GNU Lesser General Public >+ * License along with this library; if not, write to the Free Software >+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA >+ ******************************************************************************/ >+ >+#include <cstdlib> >+#include <map> >+#include <fstream> >+ >+#include "../extension_config.hpp" >+using namespace libproxy; >+using std::map; >+ >+enum Trim { >+ NO_TRIM = 0x00, >+ L_TRIM = 0x01, >+ R_TRIM = 0x02, >+ TRIM = (L_TRIM|R_TRIM) >+}; >+ >+static std::string trim( const std::string & s, const Trim trim_r = TRIM ) >+{ >+ if ( s.empty() || trim_r == NO_TRIM ) >+ return s; >+ >+ std::string ret( s ); >+ >+ if ( trim_r & L_TRIM ) >+ { >+ std::string::size_type p = ret.find_first_not_of( " \t\n" ); >+ if ( p == std::string::npos ) >+ return std::string(); >+ >+ ret = ret.substr( p ); >+ } >+ >+ if ( trim_r & R_TRIM ) >+ { >+ std::string::size_type p = ret.find_last_not_of( " \t\n" ); >+ if ( p == std::string::npos ) >+ return std::string(); >+ >+ ret = ret.substr( 0, p+1 ); >+ } >+ >+ return ret; >+} >+ >+static map<string,string> sysconfig_read( const string &_path ) >+{ >+ map<string,string> ret; >+ >+ string line; >+ ifstream in( _path.c_str() ); >+ if ( in.fail() ) { >+ return ret; >+ } >+ >+ while( getline( in, line ) ) { >+ if ( *line.begin() != '#' ) { >+ >+ string::size_type pos = line.find( '=', 0 ); >+ >+ if ( pos != string::npos ) { >+ >+ string key = trim( line.substr( 0, pos ) ); >+ string value = trim( line.substr( pos + 1, line.length() - pos - 1 ) ); >+ >+ if ( value.length() >= 2 >+ && *(value.begin()) == '"' >+ && *(value.rbegin()) == '"' ) >+ { >+ value = value.substr( 1, value.length() - 2 ); >+ } >+ if ( value.length() >= 2 >+ && *(value.begin()) == '\'' >+ && *(value.rbegin()) == '\'' ) >+ { >+ value = value.substr( 1, value.length() - 2 ); >+ } >+ ret[key] = value; >+ >+ } // '=' found >+ >+ } // not comment >+ >+ } // while getline >+ return ret; >+} >+ >+class sysconfig_config_extension : public config_extension { >+ >+ map<string,string> _data; >+ >+public: >+ sysconfig_config_extension() >+ : _data(sysconfig_read("/etc/sysconfig/proxy")) >+ { >+ >+ } >+ >+ ~sysconfig_config_extension() { >+ >+ } >+ >+ url get_config(url url) throw (runtime_error) { >+ map<string,string>::const_iterator it = _data.find("PROXY_ENABLED"); >+ if (it != _data.end() && it->second == "no") >+ return libproxy::url("direct://"); >+ >+ string key; >+ string proxy; >+ >+ // If the URL is an ftp url, try to read the ftp proxy >+ if (url.get_scheme() == "ftp") >+ key = "FTP_PROXY"; >+ else if (url.get_scheme() == "http") >+ key = "HTTP_PROXY"; >+ else if (url.get_scheme() == "https") >+ key = "HTTPS_PROXY"; >+ >+ it = _data.find(key); >+ if (it != _data.end()) >+ proxy = it->second; >+ >+ if (proxy.empty()) >+ throw runtime_error("Unable to read configuration"); >+ >+ return libproxy::url(proxy); >+ } >+ >+ string get_ignore(url) { >+ map<string,string>::const_iterator it = _data.find("NO_PROXY"); >+ if (it != _data.end()) >+ return it->second; >+ return ""; >+ } >+ >+ // Make sure that envvar is pushed to the back behind all other config extensions >+ // if we are running as root, then make sure this is the >+ // first thing tried >+ virtual bool operator<(const base_extension&) const { >+ if (getuid == 0) >+ return true; >+ return false; >+ } >+}; >+ >+MM_MODULE_INIT_EZ(sysconfig_config_extension, true, NULL, NULL);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 655483
: 401780 |
401819