You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@guacamole.apache.org by Mike Jumper <mj...@apache.org> on 2019/01/10 04:12:21 UTC

[ANNOUNCE] Apache Guacamole 1.0.0

The Apache Guacamole community is proud to announce the release of Apache
Guacamole 1.0.0.

Apache Guacamole is a clientless remote desktop gateway which supports
standard protocols like VNC, RDP, and SSH. We call it "clientless" because
no plugins or client software are required; once Guacamole is installed on
a server, all you need to access your desktops is a web browser.

The 1.0.0 release features support for user groups, improved clipboard
integration leveraging the Asynchronous Clipboard API, as well as support
for TOTP (Google Authenticator), RADIUS, and dead keys.

A full list of the changes in this release, along with links to downloads
and updated documentation, can be found in the release notes:

http://guacamole.apache.org/releases/1.0.0/

For more information on Apache Guacamole, please see:

http://guacamole.apache.org/

Thanks!

The Apache Guacamole Community

AW: [ANNOUNCE] Apache Guacamole 1.0.0

Posted by Joachim Lindenberg <jo...@lindenberg.one>.
Hi Mike, Nick,

just wanted to tell that I got my extension code fixed and it now works with 1.0.0. Thanks for spotting the issue and the hints.

Thanks & Best Regards, Joachim

 

Von: Mike Jumper <mj...@apache.org> 
Gesendet: Montag, 14. Januar 2019 06:44
An: user@guacamole.apache.org
Betreff: Re: [ANNOUNCE] Apache Guacamole 1.0.0

 

On Sun, Jan 13, 2019 at 12:11 PM Joachim Lindenberg <joachim@lindenberg.one <ma...@lindenberg.one> > wrote:

Hi Nick,

thanks. I am attaching my source code. You´ll likely notice, Java is not my favorite programming language, but anyway. Testing the code could be more challenging. My software is available from https://software.lindenberg.one/backup, and the integration is documented at https://software.lindenberg.one/backup/en/documentation/guacamole-integration (replacing 0.9.14 by 1.0.0)... I actually also have some unit test classes but removed them do to passwords etc.

 

The goal of the extension is that my customers can fire up a virtual machine out of their backups of windows systems. E.g. in case their laptop is lost, they can access the most recent version from another system (keyboard and screen resolution makes sense though). There are multiple ways to start – via guacamole entry point, via my web  ui, and via the windows ui.

 

This error points you exactly where you need to look - there's a NullPointerException occuring in the ConfiguredGuacamoleSocket.java file, in the init() method, on line 128, which is called by the SimpleConnection connection() method, on line 124, etc.  You need to trace back why something null is being passed there (presumably from your custom extension) and correct that issue.

 

 

You are passing a null GuacamoleConfiguration to the constructor:

 

https://github.com/apache/guacamole-client/blob/801a5df9f1d7095c52e594dda1a5276fe8cf6524/guacamole-common/src/main/java/org/apache/guacamole/protocol/ConfiguredGuacamoleSocket.java#L128

 

As for your overridden connect(GuacamoleClientInformation info, Map<String, String> tokens) method, that is not being called because that is not the prototype of that function. The prototype has changed on git master, yes, but this API change was not part of 1.0.0. The connect() for Connectable in the 1.0.0 extension API only takes a GuacamoleClientInformation. See:

 

http://guacamole.apache.org/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/Connectable.html#connect-org.apache.guacamole.protocol.GuacamoleClientInformation-

 

Since your connection is based on SimpleConnection, you're not actually overriding a method of SimpleConnection, but adding a new method which isn't used elsewhere. The original connect() function remains unoverridden and continues to be called.

 

I suggest wiping out your local Maven repository and rebuilding your extension. I haven't looked at your code, but assuming you're using a proper @Overrides annotation, I suspect your code won't compile due to there being no such function to override. If you recently built from guacamole-client git, your local Maven repository likely has a git master build of guacamole-ext (which would still have the 1.0.0 version number), not the guacamole-ext which is part of the 1.0.0 release and on Maven central.

 

Sure, but why is not my overridden method called? I want to do some magic (starting virtual machines) behind the scenes. This actually took most of the time to figure out what call sequence on which objects is done and where I can intercept – and then I didn´t really spend time to clean the code up once I got it to work – and also I see that would probably have been waste as now the inner logic changes.

 

