Also note that I did not regenerate the automake/autoconf files - the
configure.in file is changed but nothing else since I have a newer
version of the Autotools.  Please run autogen.sh and commit those
changes on both 3-0 and 2-1 (or I can do it and submit that if you like,
it's just going to be done with automake 1.11 and autoconf 2.68)

Thanks,
AJ

On Tue, Nov 08, 2011 at 12:09:04PM -0600, AJ Lewis wrote:
> 
> On Tue, Nov 08, 2011 at 08:19:31AM +0900, Pieter Hintjens wrote:
> > On Mon, Nov 7, 2011 at 11:50 PM, AJ Lewis <[email protected]> wrote:
> > 
> > >> I apply the patches to 3-0 there's a conflict (src/device.cpp is
> > >> deleted). Any chance you can make a pull request for 3-0 as well?
> > >
> > > Sure, I should be able to.  I'll check it out and see what I find.
> > >  You want both the AIX and HPUX fixes, correct?
> > 
> > (Sorry for the slow answer). Yes, please.
> 
> Attached are the HP-UX equivilant changes for the 3-0 branch.  I've also
> generated a pull request, though I'm afraid it's rather messy - I
> accidentally pushed in the middle of an interactive rebase, so things
> diverged in my own tree! I won't feel bad if you ignore the pull request
> and just apply the attached patches.
> 
> The AIX change was not necessary, but there are other changes that are
> still pending to get 3-0 working with AIX that I will send (hopefully)
> soon.
> 
> Thanks,
> -- 
> AJ Lewis
> Software Engineer
> Quantum Corporation
> 
> Work:    651 688-4346
> 
> ----------------------------------------------------------------------
> The information contained in this transmission may be confidential. Any 
> disclosure, copying, or further distribution of confidential information is 
> not permitted unless such privilege is explicitly granted in writing by 
> Quantum. Quantum reserves the right to have electronic communications, 
> including email and attachments, sent across its networks filtered through 
> anti virus and spam software programs and retain such messages in order to 
> comply with applicable data security and retention requirements. Quantum is 
> not responsible for the proper and complete transmission of the substance of 
> this communication or for any delay in its receipt.

