]> git.proxmox.com Git - mirror_novnc.git/commitdiff
Add support for Unix Tight auth
authorChris "Koying" Browet <cbro@semperpax.com>
Sat, 3 Aug 2019 07:11:25 +0000 (09:11 +0200)
committerSamuel Mannehed <samuel@cendio.se>
Thu, 5 Dec 2019 14:46:31 +0000 (15:46 +0100)
core/rfb.js

index 9ef369d6d60a9ec2d82e4335b4dd40dfc42f70bc..6f02e4d298e4f79d0f0d823842ef286c02c11d1a 100644 (file)
@@ -976,6 +976,23 @@ export default class RFB extends EventTargetMixin {
         return true;
     }
 
+    _negotiate_tight_unix_auth() {
+        if (this._rfb_credentials.username === undefined ||
+            this._rfb_credentials.password === undefined) {
+            this.dispatchEvent(new CustomEvent(
+                "credentialsrequired",
+                { detail: { types: ["username", "password"] } }));
+            return false;
+        }
+
+        this._sock.send([0, 0, 0, this._rfb_credentials.username.length]);
+        this._sock.send([0, 0, 0, this._rfb_credentials.password.length]);
+        this._sock.send_string(this._rfb_credentials.username);
+        this._sock.send_string(this._rfb_credentials.password);
+        this._rfb_init_state = "SecurityResult";
+        return true;
+    }
+
     _negotiate_tight_tunnels(numTunnels) {
         const clientSupportedTunnelTypes = {
             0: { vendor: 'TGHT', signature: 'NOTUNNEL' }
@@ -1043,7 +1060,8 @@ export default class RFB extends EventTargetMixin {
 
         const clientSupportedTypes = {
             'STDVNOAUTH__': 1,
-            'STDVVNCAUTH_': 2
+            'STDVVNCAUTH_': 2,
+            'TGHTULGNAUTH': 129
         };
 
         const serverSupportedTypes = [];
@@ -1068,6 +1086,9 @@ export default class RFB extends EventTargetMixin {
                     case 'STDVVNCAUTH_': // VNC auth
                         this._rfb_auth_scheme = 2;
                         return this._init_msg();
+                    case 'TGHTULGNAUTH': // UNIX auth
+                        this._rfb_auth_scheme = 129;
+                        return this._init_msg();
                     default:
                         return this._fail("Unsupported tiny auth scheme " +
                                           "(scheme: " + authType + ")");
@@ -1097,6 +1118,9 @@ export default class RFB extends EventTargetMixin {
             case 16:  // TightVNC Security Type
                 return this._negotiate_tight_auth();
 
+            case 129:  // TightVNC UNIX Security Type
+                return this._negotiate_tight_unix_auth();
+
             default:
                 return this._fail("Unsupported auth scheme (scheme: " +
                                   this._rfb_auth_scheme + ")");