Your message dated Tue, 22 Apr 2008 13:02:11 +0000
with message-id <[EMAIL PROTECTED]>
and subject line Bug#459516: fixed in libupnp 1.6.5-2
has caused the Debian Bug report #459516,
regarding libupnp: Non-DFSG license for upnp/src/uuid/md5.c and 
upnp/src/inc/md5.h
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [EMAIL PROTECTED]
immediately.)


-- 
459516: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=459516
Debian Bug Tracking System
Contact [EMAIL PROTECTED] with problems
--- Begin Message ---
Source: libupnp
Severity: serious
Tags: patch

upnp/src/uuid/md5.c and upnp/src/inc/md5.h contain this clause.

/*  Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
    rights reserved.

    License to copy and use this software is granted provided that it
    is identified as the &quot;RSA Data Security, Inc. MD5 Message-Digest
    Algorithm&quot; in all material mentioning or referencing this software
    or this function.

    License is also granted to make and use derivative works provided
    that such works are identified as &quot;derived from the RSA Data
    Security, Inc. MD5 Message-Digest Algorithm&quot; in all material
    mentioning or referencing the derived work.

    RSA Data Security, Inc. makes no representations concerning either
    the merchantability of this software or the suitability of this
    software for any particular purpose. It is provided &quot;as is&quot;
    without express or implied warranty of any kind.

    These notices must be retained in any copies of any part of this
    documentation and/or software.
*/

This is non-DFSG as there's no explicit permission to distribute
derivative works (fails DFSG#3).

I suggest using the implementation used for dpkg. Attached are the two
files from dpkg (lib/md5.c and lib/md5.h) and a patch that was
delivered to mediatomb.cc for the same issue (they use an internal
copy of libupnp, so it should be relatively easy to apply).

-- 
Regards,
Andres Mejia
/*
 * This code implements the MD5 message-digest algorithm.
 * The algorithm is due to Ron Rivest.  This code was
 * written by Colin Plumb in 1993, no copyright is claimed.
 * This code is in the public domain; do with it what you wish.
 *
 * Equivalent code is available from RSA Data Security, Inc.
 * This code has been tested against that, and is equivalent,
 * except that you don't need to include two pages of legalese
 * with every copy.
 *
 * To compute the message digest of a chunk of bytes, declare an
 * MD5Context structure, pass it to MD5Init, call MD5Update as
 * needed on buffers full of bytes, and then call MD5Final, which
 * will fill a supplied 16-byte array with the digest.
 *
 * Changed so as no longer to depend on Colin Plumb's `usual.h' header
 * definitions; now uses stuff from dpkg's config.h.
 *  - Ian Jackson <[EMAIL PROTECTED]>.
 * Still in the public domain.
 */
#include "config.h"

#include <string.h>		/* for memcpy() */
#include <sys/types.h>		/* for stupid systems */
#include <netinet/in.h>		/* for ntohl() */

#include "md5.h"

#ifdef WORDS_BIGENDIAN
void
byteSwap(UWORD32 *buf, unsigned words)
{
	md5byte *p = (md5byte *)buf;

	do {
		*buf++ = (UWORD32)((unsigned)p[3] << 8 | p[2]) << 16 |
			((unsigned)p[1] << 8 | p[0]);
		p += 4;
	} while (--words);
}
#else
#define byteSwap(buf,words)
#endif

/*
 * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
 * initialization constants.
 */
void
MD5Init(struct MD5Context *ctx)
{
	ctx->buf[0] = 0x67452301;
	ctx->buf[1] = 0xefcdab89;
	ctx->buf[2] = 0x98badcfe;
	ctx->buf[3] = 0x10325476;

	ctx->bytes[0] = 0;
	ctx->bytes[1] = 0;
}

/*
 * Update context to reflect the concatenation of another buffer full
 * of bytes.
 */
void
MD5Update(struct MD5Context *ctx, md5byte const *buf, unsigned len)
{
	UWORD32 t;

	/* Update byte count */

	t = ctx->bytes[0];
	if ((ctx->bytes[0] = t + len) < t)
		ctx->bytes[1]++;	/* Carry from low to high */

	t = 64 - (t & 0x3f);	/* Space available in ctx->in (at least 1) */
	if (t > len) {
		memcpy((md5byte *)ctx->in + 64 - t, buf, len);
		return;
	}
	/* First chunk is an odd size */
	memcpy((md5byte *)ctx->in + 64 - t, buf, t);
	byteSwap(ctx->in, 16);
	MD5Transform(ctx->buf, ctx->in);
	buf += t;
	len -= t;

	/* Process data in 64-byte chunks */
	while (len >= 64) {
		memcpy(ctx->in, buf, 64);
		byteSwap(ctx->in, 16);
		MD5Transform(ctx->buf, ctx->in);
		buf += 64;
		len -= 64;
	}

	/* Handle any remaining bytes of data. */
	memcpy(ctx->in, buf, len);
}

/*
 * Final wrapup - pad to 64-byte boundary with the bit pattern 
 * 1 0* (64-bit count of bits processed, MSB-first)
 */
void
MD5Final(md5byte digest[16], struct MD5Context *ctx)
{
	int count = ctx->bytes[0] & 0x3f;	/* Number of bytes in ctx->in */
	md5byte *p = (md5byte *)ctx->in + count;

	/* Set the first char of padding to 0x80.  There is always room. */
	*p++ = 0x80;

	/* Bytes of padding needed to make 56 bytes (-8..55) */
	count = 56 - 1 - count;

	if (count < 0) {	/* Padding forces an extra block */
		memset(p, 0, count + 8);
		byteSwap(ctx->in, 16);
		MD5Transform(ctx->buf, ctx->in);
		p = (md5byte *)ctx->in;
		count = 56;
	}
	memset(p, 0, count);
	byteSwap(ctx->in, 14);

	/* Append length in bits and transform */
	ctx->in[14] = ctx->bytes[0] << 3;
	ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29;
	MD5Transform(ctx->buf, ctx->in);

	byteSwap(ctx->buf, 4);
	memcpy(digest, ctx->buf, 16);
	memset(ctx, 0, sizeof(ctx));	/* In case it's sensitive */
}

#ifndef ASM_MD5

/* The four core functions - F1 is optimized somewhat */

/* #define F1(x, y, z) (x & y | ~x & z) */
#define F1(x, y, z) (z ^ (x & (y ^ z)))
#define F2(x, y, z) F1(z, x, y)
#define F3(x, y, z) (x ^ y ^ z)
#define F4(x, y, z) (y ^ (x | ~z))

/* This is the central step in the MD5 algorithm. */
#define MD5STEP(f,w,x,y,z,in,s) \
	 (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)

/*
 * The core of the MD5 algorithm, this alters an existing MD5 hash to
 * reflect the addition of 16 longwords of new data.  MD5Update blocks
 * the data and converts bytes into longwords for this routine.
 */
void
MD5Transform(UWORD32 buf[4], UWORD32 const in[16])
{
	register UWORD32 a, b, c, d;

	a = buf[0];
	b = buf[1];
	c = buf[2];
	d = buf[3];

	MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
	MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
	MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
	MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
	MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
	MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
	MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
	MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
	MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
	MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
	MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
	MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
	MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
	MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
	MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
	MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);

	MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
	MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
	MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
	MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
	MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
	MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
	MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
	MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
	MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
	MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
	MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
	MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
	MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
	MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
	MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
	MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);

	MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
	MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
	MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
	MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
	MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
	MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
	MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
	MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
	MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
	MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
	MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
	MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
	MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
	MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
	MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
	MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);

	MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
	MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
	MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
	MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
	MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
	MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
	MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
	MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
	MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
	MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
	MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
	MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
	MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
	MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
	MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
	MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);

	buf[0] += a;
	buf[1] += b;
	buf[2] += c;
	buf[3] += d;
}