> From 919228dd172845b943e4a7af1fa59c615487328e Mon Sep 17 00:00:00 2001
> From: AJ Lewis <[email protected]>
> Date: Thu, 3 Nov 2011 11:37:41 -0500
> Subject: [PATCH 1/5] Use DCE library on HP-UX to handle UUID generation
> 
> This is the initial dumb implementation - it just replaces RAND_bytes
> in the final uuid case rather than handling uuid_create() as done in
> the BSD case.
> 
> It passes the self tests, but it's probably not the correct way to do
> it.
> 
> You can also use the openssl method my using the '--without-dce' flag
> to configure.
> 
> Signed-off-by: AJ Lewis <[email protected]>
> ---
>  src/uuid.cpp |   13 ++++++++++++-
>  1 files changed, 12 insertions(+), 1 deletions(-)
> 
> diff --git a/src/uuid.cpp b/src/uuid.cpp
> index 02f716e..97bab27 100644
> --- a/src/uuid.cpp
> +++ b/src/uuid.cpp
> @@ -67,15 +67,26 @@ void zmq::generate_uuid (void *buf_)
>  
>  #else
>  
> +#if defined ZMQ_HAVE_HPUX && defined HAVE_LIBDCEKT
> +#include <dce/uuid.h>
> +#else
>  #include <openssl/rand.h>
> +#endif
>  
>  void zmq::generate_uuid (void *buf_)
>  {
>      unsigned char *buf = (unsigned char*) buf_;
> -
> +#if defined ZMQ_HAVE_HPUX && defined HAVE_LIBDCEKT
> +    ::uuid_t uuid;
> +    unsigned32 ret;
> +    uuid_create(&uuid, &ret);
> +    zmq_assert (ret == uuid_s_ok);
> +    memcpy(rand_buf, &uuid, sizeof(uuid));
> +#else
>      //  Generate random value.
>      int ret = RAND_bytes (buf, 16);
>      zmq_assert (ret == 1);
> +#endif
>  
>      //  Set UUID variant to 2 (UUID as specified in RFC4122).
>      const unsigned char variant = 2;
> -- 
> 1.7.7
> 

> From ebe1988a344a507df43e173fe0cdd1dfc621fab6 Mon Sep 17 00:00:00 2001
> From: AJ Lewis <[email protected]>
> Date: Thu, 3 Nov 2011 11:57:52 -0500
> Subject: [PATCH 2/5] Implement DCE uuid calls properly
> 
> Create HPUX & LIBDCEKT specific sections similar to BSD section.  It's
> possible that these could be merged, but I'm not sure if it would be
> as readable because there are some type differences that might make
> things difficult.
> 
> Signed-off-by: AJ Lewis <[email protected]>
> ---
>  src/uuid.cpp |   24 ++++++++++++------------
>  1 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/src/uuid.cpp b/src/uuid.cpp
> index 97bab27..6ec04f5 100644
> --- a/src/uuid.cpp
> +++ b/src/uuid.cpp
> @@ -46,6 +46,17 @@ void zmq::generate_uuid (void *buf_)
>      zmq_assert (status == uuid_s_ok);
>  }
>  
> +#elif defined ZMQ_HAVE_HPUX && defined HAVE_LIBDCEKT
> +
> +#include <dce/uuid.h>
> +
> +void zqm::generate_uuid (void *buf_)
> +{
> +    unsigned32 status;
> +    uuid_create ((::uuid_t*) buf_, &status);
> +    zmq_assert (status == uuid_s_ok);
> +}
> +
>  #elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS ||\
>        defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_CYGWIN
>  
> @@ -67,26 +78,15 @@ void zmq::generate_uuid (void *buf_)
>  
>  #else
>  
> -#if defined ZMQ_HAVE_HPUX && defined HAVE_LIBDCEKT
> -#include <dce/uuid.h>
> -#else
>  #include <openssl/rand.h>
> -#endif
>  
>  void zmq::generate_uuid (void *buf_)
>  {
>      unsigned char *buf = (unsigned char*) buf_;
> -#if defined ZMQ_HAVE_HPUX && defined HAVE_LIBDCEKT
> -    ::uuid_t uuid;
> -    unsigned32 ret;
> -    uuid_create(&uuid, &ret);
> -    zmq_assert (ret == uuid_s_ok);
> -    memcpy(rand_buf, &uuid, sizeof(uuid));
> -#else
> +
>      //  Generate random value.
>      int ret = RAND_bytes (buf, 16);
>      zmq_assert (ret == 1);
> -#endif
>  
>      //  Set UUID variant to 2 (UUID as specified in RFC4122).
>      const unsigned char variant = 2;
> -- 
> 1.7.7
> 

> From 7505b66c125c11a5ef013d673057802182c9a8ec Mon Sep 17 00:00:00 2001
> From: AJ Lewis <[email protected]>
> Date: Thu, 3 Nov 2011 12:10:35 -0500
> Subject: [PATCH 3/5] Combine the existing freebsd/netbsd section with the new
>  HP-UX DCE section
> 
> Using a couple #ifdefs, we can combine the freebsd/netbsd uuid section with
> the HP-UX DEC section in uuid.cpp.
> 
> Signed-off-by: AJ Lewis <[email protected]>
> ---
>  src/uuid.cpp |   21 +++++++++------------
>  1 files changed, 9 insertions(+), 12 deletions(-)
> 
> diff --git a/src/uuid.cpp b/src/uuid.cpp
> index 6ec04f5..fc17745 100644
> --- a/src/uuid.cpp
> +++ b/src/uuid.cpp
> @@ -35,24 +35,21 @@ void zmq::generate_uuid (void *buf_)
>      zmq_assert (ret == RPC_S_OK);
>  }
>  
> -#elif defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_NETBSD
> +#elif defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_NETBSD || (defined 
> ZMQ_HAVE_HPUX && defined HAVE_LIBDCEKT)
>  
> +#ifdef ZMQ_HAVE_HPUX
> +#include <dce/uuid.h>
> +#else
>  #include <uuid.h>
> +#endif
>  
>  void zmq::generate_uuid (void *buf_)
>  {
> -    uint32_t status;
> -    uuid_create ((::uuid_t*) buf_, &status);
> -    zmq_assert (status == uuid_s_ok);
> -}
> -
> -#elif defined ZMQ_HAVE_HPUX && defined HAVE_LIBDCEKT
> -
> -#include <dce/uuid.h>
> -
> -void zqm::generate_uuid (void *buf_)
> -{
> +#ifdef ZMQ_HAVE_HPUX
>      unsigned32 status;
> +#else
> +    uint32_t status;
> +#endif
>      uuid_create ((::uuid_t*) buf_, &status);
>      zmq_assert (status == uuid_s_ok);
>  }
> -- 
> 1.7.7
> 