There are *many* things that have changed between 0.9.14 and 1.0.0, and pretty much of all of those changes are intentional :-).

 

Sure, but what I kind of miss is a docuemtation what changed for extension coders and how to adopt to the changes. Or did I miss that?

 

 

Yep. What you're looking for is the "deprecation / compatibility notes" section of the release notes. We write one whenever a release breaks compatibility in some way with a past release, including changes to the extension API:

 

http://guacamole.apache.org/releases/1.0.0/#deprecation--compatibility-notes

 

The changes to SimpleUser and the Simple*Directory classes are deprecations and don't break anything directly. Your code will produce warnings during compilation, and you should migrate when possible, but it should continue to build:

 

http://guacamole.apache.org/releases/1.0.0/#deprecation-of-simpleuserdirectory-simpleconnectiondirectory-and-simpleconnectiongroupdirectory-classes

http://guacamole.apache.org/releases/1.0.0/#deprecation-of-simpleuser-convenience-constructors

 

There are changes to the User interface which would break the build for you if you implemented User directly, but users of AbstractUser or SimpleUser should be unaffected. Default implementations of the new functions are provided:

 

http://guacamole.apache.org/releases/1.0.0/#support-for-user-groups-1

 

If you continue chasing things down and things still aren't working for you, I suggest bringing this over to a new thread on the dev@guacamole.apache.org <ma...@guacamole.apache.org>  list. The release announcement on the user@ list was meant to be just that - an announcement. It is probably not the best thread for a development discussion.

 

- Mike

 


Re: [ANNOUNCE] Apache Guacamole 1.0.0

Posted by Mike Jumper <mj...@apache.org>.
On Sun, Jan 13, 2019 at 12:11 PM Joachim Lindenberg <jo...@lindenberg.one>
wrote:

> Hi Nick,
>
> thanks. I am attaching my source code. You´ll likely notice, Java is not
> my favorite programming language, but anyway. Testing the code could be
> more challenging. My software is available from
> https://software.lindenberg.one/backup, and the integration is documented
> at
> https://software.lindenberg.one/backup/en/documentation/guacamole-integration
> (replacing 0.9.14 by 1.0.0)... I actually also have some unit test classes
> but removed them do to passwords etc.
>
>
>
> The goal of the extension is that my customers can fire up a virtual
> machine out of their backups of windows systems. E.g. in case their laptop
> is lost, they can access the most recent version from another system
> (keyboard and screen resolution makes sense though). There are multiple
> ways to start – via guacamole entry point, via my web  ui, and via the
> windows ui.
>
>
>
> *This error points you exactly where you need to look - there's a
> NullPointerException occuring in the ConfiguredGuacamoleSocket.java file,
> in the init() method, on line 128, which is called by the SimpleConnection
> connection() method, on line 124, etc.  You need to trace back why
> something null is being passed there (presumably from your custom
> extension) and correct that issue.*
>
>
>

You are passing a null GuacamoleConfiguration to the constructor:

https://github.com/apache/guacamole-client/blob/801a5df9f1d7095c52e594dda1a5276fe8cf6524/guacamole-common/src/main/java/org/apache/guacamole/protocol/ConfiguredGuacamoleSocket.java#L128

As for your overridden connect(GuacamoleClientInformation info, Map<String,
String> tokens) method, that is not being called because that is not the
prototype of that function. The prototype has changed on git master, yes,
but this API change was not part of 1.0.0. The connect() for Connectable in
the 1.0.0 extension API only takes a GuacamoleClientInformation. See:

http://guacamole.apache.org/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/Connectable.html#connect-org.apache.guacamole.protocol.GuacamoleClientInformation-

Since your connection is based on SimpleConnection, you're not actually
overriding a method of SimpleConnection, but adding a new method which
isn't used elsewhere. The original connect() function remains unoverridden
and continues to be called.

I suggest wiping out your local Maven repository and rebuilding your
extension. I haven't looked at your code, but assuming you're using a
proper @Overrides annotation, I suspect your code won't compile due to
there being no such function to override. If you recently built from
guacamole-client git, your local Maven repository likely has a git master
build of guacamole-ext (which would still have the 1.0.0 version number),
not the guacamole-ext which is part of the 1.0.0 release and on Maven
central.