#endif
/*
 * This is the header file for the MD5 message-digest algorithm.
 * The algorithm is due to Ron Rivest.  This code was
 * written by Colin Plumb in 1993, no copyright is claimed.
 * This code is in the public domain; do with it what you wish.
 *
 * Equivalent code is available from RSA Data Security, Inc.
 * This code has been tested against that, and is equivalent,
 * except that you don't need to include two pages of legalese
 * with every copy.
 *
 * To compute the message digest of a chunk of bytes, declare an
 * MD5Context structure, pass it to MD5Init, call MD5Update as
 * needed on buffers full of bytes, and then call MD5Final, which
 * will fill a supplied 16-byte array with the digest.
 *
 * Changed so as no longer to depend on Colin Plumb's `usual.h'
 * header definitions; now uses stuff from dpkg's config.h
 *  - Ian Jackson <[EMAIL PROTECTED]>.
 * Still in the public domain.
 */

#ifndef MD5_H
#define MD5_H

#define md5byte unsigned char

#if SIZEOF_UNSIGNED_LONG==4
# define UWORD32 unsigned long
#elif SIZEOF_UNSIGNED_INT==4
# define UWORD32 unsigned int
#else
# error I do not know what to use for a UWORD32.
#endif

struct MD5Context {
	UWORD32 buf[4];
	UWORD32 bytes[2];
	UWORD32 in[16];
};

void MD5Init(struct MD5Context *context);
void MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len);
void MD5Final(unsigned char digest[16], struct MD5Context *context);
void MD5Transform(UWORD32 buf[4], UWORD32 const in[16]);

#endif /* !MD5_H */
diff -urN upstream/mediatomb-0.10.0/configure.ac mediatomb-0.10.0/configure.ac
--- upstream/mediatomb-0.10.0/configure.ac      2007-07-12 15:13:43.000000000 -0400
+++ mediatomb-0.10.0/configure.ac       2007-12-28 13:22:55.000000000 -0500
@@ -682,6 +682,8 @@
 AC_CHECK_SIZEOF(off_t, 4)
 AC_CHECK_SIZEOF(size_t, 4)
 AC_CHECK_SIZEOF(time_t, 4)