> From 6eebb800207dd38a44a18c5a47ad4924ed794616 Mon Sep 17 00:00:00 2001
> From: AJ Lewis <[email protected]>
> Date: Mon, 7 Nov 2011 15:24:12 -0600
> Subject: [PATCH 4/5] Put UUID into a temporary var when calling uuid_create()
>  and memcpy it into buf_
> 
> On HP-UX, when using libdcekt's uuid_create() function, I get bus
> errors if we attempt to use buf_ in uuid_create() directly.  It
> appears that the buffer needs to be aligned when it is passed through
> uuid_create().  So now we just create a temporary uuid_t, pass that to
> uuid_create(), and memcpy the result into the buf_, making sure to not
> overrun either buffer in the process.
> 
> Signed-off-by: AJ Lewis <[email protected]>
> ---
>  src/uuid.cpp |    9 ++++++++-
>  1 files changed, 8 insertions(+), 1 deletions(-)
> 
> diff --git a/src/uuid.cpp b/src/uuid.cpp
> index fc17745..8b1cbe8 100644
> --- a/src/uuid.cpp
> +++ b/src/uuid.cpp
> @@ -45,13 +45,20 @@ void zmq::generate_uuid (void *buf_)
>  
>  void zmq::generate_uuid (void *buf_)
>  {
> +    ::uuid_t tmp_uuid;
>  #ifdef ZMQ_HAVE_HPUX
>      unsigned32 status;
>  #else
>      uint32_t status;
>  #endif
> -    uuid_create ((::uuid_t*) buf_, &status);
> +    /* Make sure we don't overrun the buffer */
> +    int size = sizeof (tmp_uuid);
> +    if (size > 16)
> +     size = 16;
> +
> +    uuid_create (&tmp_uuid, &status);
>      zmq_assert (status == uuid_s_ok);
> +    memcpy (buf_, &tmp_uuid, size);
>  }
>  
>  #elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS ||\
> -- 
> 1.7.7
> 

> From 86fe189d6d2a18c663074ecb7371f6c331630953 Mon Sep 17 00:00:00 2001
> From: AJ Lewis <[email protected]>
> Date: Tue, 8 Nov 2011 08:41:16 -0600
> Subject: [PATCH 5/5] Assert if buf_ passed into generate_uuid is NULL
> 
> Signed-off-by: AJ Lewis <[email protected]>
> ---
>  src/uuid.cpp |    8 +++++++-
>  1 files changed, 7 insertions(+), 1 deletions(-)
> 
> diff --git a/src/uuid.cpp b/src/uuid.cpp
> index 8b1cbe8..45047e8 100644
> --- a/src/uuid.cpp
> +++ b/src/uuid.cpp
> @@ -31,6 +31,7 @@
>  
>  void zmq::generate_uuid (void *buf_)
>  {
> +    zmq_assert (buf_ != NULL);
>      RPC_STATUS ret = UuidCreate ((::UUID*) buf_);
>      zmq_assert (ret == RPC_S_OK);
>  }
> @@ -58,6 +59,7 @@ void zmq::generate_uuid (void *buf_)
>  
>      uuid_create (&tmp_uuid, &status);
>      zmq_assert (status == uuid_s_ok);
> +    zmq_assert (buf_ != NULL);
>      memcpy (buf_, &tmp_uuid, size);
>  }
>  
> @@ -68,6 +70,7 @@ void zmq::generate_uuid (void *buf_)
>  
>  void zmq::generate_uuid (void *buf_)
>  {
> +    zmq_assert (buf_ != NULL);
>      uuid_generate ((unsigned char*) buf_);
>  }
>  
> @@ -77,7 +80,8 @@ void zmq::generate_uuid (void *buf_)
>  
>  void zmq::generate_uuid (void *buf_)
>  {
> -    sys$create_uid(buf_);
> +    zmq_assert (buf_ != NULL);
> +    sys$create_uid(buf_);]
>  }
>  
>  #else
> @@ -86,6 +90,8 @@ void zmq::generate_uuid (void *buf_)
>  
>  void zmq::generate_uuid (void *buf_)
>  {
> +    zmq_assert (buf_ != NULL);
> +
>      unsigned char *buf = (unsigned char*) buf_;
>  
>      //  Generate random value.
> -- 
> 1.7.7
> 

> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev


-- 
AJ Lewis
Software Engineer
Quantum Corporation

Work:    651 688-4346
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to