[pve-devel] r5151 - in qemu-server/pve2: . PVE PVE/API2/Qemu

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Sep 15 08:04:37 CEST 2010


Author: dietmar
Date: 2010-09-15 06:04:36 +0000 (Wed, 15 Sep 2010)
New Revision: 5151

Modified:
   qemu-server/pve2/PVE/API2/Qemu/VNC.pm
   qemu-server/pve2/PVE/QemuServer.pm
   qemu-server/pve2/nqm
Log:


Modified: qemu-server/pve2/PVE/API2/Qemu/VNC.pm
===================================================================
--- qemu-server/pve2/PVE/API2/Qemu/VNC.pm	2010-09-14 10:46:54 UTC (rev 5150)
+++ qemu-server/pve2/PVE/API2/Qemu/VNC.pm	2010-09-15 06:04:36 UTC (rev 5151)
@@ -17,5 +17,45 @@
 
 use base qw(PVE::RESTHandler);
 
+__PACKAGE__->register_method ({
+    name => 'vncproxy', 
+    path => '',  
+    method => 'POST',
+    description => "Create VNC proxy connections.",
+    parameters => {
+    	additionalProperties => 0,
+	properties => {
+	    node => get_standard_option('pve-node'),
+	    vmid => get_standard_option('pve-vmid'),
+	},
+    },
+    returns => { 
+    	additionalProperties => 0,
+	properties => {
+	    port => { type => 'integer' },
+	    ticket => { type => 'string' },
+	},
+    },
+    code => sub {
+	my ($param) = @_;
 
+	my $rpcenv = PVE::RPCEnvironment::get();
+
+	my $user = $rpcenv->get_user();
+
+	my $vmid = $param->{vmid};
+	my $node = $param->{node};
+
+	# generate ticket, olny first 8 character used by vnc
+	my $ticket = Digest::SHA1::sha1_base64 ($userid, rand(), time());
+
+	my $port = PVE::QemuServer::next_vnc_port();
+
+	print "TEST VNCPROXY\n";
+
+
+	return { port = $port, ticket => $ticket };
+
+    }});
+
 1;

Modified: qemu-server/pve2/PVE/QemuServer.pm
===================================================================
--- qemu-server/pve2/PVE/QemuServer.pm	2010-09-14 10:46:54 UTC (rev 5150)
+++ qemu-server/pve2/PVE/QemuServer.pm	2010-09-15 06:04:36 UTC (rev 5151)
@@ -462,6 +462,13 @@
     $confdesc->{"virtio$i"} = $virtiodesc;
 }
 
+PVE::JSONSchema::register_standard_option('pve-vncticket', { 
+    description => "Secret VNC ticket.",
+    type => 'string',
+    minLength => 8, # just to improve security
+    pattern => '[A-Za-z0-9\+\/\=]+', # base64 characters
+});
+
 my $kvm_api_version = 0;
 
 sub kvm_version {
@@ -2033,6 +2040,25 @@
     die "unable to find free migration port";
 }
 
+sub next_vnc_port {
+
+    for (my $p = 5900; $p < 6000; $p++) {
+
+	my $sock = IO::Socket::INET->new (Listen => 5,
+					  LocalAddr => 'localhost',
+					  LocalPort => $p,
+					  ReuseAddr => 1,
+					  Proto     => 0);
+
+	if ($sock) {
+	    close ($sock);
+	    return $p;
+	}
+    }
+
+    die "unable to find free vnc port";
+};
+
 sub activate_volumes {
     my ($storecfg, $conf)  = @_;
 

Modified: qemu-server/pve2/nqm
===================================================================
--- qemu-server/pve2/nqm	2010-09-14 10:46:54 UTC (rev 5150)
+++ qemu-server/pve2/nqm	2010-09-15 06:04:36 UTC (rev 5151)
@@ -157,13 +157,7 @@
     	additionalProperties => 0,
 	properties => {
 	    vmid => get_standard_option('pve-vmid'),
-	    ticket => { 
-		description => "VNC auth ticket.",
-		type => 'string',
-		optional => 1,
-		minLength => 8, # just to improve security
-		pattern => '[A-Za-z0-9\+\/\=]+', # base64 characters
-	    },
+	    ticket => get_standard_option('pve-vncticket', { optional => 1 }), 
 	},
     },
     returns => { type => 'null'},



More information about the pve-devel mailing list