+AC_CHECK_SIZEOF(unsigned int)
+AC_CHECK_SIZEOF(unsigned long)
 AC_CHECK_FUNCS(strtoll nl_langinfo setlocale,[],[])
 AC_CHECK_FUNCS(backtrace backtrace_symbols,[],[])
 # Checks for typedefs, structures, and compiler characteristics.
@@ -691,6 +693,7 @@
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 AC_STRUCT_TM
+AC_C_BIGENDIAN

 AC_ARG_ENABLE(rpl-malloc,
         AC_HELP_STRING([--disable-rpl-malloc], [disable redefinition of malloc to rpl_malloc and realloc to rpl_realloc. Use this if you are sure that you are compiling for the GNU C library (default: enabled)]),
diff -urN upstream/mediatomb-0.10.0/tombupnp/upnp/src/inc/upnp_md5.h mediatomb-0.10.0/tombupnp/upnp/src/inc/upnp_md5.h
--- upstream/mediatomb-0.10.0/tombupnp/upnp/src/inc/upnp_md5.h	2007-07-12 15:13:36.000000000 -0400
+++ mediatomb-0.10.0/tombupnp/upnp/src/inc/upnp_md5.h	2007-12-28 13:49:59.000000000 -0500
@@ -1,38 +1,47 @@
-/* MD5.H - header file for MD5C.C */
+/*
+ * This is the header file for the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest.  This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
+ *
+ * Changed so as no longer to depend on Colin Plumb's `usual.h'
+ * header definitions; now uses stuff from dpkg's config.h
+ *  - Ian Jackson <[EMAIL PROTECTED]>.
+ * Still in the public domain.
+ */
+
+#ifndef MD5_H
+#define MD5_H
+
+#define md5byte unsigned char
+
+#if SIZEOF_UNSIGNED_LONG==4
+# define UWORD32 unsigned long
+#elif SIZEOF_UNSIGNED_INT==4
+# define UWORD32 unsigned int
+#else
+# error I do not know what to use for a UWORD32.
+#endif
+
+struct MD5Context {
+	UWORD32 buf[4];
+	UWORD32 bytes[2];
+	UWORD32 in[16];
+};
+
+void MD5Init(struct MD5Context *context);
+void MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len);
+void MD5Final(unsigned char digest[16], struct MD5Context *context);
+void MD5Transform(UWORD32 buf[4], UWORD32 const in[16]);
 
