|
 |
1330ca |
--- ./cobbler/cobblerd.py 2010-07-28 17:48:48.000000000 +0200
|
|
 |
1330ca |
+++ ./cobbler/cobblerd.py 2012-01-26 11:26:05.000000000 +0100
|
|
 |
1330ca |
@@ -25,6 +25,7 @@ import socket
|
|
 |
1330ca |
import time
|
|
 |
1330ca |
import os
|
|
 |
1330ca |
import SimpleXMLRPCServer
|
|
 |
1330ca |
+import SocketServer
|
|
 |
1330ca |
import glob
|
|
 |
1330ca |
from utils import _
|
|
 |
1330ca |
import xmlrpclib
|
|
 |
1330ca |
@@ -104,7 +105,27 @@ def log(logger,msg):
|
|
 |
1330ca |
def do_xmlrpc_rw(bootapi,settings,port):
|
|
 |
1330ca |
|
|
 |
1330ca |
xinterface = remote.ProxiedXMLRPCInterface(bootapi,remote.CobblerXMLRPCInterface)
|
|
 |
1330ca |
- server = remote.CobblerXMLRPCServer(('127.0.0.1', port))
|
|
 |
1330ca |
+
|
|
 |
1330ca |
+ bound = False
|
|
 |
1330ca |
+ for res in socket.getaddrinfo('localhost', port, socket.AF_UNSPEC,
|
|
 |
1330ca |
+ socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
|
|
 |
1330ca |
+ (af, sa) = (res[0], res[4])
|
|
 |
1330ca |
+ try:
|
|
 |
1330ca |
+ SocketServer.TCPServer.address_family = af
|
|
 |
1330ca |
+ server = remote.CobblerXMLRPCServer((sa[0], sa[1]))
|
|
 |
1330ca |
+ except Exception, msg:
|
|
 |
1330ca |
+ if af == socket.AF_INET:
|
|
 |
1330ca |
+ message = "Could not bind to %s:%s: %s" % (sa[0], sa[1], msg)
|
|
 |
1330ca |
+ elif af == socket.AF_INET6:
|
|
 |
1330ca |
+ message = "Could not bind to [%s]:%s: %s" % (sa[0], sa[1], msg)
|
|
 |
1330ca |
+ xinterface.logger.debug(message)
|
|
 |
1330ca |
+ else:
|
|
 |
1330ca |
+ bound = True
|
|
 |
1330ca |
+ break
|
|
 |
1330ca |
+
|
|
 |
1330ca |
+ if not bound:
|
|
 |
1330ca |
+ raise socket.error("Could not bind to localhost")
|
|
 |
1330ca |
+
|
|
 |
1330ca |
server.logRequests = 0 # don't print stuff
|
|
 |
1330ca |
xinterface.logger.debug("XMLRPC running on %s" % port)
|
|
 |
1330ca |
server.register_instance(xinterface)
|
|
 |
1330ca |
--- ./cobbler/modules/authn_spacewalk.py 2010-07-28 17:48:48.000000000 +0200
|
|
 |
1330ca |
+++ ./cobbler/modules/authn_spacewalk.py 2012-01-26 11:26:05.000000000 +0100
|
|
 |
1330ca |
@@ -77,7 +77,7 @@ def authenticate(api_handle,username,pas
|
|
 |
1330ca |
if server == "xmlrpc.rhn.redhat.com":
|
|
 |
1330ca |
return False # emergency fail, don't bother RHN!
|
|
 |
1330ca |
|
|
 |
1330ca |
- spacewalk_url = "https://%s/rpc/api" % server
|
|
 |
1330ca |
+ spacewalk_url = "http://%s/rpc/api" % server
|
|
 |
1330ca |
|
|
 |
1330ca |
client = xmlrpclib.Server(spacewalk_url, verbose=0)
|
|
 |
1330ca |
|
|
 |
1330ca |
--- ./cobbler/utils.py 2012-01-26 11:26:05.000000000 +0100
|
|
 |
1330ca |
+++ ./cobbler/utils.py 2012-01-26 11:28:22.000000000 +0100
|
|
 |
1330ca |
@@ -1862,6 +1862,30 @@ def get_shared_secret():
|
|
 |
1330ca |
return -1
|
|
 |
1330ca |
return str(data).strip()
|
|
 |
1330ca |
|
|
 |
1330ca |
+def get_localhost_addr(port):
|
|
 |
1330ca |
+ (sock, sa, af) = (None, None, None)
|
|
 |
1330ca |
+ for res in socket.getaddrinfo('localhost', port, socket.AF_UNSPEC, socket.SOCK_STREAM):
|
|
 |
1330ca |
+ af, socktype, proto, canonname, sa = res
|
|
 |
1330ca |
+ try:
|
|
 |
1330ca |
+ sock = socket.socket(af, socktype, proto)
|
|
 |
1330ca |
+ except socket.error:
|
|
 |
1330ca |
+ sock = None
|
|
 |
1330ca |
+ continue
|
|
 |
1330ca |
+
|
|
 |
1330ca |
+ try:
|
|
 |
1330ca |
+ sock.connect((sa[0], sa[1]))
|
|
 |
1330ca |
+ except socket.error:
|
|
 |
1330ca |
+ sock.close()
|
|
 |
1330ca |
+ sock = None
|
|
 |
1330ca |
+ continue
|
|
 |
1330ca |
+ break
|
|
 |
1330ca |
+
|
|
 |
1330ca |
+ if sock is None:
|
|
 |
1330ca |
+ return (None, None)
|
|
 |
1330ca |
+
|
|
 |
1330ca |
+ sock.close()
|
|
 |
1330ca |
+ return (sa[0], af)
|
|
 |
1330ca |
+
|
|
 |
1330ca |
def local_get_cobbler_api_url():
|
|
 |
1330ca |
# Load server and http port
|
|
 |
1330ca |
try:
|
|
 |
1330ca |
@@ -1882,7 +1906,18 @@ def local_get_cobbler_xmlrpc_url():
|
|
 |
1330ca |
except:
|
|
 |
1330ca |
traceback.print_exc()
|
|
 |
1330ca |
raise CX("/etc/cobbler/settings is not a valid YAML file")
|
|
 |
1330ca |
- return "http://%s:%s" % ("127.0.0.1",data.get("xmlrpc_port","25151"))
|
|
 |
1330ca |
+ port = data.get("xmlrpc_port","25151")
|
|
 |
1330ca |
+ addr = get_localhost_addr(port)
|
|
 |
1330ca |
+
|
|
 |
1330ca |
+ if addr[1] == socket.AF_INET:
|
|
 |
1330ca |
+ return "http://%s:%s" % (addr[0], port)
|
|
 |
1330ca |
+ if addr[1] == socket.AF_INET6:
|
|
 |
1330ca |
+ return "http://[%s]:%s" % (addr[0], port)
|
|
 |
1330ca |
+
|
|
 |
1330ca |
+ if os.path.exists('/proc/net/if_inet6'):
|
|
 |
1330ca |
+ return "http://[::1]:%s" % port
|
|
 |
1330ca |
+ else:
|
|
 |
1330ca |
+ return "http://127.0.0.1:%s" % port
|
|
 |
1330ca |
|
|
 |
1330ca |
def strip_none(data, omit_none=False):
|
|
 |
1330ca |
"""
|
|
 |
1330ca |
--- ./scripts/services.py 2010-07-28 17:48:48.000000000 +0200
|
|
 |
1330ca |
+++ ./scripts/services.py 2012-01-26 11:26:05.000000000 +0100
|
|
 |
1330ca |
@@ -78,7 +78,7 @@ def handler(req):
|
|
 |
1330ca |
# instantiate a CobblerWeb object
|
|
 |
1330ca |
cw = CobblerSvc(
|
|
 |
1330ca |
apache = apache,
|
|
 |
1330ca |
- server = "http://127.0.0.1:%s" % remote_port
|
|
 |
1330ca |
+ server = utils.local_get_cobbler_xmlrpc_url()
|
|
 |
1330ca |
)
|
|
 |
1330ca |
|
|
 |
1330ca |
# check for a valid path/mode
|
|
 |
1330ca |
--- ./scripts/services.wsgi 2010-10-07 20:12:03.000000000 +0200
|
|
 |
1330ca |
+++ ./scripts/services.wsgi 2012-01-26 11:26:05.000000000 +0100
|
|
 |
1330ca |
@@ -23,6 +23,7 @@ import yaml
|
|
 |
1330ca |
import os
|
|
 |
1330ca |
|
|
 |
1330ca |
from cobbler.services import CobblerSvc
|
|
 |
1330ca |
+import cobbler.utils as utils
|
|
 |
1330ca |
|
|
 |
1330ca |
def application(environ, start_response):
|
|
 |
1330ca |
|
|
 |
1330ca |
@@ -64,7 +65,7 @@ def application(environ, start_response)
|
|
 |
1330ca |
remote_port = ydata.get("xmlrpc_port",25151)
|
|
 |
1330ca |
|
|
 |
1330ca |
# instantiate a CobblerWeb object
|
|
 |
1330ca |
- cw = CobblerSvc(server = "http://127.0.0.1:%s" % remote_port)
|
|
 |
1330ca |
+ cw = CobblerSvc(server = utils.local_get_cobbler_xmlrpc_url())
|
|
 |
1330ca |
|
|
 |
1330ca |
# check for a valid path/mode
|
|
 |
1330ca |
# handle invalid paths gracefully
|
|
 |
1330ca |
|