On Thu, Nov 11, 2010 at 10:51:46PM +0100, Martin Koegler wrote:
> Two general comments:

Thanks for your comments, I've modified the patch and
commited it as r4198.

> * This patch will probably break the windows build, as it adds an
> msg!=NULL assert without setting the variable on Windows. The best
> solution would be to add the windows implementation too.

I didn't remove the assertion for now so vncviewer on Windows is
temporarily broken. I will implement showMsgBox and everything will be
fine after that.

> * CSecurityTLS is only available, if tigervnc is built with GNUTLS.
> So it should break any non-GNUTLS build. I would msg to CSecurity to
> avoid many ifdefs.
> 
> In the following, I'll assume, that msg has been move to CSecurity:
> 
> > Index: unix/vncviewer/CConn.cxx
> > ===================================================================
> > --- unix/vncviewer/CConn.cxx        (revision 4194)
> > +++ unix/vncviewer/CConn.cxx        (working copy)
> > @@ -21,6 +21,9 @@
> >  //
> >  
> >  #include <unistd.h>
> > +#include <errno.h>
> > +#include <sys/stat.h>
> > +#include <sys/types.h>
> 
> I can't spot any change in this file, requiring this.
> 
> 
> > Index: unix/vncviewer/vncviewer.cxx
> > ===================================================================
> > --- unix/vncviewer/vncviewer.cxx    (revision 4194)
> > +++ unix/vncviewer/vncviewer.cxx    (working copy)
> > @@ -33,6 +33,7 @@
> >  #include <locale.h>
> >  #include <os/os.h>
> >  #include <rfb/Logger_stdio.h>
> > +#include <rfb/CSecurityTLS.h>
> >  #include <rfb/LogWriter.h>
> >  #include <network/TcpSocket.h>
> >  #include "TXWindow.h"
> > @@ -278,6 +279,8 @@
> >                              "Copyright (C) 2004-2009 Peter Astrand for 
> > Cendio AB\n"
> >                              "See http://www.tigervnc.org for information 
> > on TigerVNC.");
> >  
> > +  rfb::CSecurityTLS::setDefaults();
> > +
> >    // Write about text to console, still using normal locale codeset
> >    snprintf(aboutText, sizeof(aboutText),
> >        gettext(englishAbout), PACKAGE_VERSION, buildtime);
> 
> This will break non-GNUTLS builds. 
> 
> Just an idea:
> 
> As the whole thing (with ifdefs) is needed on unix/windows server, why
> not add a SecurityClient::setDefaults:
> 
> void SecurityClient::setDefaults()
> {
> #ifdef HAVE_GNUTLS
>    CSecurityTLS::setDefaults();
> #endif
> }
> 
> So only SecurityClient/Server needs to know, if TLS is supported.
> 
> > Index: common/rfb/CSecurityTLS.cxx
> > ===================================================================
> > --- common/rfb/CSecurityTLS.cxx     (revision 4194)
> > +++ common/rfb/CSecurityTLS.cxx     (working copy)
> > @@ -76,6 +82,24 @@
> >    crlfile = x509crl.getData();
> >  }
> >  
> > +void CSecurityTLS::setDefaults()
> > +{
> > +  char* homeDir = NULL;
> > +
> > +  if (strlen(x509ca.getData()) == 0) {
> 
> Why didn't you just unconditionally change the default value, regardless of 
> the user setting?
> This way, the default value should be consitent.
> 
> > +    if (gethomedir(&homeDir) == -1)
> > +      vlog.error("Could not obtain home directory path, failed to open 
> > ~/.vnc/x509_certs");
> 
> Wouldn't be the first part of the error message more meaningful:
> +      vlog.error("Could not obtain home directory path");
> 
> > +    else {
> > +      CharArray caDefault(strlen(homeDir)+17);
> > +      sprintf(caDefault.buf, "%s/.vnc/x509_certs", homeDir);
> > +      delete [] homeDir;
> 
> > +
> > +      if (!access(caDefault.buf, R_OK))
> > +        x509ca.setDefaultStr(strdup(caDefault.buf));
> 
>   else vlog.error("Failed to open ~/.vnc/x509_certs"); 
> 
> 
> Question: Why do you need to do the access check? 
> 
> In my option, a different default (dependend on the existance of a
> file) is something unexpected.
> 
> Is the access check necessary, because the TLS setup bails out, if
> there is no CA file?
> 
> In this case, I would change the TLS setup, so that it handles a
> missing CA file like an empty CA file parameter.
> 
> > +    if (status & GNUTLS_CERT_SIGNER_NOT_FOUND) {
> > +      size_t out_size;
> > +      char *homeDir = NULL;
> > +      char *out_buf;
> > +      char *certinfo;
> > +      int len = 0;
> > +
> > +      vlog.debug("certificate issuer unknown");
> > +
> > +      len = snprintf(NULL, 0, "This certificate has been signed by an 
> > unknown authority:\n\n%s\n\nDo you want to save it and continue?\n ", 
> > info.data);
> > +      if (len < 0)
> > +        AuthFailureException("certificate decoding error");
> > +
> > +      vlog.debug("%s", info.data);
> > +
> > +      certinfo = (char*) malloc(len);
> > +      snprintf(certinfo, len, "This certificate has been signed by an 
> > unknown authority:\n\n%s\n\nDo you want to save it and continue? ", 
> > info.data);
> 
> I would split the possibilty to accept and save. So you can first try
> out a server without having to manually delete a certificate from a
> file, if the server does not match the expectations.
> 
> On the other hand, ssh does the same.

I didn't modified original logic so currently vncviewer does it same
way as ssh.

Regards, Adam

-- 
Adam Tkac, Red Hat, Inc.

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
Tigervnc-devel mailing list
Tigervnc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-devel

Reply via email to