-
-/*  Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-    rights reserved.
-
-    License to copy and use this software is granted provided that it
-    is identified as the &quot;RSA Data Security, Inc. MD5 Message-Digest
-    Algorithm&quot; in all material mentioning or referencing this software
-    or this function.
-
-    License is also granted to make and use derivative works provided
-    that such works are identified as &quot;derived from the RSA Data
-    Security, Inc. MD5 Message-Digest Algorithm&quot; in all material
-    mentioning or referencing the derived work.
-
-    RSA Data Security, Inc. makes no representations concerning either
-    the merchantability of this software or the suitability of this
-    software for any particular purpose. It is provided &quot;as is&quot;
-    without express or implied warranty of any kind.
-
-    These notices must be retained in any copies of any part of this
-    documentation and/or software.
-*/
-
-
-/* MD5 context. */
-typedef struct {
-
-  UINT4 state[4];                                   /* state (ABCD) */
-  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
-  unsigned char buffer[64];                         /* input buffer */
-
-} MD5_CTX;
-
-void MD5Init PROTO_LIST ((MD5_CTX *));
-void MD5Update PROTO_LIST ((MD5_CTX *, unsigned char *, unsigned int));
-void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));
+#endif /* !MD5_H */
diff -urN upstream/mediatomb-0.10.0/tombupnp/upnp/src/uuid/sysdep.c mediatomb-0.10.0/tombupnp/upnp/src/uuid/sysdep.c
--- upstream/mediatomb-0.10.0/tombupnp/upnp/src/uuid/sysdep.c	2007-07-12 15:13:36.000000000 -0400
+++ mediatomb-0.10.0/tombupnp/upnp/src/uuid/sysdep.c	2007-12-28 13:49:10.000000000 -0500
@@ -85,7 +85,7 @@
 void
 get_random_info( char seed[16] )
 {
-    MD5_CTX c;
+    struct MD5Context c;
     typedef struct {
         MEMORYSTATUS m;
         SYSTEM_INFO s;
@@ -147,7 +147,7 @@
 void
 get_random_info( char seed[16] )
 {
-    MD5_CTX c;
+    struct MD5Context c;
     typedef struct {
 //        struct sysinfo s;
         struct timeval t;
diff -urN upstream/mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_md5.c mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_md5.c
--- upstream/mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_md5.c	2007-07-12 15:13:36.000000000 -0400
+++ mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_md5.c	2007-12-28 13:52:16.000000000 -0500
@@ -1,432 +1,241 @@
 /*
-   MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm 
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest.  This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
+ *
+ * Changed so as no longer to depend on Colin Plumb's `usual.h' header
+ * definitions; now uses stuff from dpkg's config.h.
+ *  - Ian Jackson <[EMAIL PROTECTED]>.
+ * Still in the public domain.
  */
-
-/*
-   Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-   rights reserved.
-
-   License to copy and use this software is granted provided that it
-   is identified as the &quot;RSA Data Security, Inc. MD5 Message-Digest
-   Algorithm&quot; in all material mentioning or referencing this software
-   or this function.
-
-   License is also granted to make and use derivative works provided
-   that such works are identified as &quot;derived from the RSA Data
-   Security, Inc. MD5 Message-Digest Algorithm&quot; in all material
-   mentioning or referencing the derived work.
-
-   RSA Data Security, Inc. makes no representations concerning either
-   the merchantability of this software or the suitability of this
-   software for any particular purpose. It is provided &quot;as is&quot;
-   without express or implied warranty of any kind.
-
-   These notices must be retained in any copies of any part of this
-   documentation and/or software.
-
- */
-
 #include "config.h"
-#include "global.h"
-#include "upnp_md5.h"
 
-/*
-   Constants for MD5Transform routine. 
- */
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform PROTO_LIST( ( UINT4[4],
-                                       unsigned char[64] ) );
-static void Encode PROTO_LIST( ( unsigned char *,
-                                 UINT4 *,
-                                 unsigned int ) );
-
-static void Decode PROTO_LIST( ( UINT4 *,
-                                 unsigned char *,
-                                 unsigned int ) );
-
-static void MD5_memcpy PROTO_LIST( ( POINTER,
-                                     POINTER,
-                                     unsigned int ) );
-static void MD5_memset PROTO_LIST( ( POINTER,
-                                     int,
-                                     unsigned int ) );
-
-static unsigned char PADDING[64] = {
-    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
+#include <string.h>		/* for memcpy() */
+#include <sys/types.h>		/* for stupid systems */
+#include <netinet/in.h>		/* for ntohl() */
 
-/*
-   F, G, H and I are basic MD5 functions. 
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/*
-   ROTATE_LEFT rotates x left n bits. 
- */
-#define ROTATE_LEFT(x, n) (((x) <<(n)) | ((x) >> (32-(n))))
-
-/*
-   FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-   Rotation is separate from addition to prevent recomputation. 
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
+#include "upnp_md5.h"
 
-/*
-   MD5 initialization. Begins an MD5 operation, writing a new context. 
- */
+#ifdef WORDS_BIGENDIAN
 void
-MD5Init( context )
-     MD5_CTX *context;          /* context */
+byteSwap(UWORD32 *buf, unsigned words)
 {
-    context->count[0] = context->count[1] = 0;
+	md5byte *p = (md5byte *)buf;
 
-    /*
-       Load magic initialization constants.
-     */
-    context->state[0] = 0x67452301;
-    context->state[1] = 0xefcdab89;
-    context->state[2] = 0x98badcfe;
-    context->state[3] = 0x10325476;
+	do {
+		*buf++ = (UWORD32)((unsigned)p[3] << 8 | p[2]) << 16 |
+			((unsigned)p[1] << 8 | p[0]);
+		p += 4;
+	} while (--words);
 }
+#else
+#define byteSwap(buf,words)
+#endif
 
 /*
-   MD5 block update operation. Continues an MD5 message-digest
-   operation, processing another message block, and updating the
-   context.
+ * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
+ * initialization constants.
  */
-
 void
-MD5Update( context,
-           input,
-           inputLen )
-     MD5_CTX *context;          /* context */
-     unsigned char *input;      /* input block */
-     unsigned int inputLen;     /* length of input block */
+MD5Init(struct MD5Context *ctx)
 {
-    unsigned int i,
-      index,
-      partLen;
-
-    /*
-       Compute number of bytes mod 64 
-     */
-    index = ( unsigned int )( ( context->count[0] >> 3 ) & 0x3F );
-
-    /*
-       Update number of bits 
-     */
-    if( ( context->count[0] +=
-          ( ( UINT4 ) inputLen << 3 ) ) < ( ( UINT4 ) inputLen << 3 ) )
-        context->count[1]++;
-
-    context->count[1] += ( ( UINT4 ) inputLen >> 29 );
-
-    partLen = 64 - index;
-
-    /*
-       Transform as many times as possible.
-     */
-    if( inputLen >= partLen ) {
-
-        MD5_memcpy
-            ( ( POINTER ) & context->buffer[index], ( POINTER ) input,
-              partLen );
-        MD5Transform( context->state, context->buffer );
-
-        for( i = partLen; i + 63 < inputLen; i += 64 )
-            MD5Transform( context->state, &input[i] );
-
-        index = 0;
-    } else
-        i = 0;
-
-    /*
-       Buffer remaining input 
-     */
-    MD5_memcpy
-        ( ( POINTER ) & context->buffer[index], ( POINTER ) & input[i],
-          inputLen - i );
+	ctx->buf[0] = 0x67452301;
+	ctx->buf[1] = 0xefcdab89;
+	ctx->buf[2] = 0x98badcfe;
+	ctx->buf[3] = 0x10325476;
 
+	ctx->bytes[0] = 0;
+	ctx->bytes[1] = 0;
 }
 
 /*
-   MD5 finalization. Ends an MD5 message-digest operation, writing the
-   the message digest and zeroizing the context.
+ * Update context to reflect the concatenation of another buffer full
+ * of bytes.
  */
-
 void
-MD5Final( digest,
-          context )
-     unsigned char digest[16];  /* message digest */
-     MD5_CTX *context;          /* context */
+MD5Update(struct MD5Context *ctx, md5byte const *buf, unsigned len)
 {
+	UWORD32 t;
 
-    unsigned char bits[8];
-    unsigned int index,
-      padLen;
-
-    /*
-       Save number of bits 
-     */
-    Encode( bits, context->count, 8 );
-
-    /*
-       Pad out to 56 mod 64.
-     */
-    index = ( unsigned int )( ( context->count[0] >> 3 ) & 0x3f );
-
-    padLen = ( index < 56 ) ? ( 56 - index ) : ( 120 - index );
-
-    MD5Update( context, PADDING, padLen );
-
-    /*
-       Append length (before padding) 
-     */
-    MD5Update( context, bits, 8 );
-
-    /*
-       Store state in digest 
-     */
-    Encode( digest, context->state, 16 );
-
-    /*
-       Zeroize sensitive information.
-     */
-    MD5_memset( ( POINTER ) context, 0, sizeof( *context ) );
+	/* Update byte count */
 
-}
-
-/*
-   MD5 basic transformation. Transforms state based on block. 
- */
-static void
-MD5Transform( state,
-              block )
-     UINT4 state[4];
-     unsigned char block[64];
-{
-    UINT4 a = state[0],
-      b = state[1],
-      c = state[2],
-      d = state[3],
-      x[16];
-
-    Decode( x, block, 64 );
-
-    /*
-       Round 1 
-     */
-    FF( a, b, c, d, x[0], S11, 0xd76aa478 );    /* 1 */
-    FF( d, a, b, c, x[1], S12, 0xe8c7b756 );    /* 2 */
-    FF( c, d, a, b, x[2], S13, 0x242070db );    /* 3 */
-    FF( b, c, d, a, x[3], S14, 0xc1bdceee );    /* 4 */
-    FF( a, b, c, d, x[4], S11, 0xf57c0faf );    /* 5 */
-    FF( d, a, b, c, x[5], S12, 0x4787c62a );    /* 6 */
-    FF( c, d, a, b, x[6], S13, 0xa8304613 );    /* 7 */
-    FF( b, c, d, a, x[7], S14, 0xfd469501 );    /* 8 */
-    FF( a, b, c, d, x[8], S11, 0x698098d8 );    /* 9 */
-    FF( d, a, b, c, x[9], S12, 0x8b44f7af );    /* 10 */
-    FF( c, d, a, b, x[10], S13, 0xffff5bb1 );   /* 11 */
-    FF( b, c, d, a, x[11], S14, 0x895cd7be );   /* 12 */
-    FF( a, b, c, d, x[12], S11, 0x6b901122 );   /* 13 */
-    FF( d, a, b, c, x[13], S12, 0xfd987193 );   /* 14 */
-    FF( c, d, a, b, x[14], S13, 0xa679438e );   /* 15 */
-    FF( b, c, d, a, x[15], S14, 0x49b40821 );   /* 16 */
-
-    /*
-       Round 2 
-     */
-    GG( a, b, c, d, x[1], S21, 0xf61e2562 );    /* 17 */
-    GG( d, a, b, c, x[6], S22, 0xc040b340 );    /* 18 */
-    GG( c, d, a, b, x[11], S23, 0x265e5a51 );   /* 19 */
-    GG( b, c, d, a, x[0], S24, 0xe9b6c7aa );    /* 20 */
-    GG( a, b, c, d, x[5], S21, 0xd62f105d );    /* 21 */
-    GG( d, a, b, c, x[10], S22, 0x2441453 );    /* 22 */
-    GG( c, d, a, b, x[15], S23, 0xd8a1e681 );   /* 23 */
-    GG( b, c, d, a, x[4], S24, 0xe7d3fbc8 );    /* 24 */
-    GG( a, b, c, d, x[9], S21, 0x21e1cde6 );    /* 25 */
-    GG( d, a, b, c, x[14], S22, 0xc33707d6 );   /* 26 */
-    GG( c, d, a, b, x[3], S23, 0xf4d50d87 );    /* 27 */
-    GG( b, c, d, a, x[8], S24, 0x455a14ed );    /* 28 */
-    GG( a, b, c, d, x[13], S21, 0xa9e3e905 );   /* 29 */
-    GG( d, a, b, c, x[2], S22, 0xfcefa3f8 );    /* 30 */
-    GG( c, d, a, b, x[7], S23, 0x676f02d9 );    /* 31 */
-    GG( b, c, d, a, x[12], S24, 0x8d2a4c8a );   /* 32 */
-
-    /*
-       Round 3 
-     */
-    HH( a, b, c, d, x[5], S31, 0xfffa3942 );    /* 33 */
-    HH( d, a, b, c, x[8], S32, 0x8771f681 );    /* 34 */
-    HH( c, d, a, b, x[11], S33, 0x6d9d6122 );   /* 35 */
-    HH( b, c, d, a, x[14], S34, 0xfde5380c );   /* 36 */
-    HH( a, b, c, d, x[1], S31, 0xa4beea44 );    /* 37 */
-    HH( d, a, b, c, x[4], S32, 0x4bdecfa9 );    /* 38 */
-    HH( c, d, a, b, x[7], S33, 0xf6bb4b60 );    /* 39 */
-    HH( b, c, d, a, x[10], S34, 0xbebfbc70 );   /* 40 */
-    HH( a, b, c, d, x[13], S31, 0x289b7ec6 );   /* 41 */
-    HH( d, a, b, c, x[0], S32, 0xeaa127fa );    /* 42 */
-    HH( c, d, a, b, x[3], S33, 0xd4ef3085 );    /* 43 */
-    HH( b, c, d, a, x[6], S34, 0x4881d05 ); /* 44 */
-    HH( a, b, c, d, x[9], S31, 0xd9d4d039 );    /* 45 */
-    HH( d, a, b, c, x[12], S32, 0xe6db99e5 );   /* 46 */
-    HH( c, d, a, b, x[15], S33, 0x1fa27cf8 );   /* 47 */
-    HH( b, c, d, a, x[2], S34, 0xc4ac5665 );    /* 48 */
-
-    /*
-       Round 4 
-     */
-    II( a, b, c, d, x[0], S41, 0xf4292244 );    /* 49 */
-    II( d, a, b, c, x[7], S42, 0x432aff97 );    /* 50 */
-    II( c, d, a, b, x[14], S43, 0xab9423a7 );   /* 51 */
-    II( b, c, d, a, x[5], S44, 0xfc93a039 );    /* 52 */
-    II( a, b, c, d, x[12], S41, 0x655b59c3 );   /* 53 */
-    II( d, a, b, c, x[3], S42, 0x8f0ccc92 );    /* 54 */
-    II( c, d, a, b, x[10], S43, 0xffeff47d );   /* 55 */
-    II( b, c, d, a, x[1], S44, 0x85845dd1 );    /* 56 */
-    II( a, b, c, d, x[8], S41, 0x6fa87e4f );    /* 57 */
-    II( d, a, b, c, x[15], S42, 0xfe2ce6e0 );   /* 58 */
-    II( c, d, a, b, x[6], S43, 0xa3014314 );    /* 59 */
-    II( b, c, d, a, x[13], S44, 0x4e0811a1 );   /* 60 */
-    II( a, b, c, d, x[4], S41, 0xf7537e82 );    /* 61 */
-    II( d, a, b, c, x[11], S42, 0xbd3af235 );   /* 62 */
-    II( c, d, a, b, x[2], S43, 0x2ad7d2bb );    /* 63 */
-    II( b, c, d, a, x[9], S44, 0xeb86d391 );    /* 64 */
-
-    state[0] += a;
-    state[1] += b;
-    state[2] += c;
-    state[3] += d;
-
-    /*
-       Zeroize sensitive information.
-     */
-    MD5_memset( ( POINTER ) x, 0, sizeof( x ) );
+	t = ctx->bytes[0];
+	if ((ctx->bytes[0] = t + len) < t)
+		ctx->bytes[1]++;	/* Carry from low to high */
+
+	t = 64 - (t & 0x3f);	/* Space available in ctx->in (at least 1) */
+	if (t > len) {
+		memcpy((md5byte *)ctx->in + 64 - t, buf, len);
+		return;
+	}
+	/* First chunk is an odd size */
+	memcpy((md5byte *)ctx->in + 64 - t, buf, t);
+	byteSwap(ctx->in, 16);
+	MD5Transform(ctx->buf, ctx->in);
+	buf += t;
+	len -= t;
+
+	/* Process data in 64-byte chunks */
+	while (len >= 64) {
+		memcpy(ctx->in, buf, 64);
+		byteSwap(ctx->in, 16);
+		MD5Transform(ctx->buf, ctx->in);
+		buf += 64;
+		len -= 64;
+	}
 
+	/* Handle any remaining bytes of data. */
+	memcpy(ctx->in, buf, len);
 }
 
 /*
-   Encodes input (UINT4) into output (unsigned char). Assumes len is
-   a multiple of 4.
+ * Final wrapup - pad to 64-byte boundary with the bit pattern 
+ * 1 0* (64-bit count of bits processed, MSB-first)
  */
-static void
-Encode( output,
-        input,
-        len )
-     unsigned char *output;
-     UINT4 *input;
-     unsigned int len;
+void
+MD5Final(md5byte digest[16], struct MD5Context *ctx)
 {
-    unsigned int i,
-      j;
+	int count = ctx->bytes[0] & 0x3f;	/* Number of bytes in ctx->in */
+	md5byte *p = (md5byte *)ctx->in + count;
 
-    for( i = 0, j = 0; j < len; i++, j += 4 ) {
-        output[j] = ( unsigned char )( input[i] & 0xff );
-        output[j + 1] = ( unsigned char )( ( input[i] >> 8 ) & 0xff );
-        output[j + 2] = ( unsigned char )( ( input[i] >> 16 ) & 0xff );
-        output[j + 3] = ( unsigned char )( ( input[i] >> 24 ) & 0xff );
-    }
+	/* Set the first char of padding to 0x80.  There is always room. */
+	*p++ = 0x80;
 
-}
+	/* Bytes of padding needed to make 56 bytes (-8..55) */
+	count = 56 - 1 - count;
 
-/*
-   Decodes input (unsigned char) into output (UINT4). Assumes len is
-   a multiple of 4.
- */
+	if (count < 0) {	/* Padding forces an extra block */
+		memset(p, 0, count + 8);
+		byteSwap(ctx->in, 16);
+		MD5Transform(ctx->buf, ctx->in);
+		p = (md5byte *)ctx->in;
+		count = 56;
+	}
+	memset(p, 0, count);
+	byteSwap(ctx->in, 14);
 
-static void
-Decode( output,
-        input,
-        len )
-     UINT4 *output;
-     unsigned char *input;
-     unsigned int len;
-{
-    unsigned int i,
-      j;
+	/* Append length in bits and transform */
+	ctx->in[14] = ctx->bytes[0] << 3;
+	ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29;
+	MD5Transform(ctx->buf, ctx->in);
 
-    for( i = 0, j = 0; j < len; i++, j += 4 )
-        output[i] =
-            ( ( UINT4 ) input[j] ) | ( ( ( UINT4 ) input[j + 1] ) << 8 ) |
-            ( ( ( UINT4 ) input[j + 2] ) << 16 ) |
-            ( ( ( UINT4 ) input[j + 3] ) << 24 );
+	byteSwap(ctx->buf, 4);
+	memcpy(digest, ctx->buf, 16);
+	memset(ctx, 0, sizeof(ctx));	/* In case it's sensitive */
 }
 
-/*
-   Note: Replace &quot;for loop&quot; with standard memcpy if possible.
- */
-static void
-MD5_memcpy( output,
-            input,
-            len )
-     POINTER output;
-     POINTER input;
-     unsigned int len;
-{
-    unsigned int i;
+#ifndef ASM_MD5
 
-    for( i = 0; i < len; i++ )
-        output[i] = input[i];
+/* The four core functions - F1 is optimized somewhat */
 
-}
+/* #define F1(x, y, z) (x & y | ~x & z) */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+
+/* This is the central step in the MD5 algorithm. */
+#define MD5STEP(f,w,x,y,z,in,s) \
+	 (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
 
 /*
-   Note: Replace &quot;for loop&quot; with standard memset if possible.
+ * The core of the MD5 algorithm, this alters an existing MD5 hash to
+ * reflect the addition of 16 longwords of new data.  MD5Update blocks
+ * the data and converts bytes into longwords for this routine.
  */
-static void
-MD5_memset( output,
-            value,
-            len )
-     POINTER output;
-     int value;
-     unsigned int len;
+void
+MD5Transform(UWORD32 buf[4], UWORD32 const in[16])
 {
-    unsigned int i;
-
-    for( i = 0; i < len; i++ )
-        ( ( char * )output )[i] = ( char )value;
+	register UWORD32 a, b, c, d;
 
+	a = buf[0];
+	b = buf[1];
+	c = buf[2];
+	d = buf[3];
+
+	MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+	MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+	MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+	MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+	MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+	MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+	MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+	MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+	MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+	MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+	MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+	MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+	MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+	MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+	MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+	MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+	MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+	MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+	MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+	MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+	MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+	MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+	MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+	MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+	MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+	MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+	MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+	MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+	MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+	MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+	MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+	MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+	MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+	MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+	MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+	MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+	MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+	MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+	MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+	MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+	MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+	MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+	MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+	MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+	MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+	MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+	MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+	MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+
+	MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+	MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+	MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+	MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+	MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+	MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+	MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+	MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+	MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+	MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+	MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+	MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+	MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+	MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+	MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+	MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+
+	buf[0] += a;
+	buf[1] += b;
+	buf[2] += c;
+	buf[3] += d;
 }
+
+#endif
diff -urN upstream/mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_uuid.c mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_uuid.c
--- upstream/mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_uuid.c	2007-07-12 15:13:36.000000000 -0400
+++ mediatomb-0.10.0/tombupnp/upnp/src/uuid/upnp_uuid.c	2007-12-28 13:49:12.000000000 -0500
@@ -296,7 +296,7 @@
                        int namelen  /* the length of the name */
      )
 {
-    MD5_CTX c;
+    struct MD5Context c;
     unsigned char hash[16];
     uuid_upnp net_nsid;         /* context UUID in network byte order */
 

--- End Message ---
--- Begin Message ---
Source: libupnp
Source-Version: 1.6.5-2

We believe that the bug you reported is fixed in the latest version of
libupnp, which is due to be installed in the Debian FTP archive:

libupnp-dev_1.6.5-2_sparc.deb
  to pool/main/libu/libupnp/libupnp-dev_1.6.5-2_sparc.deb
libupnp3_1.6.5-2_sparc.deb
  to pool/main/libu/libupnp/libupnp3_1.6.5-2_sparc.deb
libupnp_1.6.5-2.diff.gz
  to pool/main/libu/libupnp/libupnp_1.6.5-2.diff.gz
libupnp_1.6.5-2.dsc
  to pool/main/libu/libupnp/libupnp_1.6.5-2.dsc



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [EMAIL PROTECTED],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Nick Leverton <[EMAIL PROTECTED]> (supplier of updated libupnp package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [EMAIL PROTECTED])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.8
Date: Mon, 21 Apr 2008 22:20:53 +0100
Source: libupnp
Binary: libupnp3 libupnp-dev
Architecture: source sparc
Version: 1.6.5-2
Distribution: unstable
Urgency: low
Maintainer: Nick Leverton <[EMAIL PROTECTED]>
Changed-By: Nick Leverton <[EMAIL PROTECTED]>
Description: 
 libupnp-dev - Portable SDK for UPnP Devices (development files)
 libupnp3   - Portable SDK for UPnP Devices (shared libraries)
Closes: 307562 353169 459516 462833
Changes: 
 libupnp (1.6.5-2) unstable; urgency=low
 .
   * Correct New Maintainer bug number (was given as #426833, should
     be #462833) (really Closes: #462833).
   * Replace RSA Inc copyright MD5 functions by public domain
     implementation (Closes: #459516).
   * Remove Build-dep on doc++ as upstream now ships documentation in
     tarball (Closes: #307562).
   * Dynamically allocated buffer for uPnP Action urls (Closes: #353169).
   * Update Description to match current fork of upstream.
   * Fix watchfile to omit libupnp-doc tarballs.
   * No longer ignore "upnp:rootdevice" advertisement, upstream svn r326
     (03-upstream-upnp-rootdevice.patch).
Checksums-Sha1: 
 1884d4093cdbe56ca37e57a28f3d0be7da78d83d 1041 libupnp_1.6.5-2.dsc
 3ad8107e1771f843a7903e0cd19d032dfb756bf1 59874 libupnp_1.6.5-2.diff.gz
 3ffdc3b09cf0bcfb94a2537eed124c8702e0451d 79440 libupnp3_1.6.5-2_sparc.deb
 3ac8f1dfee0a1c11b40e7cbab099fe2bdfd59fd3 1017466 libupnp-dev_1.6.5-2_sparc.deb
Checksums-Sha256: 
 1f92cf356c2c164086fe77c5c8dd9fe085187701cb02cd6cb4707bff154a440c 1041 
libupnp_1.6.5-2.dsc
 1499376459b94e5e18052b1558387736e70e503b0b12f9941e3d1bd53a87594a 59874 
libupnp_1.6.5-2.diff.gz
 b4f3f0c5326d587a52351d9e50346c535dbee7e0bd11641ba7565bf5d50a6bee 79440 
libupnp3_1.6.5-2_sparc.deb
 b48f4c8fc3a34befa76743d85c88c7153660ef1378ef605a559de62804579562 1017466 
libupnp-dev_1.6.5-2_sparc.deb
Files: 
 4da5a870dee097920d257384b522d678 1041 net extra libupnp_1.6.5-2.dsc
 efe5980ce510302f5f1ec763314f2d84 59874 net extra libupnp_1.6.5-2.diff.gz
 68c0ad93851dc76fe1e74ed5a81675f4 79440 libs extra libupnp3_1.6.5-2_sparc.deb
 ee561169339db5a5ae8a09d90bba8221 1017466 libdevel extra 
libupnp-dev_1.6.5-2_sparc.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFIDd9a0fhX0Y/ocz0RAqNkAJ4rjHjMuGLpIAtLnTRFPtjt9vxRFwCbBn1q
Hc7GpsJXYENm+cMx3bBrBEE=
=cQx3
-----END PGP SIGNATURE-----



--- End Message ---

Reply via email to