Sure, but why is not my overridden method called? I want to do some magic
> (starting virtual machines) behind the scenes. This actually took most of
> the time to figure out what call sequence on which objects is done and
> where I can intercept – and then I didn´t really spend time to clean the
> code up once I got it to work – and also I see that would probably have
> been waste as now the inner logic changes.
>
>
>
> *There are *many* things that have changed between 0.9.14 and 1.0.0, and
> pretty much of all of those changes are intentional :-).*
>
>
>
> Sure, but what I kind of miss is a docuemtation what changed for extension
> coders and how to adopt to the changes. Or did I miss that?
>
>
>
Yep. What you're looking for is the "deprecation / compatibility notes"
section of the release notes. We write one whenever a release breaks
compatibility in some way with a past release, including changes to the
extension API:

http://guacamole.apache.org/releases/1.0.0/#deprecation--compatibility-notes

The changes to SimpleUser and the Simple*Directory classes are deprecations
and don't break anything directly. Your code will produce warnings during
compilation, and you should migrate when possible, but it should continue
to build:

http://guacamole.apache.org/releases/1.0.0/#deprecation-of-simpleuserdirectory-simpleconnectiondirectory-and-simpleconnectiongroupdirectory-classes
http://guacamole.apache.org/releases/1.0.0/#deprecation-of-simpleuser-convenience-constructors

There are changes to the User interface which would break the build for you
if you implemented User directly, but users of AbstractUser or SimpleUser
should be unaffected. Default implementations of the new functions are
provided:

http://guacamole.apache.org/releases/1.0.0/#support-for-user-groups-1

If you continue chasing things down and things still aren't working for
you, I suggest bringing this over to a new thread on the
dev@guacamole.apache.org list. The release announcement on the user@ list
was meant to be just that - an announcement. It is probably not the best
thread for a development discussion.

- Mike

WG: [ANNOUNCE] Apache Guacamole 1.0.0

Posted by Joachim Lindenberg <jo...@lindenberg.one>.
Hi Nick,

thanks. I am attaching my source code. You´ll likely notice, Java is not my favorite programming language, but anyway. Testing the code could be more challenging. My software is available from https://software.lindenberg.one/backup, and the integration is documented at https://software.lindenberg.one/backup/en/documentation/guacamole-integration (replacing 0.9.14 by 1.0.0)... I actually also have some unit test classes but removed them do to passwords etc.

 

The goal of the extension is that my customers can fire up a virtual machine out of their backups of windows systems. E.g. in case their laptop is lost, they can access the most recent version from another system (keyboard and screen resolution makes sense though). There are multiple ways to start – via guacamole entry point, via my web  ui, and via the windows ui.

 

This error points you exactly where you need to look - there's a NullPointerException occuring in the ConfiguredGuacamoleSocket.java file, in the init() method, on line 128, which is called by the SimpleConnection connection() method, on line 124, etc.  You need to trace back why something null is being passed there (presumably from your custom extension) and correct that issue.

 

Sure, but why is not my overridden method called? I want to do some magic (starting virtual machines) behind the scenes. This actually took most of the time to figure out what call sequence on which objects is done and where I can intercept – and then I didn´t really spend time to clean the code up once I got it to work – and also I see that would probably have been waste as now the inner logic changes.

 

There are *many* things that have changed between 0.9.14 and 1.0.0, and pretty much of all of those changes are intentional :-).

 

Sure, but what I kind of miss is a docuemtation what changed for extension coders and how to adopt to the changes. Or did I miss that?


Thanks & Best Regards, Joachim

 


AW: [ANNOUNCE] Apache Guacamole 1.0.0

Posted by Joachim Lindenberg <jo...@lindenberg.one>.
Hi Nick,

thanks. I am attaching my source code. You´ll likely notice, Java is not my favorite programming language, but anyway. Testing the code could be more challenging. My software is available from https://software.lindenberg.one/backup, and the integration is documented at https://software.lindenberg.one/backup/en/documentation/guacamole-integration (replacing 0.9.14 by 1.0.0)... I actually also have some unit test classes but removed them do to passwords etc.

 

