summaryrefslogtreecommitdiffstats
path: root/pyanaconda/vnc.py
diff options
context:
space:
mode:
authorMartin Gracik <mgracik@redhat.com>2011-01-21 14:27:20 +0100
committerMartin Gracik <mgracik@redhat.com>2011-02-18 10:58:36 +0100
commit6932ea4ef076fe9c4eb350ddcc24b5b0ecc996e2 (patch)
tree19904754c7fea1db6a96721be190a30b54695102 /pyanaconda/vnc.py
parent9e01096f858c047a5c5f46b16f9acc65763b98b8 (diff)
downloadanaconda-6932ea4ef076fe9c4eb350ddcc24b5b0ecc996e2.tar.gz
anaconda-6932ea4ef076fe9c4eb350ddcc24b5b0ecc996e2.tar.xz
anaconda-6932ea4ef076fe9c4eb350ddcc24b5b0ecc996e2.zip
VNC does not support runtime SecurityTypes changes (#678150)
New XVNC does not support changing of SecurityTypes when it is already running with vncconfig. So we have to solve all the password stuff first, and then run the XVNC with either None or VncAuth.
Diffstat (limited to 'pyanaconda/vnc.py')
-rw-r--r--pyanaconda/vnc.py65
1 files changed, 27 insertions, 38 deletions
diff --git a/pyanaconda/vnc.py b/pyanaconda/vnc.py
index 887df9fc5..47e42eb29 100644
--- a/pyanaconda/vnc.py
+++ b/pyanaconda/vnc.py
@@ -29,6 +29,7 @@ import isys
import product
import socket
import subprocess
+import iutil
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
@@ -76,24 +77,19 @@ class VncServer:
self.password=""
def setVNCPassword(self):
- """Change the vnc server password. Output to file. """
+ """Set the vnc server password. Output to file. """
- if len(self.password) == 0:
- self.setVNCParam("SecurityTypes", "None")
- self.setVNCParam("rfbauth","0")
- return
+ r, w = os.pipe()
+ os.write(w, "%s\n" % self.password)
- # If there is a password the SecurityTypes = VncAuth for all connections.
- self.setVNCParam("SecurityTypes", "VncAuth")
- self.setVNCParam("rfbauth",self.pw_file)
+ # the -f option makes sure vncpasswd does not ask for the password again
+ rc = iutil.execWithRedirect("vncpasswd", ["-f"],
+ stdin=r, stdout=self.pw_file)
- # password input combination.
- pwinput = "%s\n%s\n" % (self.password, self.password)
- vnccommand = [self.root+"/usr/bin/vncpasswd", self.pw_file]
- vncpswdo = subprocess.Popen(vnccommand, stdin=subprocess.PIPE, stdout=subprocess.PIPE)# We pipe the output
- # so the user does not see it.
- (out, err) = vncpswdo.communicate(input=pwinput)
- return vncpswdo.returncode
+ os.close(r)
+ os.close(w)
+
+ return rc
def initialize(self):
"""Here is were all the relative vars get initialized. """
@@ -144,16 +140,6 @@ class VncServer:
% {'productName': product.productName,
'productVersion': product.productVersion}
- def setVNCParam(self, param, value):
- """Set a parameter in the Xvnc server.
-
- Possible values for param and value. param=(values)
- SecurityTypes=(VncAuth,None)
- """
- vncconfigcommand = [self.root+"/usr/bin/vncconfig", "-display", ":%s"%self.display , "-set" , "%s=%s" %(param, value)]
- vncconfo = subprocess.Popen(vncconfigcommand)# we dont want output
- return vncconfo.returncode
-
def openlogfile(self):
try:
fd = os.open(self.log_file, os.O_RDWR | os.O_CREAT)
@@ -211,13 +197,25 @@ class VncServer:
# Lets call it from here for now.
self.initialize()
- # Lets start the xvnc regardless of vncconnecthost and password.
- # We can change the configuration on the fly later.
- xvnccommand = [ self.root + "/usr/bin/Xvnc", ":%s" % self.display, "-nevershared",
+ if self.password and len(self.password) < 6:
+ self.changeVNCPasswdWindow()
+
+ if not self.password:
+ SecurityTypes = "None"
+ rfbauth = "0"
+ else:
+ SecurityTypes = "VncAuth"
+ rfbauth = self.pw_file
+ # Create the password file.
+ rc = self.setVNCPassword()
+
+ # Lets start the xvnc.
+ xvnccommand = [ "Xvnc", ":%s" % self.display, "-nevershared",
"-depth", "16", "-br",
"IdleTimeout=0", "-auth", "/dev/null", "-once",
"DisconnectClients=false", "desktop=%s" % (self.desktop,),
- "SecurityTypes=None"]
+ "SecurityTypes=%s" % SecurityTypes, "rfbauth=%s" % rfbauth ]
+
try:
xvncp = subprocess.Popen(xvnccommand, stdout=self.openlogfile(), stderr=subprocess.STDOUT)
except OSError:
@@ -233,15 +231,6 @@ class VncServer:
else:
self.log.info(_("The VNC server is now running."))
- # Lets look at the password stuff
- if self.password == "":
- pass
- elif len(self.password) < 6:
- self.changeVNCPasswdWindow()
-
- # Create the password file.
- self.setVNCPassword()
-
# Lets tell the user what we are going to do.
if self.vncconnecthost != "":
self.log.warning(_("\n\nYou chose to connect to a listening vncviewer. \n"