+/*
+ Bacula® - The Network Backup Solution
+
+ Copyright (C) 2000-2011 Free Software Foundation Europe e.V.
+
+ The main author of Bacula is Kern Sibbald, with contributions from
+ many others, a complete list can be found in the file AUTHORS.
+ This program is Free Software; you can redistribute it and/or
+ modify it under the terms of version three of the GNU Affero General Public
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ Bacula® is a registered trademark of Kern Sibbald.
+ The licensor of Bacula is the Free Software Foundation Europe
+ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+ Switzerland, email:ftf@fsfeurope.org.
+*/
/*
* This code implements the MD5 message-digest algorithm.
* The algorithm is due to Ron Rivest. This code was
* needed on buffers full of bytes, and then call MD5Final, which
* will fill a supplied 16-byte array with the digest.
*
- * Version $Id$
*/
/* Brutally hacked by John Walker back from ANSI C to K&R (no
prototypes) to maintain the tradition that Netfone will compile
with Sun's original "cc". */
+
+
#include "bacula.h"
-#ifndef HAVE_BIGENDIAN
-#define byteReverse(buf, len) /* Nothing */
-#else
/*
- * Note: this code is harmless on little-endian machines.
+ * Note: this code is harmless on little-endian machines. We'll swap the bytes
+ * on big-endian machines.
*/
void byteReverse(unsigned char *buf, unsigned longs)
{
uint32_t t;
- do {
- t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(uint32_t *) buf = t;
- buf += 4;
- } while (--longs);
+ if (bigendian()) {
+ do {
+ t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
+ ((unsigned) buf[1] << 8 | buf[0]);
+ *(uint32_t *) buf = t;
+ buf += 4;
+ } while (--longs);
+ }
}
-#endif
/*
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
exit(1);
}
- fd = fopen(argv[0], "r");
+ fd = fopen(argv[0], "rb");
if (!fd) {
printf("Could not open %s: ERR=%s\n", argv[0], strerror(errno));
exit(1);
#ifdef OUTPUT_BASE64
char MD5buf[40]; /* 24 should do */
memset(MD5buf, 0, 40);
- bin_to_base64(MD5buf, (char *)signature, 16); /* encode 16 bytes */
+ bin_to_base64(MD5buf, sizeof(MD5buf), (char *)signature, 16, true); /* encode 16 bytes */
printf(" %s", MD5buf);
#endif
printf(" %s\n", argv[0]);
}
signature[16] = 0;
printf("%s", buf);
- bin_to_base64(bin, (char *)signature, 16);
+ bin_to_base64(bin, sizeof(bin), (char *)signature, 16, true);
printf("%s\n", bin);
}
+ fclose(fd);
}
#endif