The goal of the extension is that my customers can fire up a virtual machine out of their backups of windows systems. E.g. in case their laptop is lost, they can access the most recent version from another system (keyboard and screen resolution makes sense though). There are multiple ways to start – via guacamole entry point, via my web  ui, and via the windows ui.

 

This error points you exactly where you need to look - there's a NullPointerException occuring in the ConfiguredGuacamoleSocket.java file, in the init() method, on line 128, which is called by the SimpleConnection connection() method, on line 124, etc.  You need to trace back why something null is being passed there (presumably from your custom extension) and correct that issue.

 

Sure, but why is not my overridden method called? I want to do some magic (starting virtual machines) behind the scenes. This actually took most of the time to figure out what call sequence on which objects is done and where I can intercept – and then I didn´t really spend time to clean the code up once I got it to work – and also I see that would probably have been waste as now the inner logic changes.

 

There are *many* things that have changed between 0.9.14 and 1.0.0, and pretty much of all of those changes are intentional :-).

 

Sure, but what I kind of miss is a docuemtation what changed for extension coders and how to adopt to the changes. Or did I miss that?


Thanks & Best Regards, Joachim

 


Re: [ANNOUNCE] Apache Guacamole 1.0.0

Posted by Nick Couchman <vn...@apache.org>.
On Sun, Jan 13, 2019 at 1:22 PM Joachim Lindenberg <jo...@lindenberg.one>
wrote:

> Hello Mike, all,
>
> I really love Guacamole! Was using 0.9.14 for almost a year now, and also
> did my own extension…
>

Great, thank you!


> Today I installed Guacamole 1.0.0 on a VM with docker and I also updated
> my authentication extension to compile against 1.0.0 and have the proper
> version.
>
> Unfortunately it doesn´t work. I get a list of configurations, but when I
> select one of them it doesn´t really connect. Same when I use my token
> approach.
>
>
>
> The log contains the following exception:
>
>
>
> 13-Jan-2019 16:50:13.610 SEVERE [http-nio-8080-exec-7]
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process Error reading
> request, ignored
>
> java.lang.NullPointerException
>
>         at
> org.apache.guacamole.protocol.ConfiguredGuacamoleSocket.<init>(ConfiguredGuacamoleSocket.java:128)
>
>         at
> org.apache.guacamole.net.auth.simple.SimpleConnection.connect(SimpleConnection.java:124)
>
>         at
> org.apache.guacamole.tunnel.TunnelRequestService.createConnectedTunnel(TunnelRequestService.java:219)
>
>         at
> org.apache.guacamole.tunnel.TunnelRequestService.createTunnel(TunnelRequestService.java:393)
>
>         at
> org.apache.guacamole.tunnel.websocket.RestrictedGuacamoleWebSocketTunnelEndpoint.createTunnel(RestrictedGuacamoleWebSocketTunnelEndpoint.java:113)
>
>         at
> org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint.onOpen(GuacamoleWebSocketTunnelEndpoint.java:200)
>
>         at
> org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:133)
>
>         at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:852)
>
>         at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
>
>         at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
>
>         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>
>         at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>
>         at java.lang.Thread.run(Thread.java:748)
>

This error points you exactly where you need to look - there's a
NullPointerException occuring in the ConfiguredGuacamoleSocket.java file,
in the init() method, on line 128, which is called by the SimpleConnection
connection() method, on line 124, etc.  You need to trace back why
something null is being passed there (presumably from your custom
extension) and correct that issue.


>
>
> My extension actually returns objects that derive from
> GuacamoleConfiguration, SimpleConnection or AbstractConnectionGroup in the
> user context, and the class deriving from SimpleConnection overrides
> connect(GuacamoleClientInformation info, Map<String, String> tokens). I
> cannot see my connect method being called (I am doing some output there) as
> in 0.9.14, but the stack trace indicates that SimpleConnection.connect() is
> called. Now I am wondering how I can get my overrides being called as in
> 0.9.14. Also not really sure, but speculating I would assume guacamole kind
> of copies the contents of Connection rather than using the ones I return in
> the context.
>
>
>
> I didn´t change anything with respect to permissions, nor did I replace
> references to SmpleUser(Directory) or SimpleConnection(Group)Directory.
>
> Was this a deliberate change in 1.0 that I missed to recognize? Side
> effect of something else? Is there any other cause you can think of what I
> am doing wrong or should try differently?
>

