]> source.dussan.org Git - tigervnc.git/commitdiff
Do not depends on mcookie command 366/head
authorKoichiro IWAO <meta@vmeta.jp>
Tue, 4 Oct 2016 08:17:06 +0000 (17:17 +0900)
committerKoichiro IWAO <meta@vmeta.jp>
Wed, 5 Oct 2016 07:58:46 +0000 (16:58 +0900)
for operating systems other than GNU/Linux.

mcookie is a part of util-linux. Usually only GNU/Linux systems have it.
Do not die even if mcookie is not found. Use the previous pure perl code
to generate cookie as fallback.

unix/vncserver

index c59106ca4f6eba0202bc17d51ea7aa9bd2b4d9d5..2ef436a7a47b229c585503c2bf9468eed8c314e6 100755 (executable)
@@ -293,8 +293,24 @@ $desktopLog = "$vncUserDir/$host:$displayNumber.log";
 unlink($desktopLog);
 
 # Make an X server cookie and set up the Xauthority file
-
+# mcookie is a part of util-linux, usually only GNU/Linux systems have it.
 $cookie = `mcookie`;
+# Fallback for non GNU/Linux OS - use /dev/urandom on systems that have it,
+# otherwise use perl's random number generator, seeded with the sum
+# of the current time, our PID and part of the encrypted form of the password.
+if ($cookie eq "" && open(URANDOM, '<', '/dev/urandom')) {
+  my $randata;
+  if (sysread(URANDOM, $randata, 16) == 16) {
+    $cookie = unpack 'h*', $randata;
+  }
+  close(URANDOM);
+}
+if ($cookie eq "") {
+  srand(time+$$+unpack("L",`cat $vncUserDir/passwd`));
+  for (1..16) {
+    $cookie .= sprintf("%02x", int(rand(256)) % 256);
+  }
+}
 
 open(XAUTH, "|xauth -f $xauthorityFile source -");
 print XAUTH "add $host:$displayNumber . $cookie\n";
@@ -818,7 +834,7 @@ sub SanityCheck
     #
 
  cmd:
-    foreach $cmd ("uname","mcookie","xauth") {
+    foreach $cmd ("uname","xauth") {
        for (split(/:/,$ENV{PATH})) {
            if (-x "$_/$cmd") {
                next cmd;