There are *many* things that have changed between 0.9.14 and 1.0.0, and
pretty much of all of those changes are intentional :-).

If you're willing to share your source code, we could probably help track
it down.  If you're keeping that closed, then you're going to be on your
own in determining which of the changes is causing this issue.

-Nick

AW: [ANNOUNCE] Apache Guacamole 1.0.0

Posted by Joachim Lindenberg <jo...@lindenberg.one>.
Hello Mike, all,

I really love Guacamole! Was using 0.9.14 for almost a year now, and also did my own extension…

Today I installed Guacamole 1.0.0 on a VM with docker and I also updated my authentication extension to compile against 1.0.0 and have the proper version.

Unfortunately it doesn´t work. I get a list of configurations, but when I select one of them it doesn´t really connect. Same when I use my token approach.

 

The log contains the following exception:

 

13-Jan-2019 16:50:13.610 SEVERE [http-nio-8080-exec-7] org.apache.coyote.AbstractProtocol$ConnectionHandler.process Error reading request, ignored

java.lang.NullPointerException

        at org.apache.guacamole.protocol.ConfiguredGuacamoleSocket.<init>(ConfiguredGuacamoleSocket.java:128)

        at org.apache.guacamole.net.auth.simple.SimpleConnection.connect(SimpleConnection.java:124)

        at org.apache.guacamole.tunnel.TunnelRequestService.createConnectedTunnel(TunnelRequestService.java:219)

        at org.apache.guacamole.tunnel.TunnelRequestService.createTunnel(TunnelRequestService.java:393)

        at org.apache.guacamole.tunnel.websocket.RestrictedGuacamoleWebSocketTunnelEndpoint.createTunnel(RestrictedGuacamoleWebSocketTunnelEndpoint.java:113)

        at org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint.onOpen(GuacamoleWebSocketTunnelEndpoint.java:200)

        at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:133)

        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:852)

        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)

        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

        at java.lang.Thread.run(Thread.java:748)

 

My extension actually returns objects that derive from GuacamoleConfiguration, SimpleConnection or AbstractConnectionGroup in the user context, and the class deriving from SimpleConnection overrides connect(GuacamoleClientInformation info, Map<String, String> tokens). I cannot see my connect method being called (I am doing some output there) as in 0.9.14, but the stack trace indicates that SimpleConnection.connect() is called. Now I am wondering how I can get my overrides being called as in 0.9.14. Also not really sure, but speculating I would assume guacamole kind of copies the contents of Connection rather than using the ones I return in the context.

 

I didn´t change anything with respect to permissions, nor did I replace references to SmpleUser(Directory) or SimpleConnection(Group)Directory.

Was this a deliberate change in 1.0 that I missed to recognize? Side effect of something else? Is there any other cause you can think of what I am doing wrong or should try differently?

 

Thanks & Best Regards,

Joachim

 

 

Von: Mike Jumper <mj...@apache.org> 
Gesendet: Donnerstag, 10. Januar 2019 05:12
An: announce@apache.org; announce@guacamole.apache.org; dev@guacamole.apache.org; user@guacamole.apache.org
Betreff: [ANNOUNCE] Apache Guacamole 1.0.0

 

The Apache Guacamole community is proud to announce the release of Apache

Guacamole 1.0.0.

 

Apache Guacamole is a clientless remote desktop gateway which supports standard protocols like VNC, RDP, and SSH. We call it "clientless" because no plugins or client software are required; once Guacamole is installed on a server, all you need to access your desktops is a web browser.

 

The 1.0.0 release features support for user groups, improved clipboard integration leveraging the Asynchronous Clipboard API, as well as support for TOTP (Google Authenticator), RADIUS, and dead keys.

 

A full list of the changes in this release, along with links to downloads and updated documentation, can be found in the release notes:

 

http://guacamole.apache.org/releases/1.0.0/

 

For more information on Apache Guacamole, please see:

 

http://guacamole.apache.org/

 

Thanks!

 

The Apache Guacamole Community