Changes to 1.39.2:
08Dec05
+- Fix Win32 built to work with new crypto code.
- Apply patch supplied by user (slightly modified) to fix
correct detection of holes in block devices and FIFOs.
Bug # 506.
* 2.4 - RecipientInfo
*
* BaculaCrypto { iso(1) identified-organization(3) usdod(6)
- * internet(1) private(4) enterprises(1) three-rings(22054)
- * external(500) bacula(2) published(1) bacula-encryption(1)
- * asn1-modules(1) bacula-crypto(1) }
+ * internet(1) private(4) enterprises(1) three-rings(22054)
+ * external(500) bacula(2) published(1) bacula-encryption(1)
+ * asn1-modules(1) bacula-crypto(1) }
*
* DEFINITIONS AUTOMATIC TAGS ::=
* BEGIN
*
* SignatureData ::= SEQUENCE {
- * version Version DEFAULT v0,
+ * version Version DEFAULT v0,
* signerInfo SignerInfo }
*
* CryptoData ::= SEQUENCE {
- * version Version DEFAULT v0,
+ * version Version DEFAULT v0,
* contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier
- * recipientInfo RecipientInfo
+ * recipientInfo RecipientInfo
* }
*
* SignerInfo ::= SET OF SignerInfo
* Version ::= INTEGER { v0(0) }
*
* SignerInfo ::= SEQUENCE {
- * version Version,
+ * version Version,
* subjectKeyIdentifier SubjectKeyIdentifier,
- * digestAlgorithm DigestAlgorithmIdentifier,
+ * digestAlgorithm DigestAlgorithmIdentifier,
* signatureAlgorithm SignatureAlgorithmIdentifier,
- * signature SignatureValue }
+ * signature SignatureValue }
*
* RecipientInfo ::= SEQUENCE {
- * version Version
+ * version Version
* subjectKeyIdentifier SubjectKeyIdentifier
* keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier
- * encryptedKey EncryptedKey
+ * encryptedKey EncryptedKey
* }
*
* SubjectKeyIdentifier ::= OCTET STRING
/*
* Extract subjectKeyIdentifier from x509 certificate.
* Returns: On success, an ASN1_OCTET_STRING that must be freed via M_ASN1_OCTET_STRING_free().
- * NULL on failure.
+ * NULL on failure.
*/
static ASN1_OCTET_STRING *openssl_cert_keyid(X509 *cert){
X509_EXTENSION *ext;
/* Decode ASN1 item in data */
keyid = (ASN1_OCTET_STRING *) ASN1_item_d2i(NULL, &ext_value_data, ext->value->length,
- ASN1_ITEM_ptr(method->it));
+ ASN1_ITEM_ptr(method->it));
} else {
/* Old style ASN1 */
/*
* Create a new keypair object.
* Returns: A pointer to a X509 KEYPAIR object on success.
- * NULL on failure.
+ * NULL on failure.
*/
X509_KEYPAIR *crypto_keypair_new (void) {
X509_KEYPAIR *keypair;
/*
* Load a public key from a PEM-encoded x509 certificate.
* Returns: true on success
- * false on failure
+ * false on failure
*/
int crypto_keypair_load_cert (X509_KEYPAIR *keypair, const char *file)
{
/*
* Load a PEM-encoded private key.
* Returns: true on success
- * false on failure
+ * false on failure
*/
int crypto_keypair_load_key (X509_KEYPAIR *keypair, const char *file,
- CRYPTO_PEM_PASSWD_CB *pem_callback,
- const void *pem_userdata)
+ CRYPTO_PEM_PASSWD_CB *pem_callback,
+ const void *pem_userdata)
{
BIO *bio;
PEM_CB_CONTEXT ctx;
/*
* Create a new message digest context of the specified type
* Returns: A pointer to a DIGEST object on success.
- * NULL on failure.
+ * NULL on failure.
*/
DIGEST *crypto_digest_new (crypto_digest_t type)
{
/*
* Hash length bytes of data into the provided digest context.
* Returns: true on success
- * false on failure
+ * false on failure
*/
-int crypto_digest_update (DIGEST *digest, const void *data, size_t length) {
+bool crypto_digest_update (DIGEST *digest, const void *data, size_t length) {
if (EVP_DigestUpdate(&digest->ctx, data, length) == 0) {
return true;
} else {
* in length. The result size can be determined with crypto_digest_size().
*
* Returns: true on success
- * false on failure
+ * false on failure
*/
-int crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length) {
+bool crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length) {
if (!EVP_DigestFinal(&digest->ctx, (unsigned char *) dest, length)) {
return false;
} else {
/*
* Create a new message signature context.
* Returns: A pointer to a SIGNATURE object on success.
- * NULL on failure.
+ * NULL on failure.
*/
SIGNATURE *crypto_sign_new (void)
{
* For a given public key, find the associated SignatureInfo record
* and create a digest context for signature validation
* Returns: CRYPTO_ERROR_NONE on success, with the newly allocated DIGEST in digest.
- * A crypto_error_t value on failure.
+ * A crypto_error_t value on failure.
*/
crypto_error_t crypto_sign_get_digest(SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST **digest)
{
for (i = 0; i < sk_SignerInfo_num(signers); i++) {
si = sk_SignerInfo_value(signers, i);
if (M_ASN1_OCTET_STRING_cmp(keypair->keyid, si->subjectKeyIdentifier) == 0) {
- /* Get the digest algorithm and allocate a digest context */
- switch (OBJ_obj2nid(si->digestAlgorithm)) {
- case NID_md5:
- *digest = crypto_digest_new(CRYPTO_DIGEST_MD5);
- break;
- case NID_sha1:
- *digest = crypto_digest_new(CRYPTO_DIGEST_SHA1);
- break;
+ /* Get the digest algorithm and allocate a digest context */
+ switch (OBJ_obj2nid(si->digestAlgorithm)) {
+ case NID_md5:
+ *digest = crypto_digest_new(CRYPTO_DIGEST_MD5);
+ break;
+ case NID_sha1:
+ *digest = crypto_digest_new(CRYPTO_DIGEST_SHA1);
+ break;
#ifdef HAVE_SHA2
- case NID_sha256:
- *digest = crypto_digest_new(CRYPTO_DIGEST_SHA256);
- break;
- case NID_sha512:
- *digest = crypto_digest_new(CRYPTO_DIGEST_SHA512);
- break;
+ case NID_sha256:
+ *digest = crypto_digest_new(CRYPTO_DIGEST_SHA256);
+ break;
+ case NID_sha512:
+ *digest = crypto_digest_new(CRYPTO_DIGEST_SHA512);
+ break;
#endif
- default:
- *digest = NULL;
- return CRYPTO_ERROR_INVALID_DIGEST;
- }
+ default:
+ *digest = NULL;
+ return CRYPTO_ERROR_INVALID_DIGEST;
+ }
/* Shouldn't happen */
- if (*digest == NULL) {
- return CRYPTO_ERROR_INVALID_DIGEST;
- } else {
- return CRYPTO_ERROR_NONE;
- }
+ if (*digest == NULL) {
+ return CRYPTO_ERROR_INVALID_DIGEST;
+ } else {
+ return CRYPTO_ERROR_NONE;
+ }
}
}
/*
* For a given signature, public key, and digest, verify the SIGNATURE.
* Returns: CRYPTO_ERROR_NONE on success.
- * A crypto_error_t value on failure.
+ * A crypto_error_t value on failure.
*/
crypto_error_t crypto_sign_verify(SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST *digest)
{
for (i = 0; i < sk_SignerInfo_num(signers); i++) {
si = sk_SignerInfo_value(signers, i);
if (M_ASN1_OCTET_STRING_cmp(keypair->keyid, si->subjectKeyIdentifier) == 0) {
- /* Extract the signature data */
- sigLen = M_ASN1_STRING_length(si->signature);
- sigData = M_ASN1_STRING_data(si->signature);
-
- ok = EVP_VerifyFinal(&digest->ctx, sigData, sigLen, keypair->pubkey);
- if (ok >= 1) {
- return CRYPTO_ERROR_NONE;
- } else if (ok == 0) {
- return CRYPTO_ERROR_BAD_SIGNATURE;
- } else if (ok < 0) {
+ /* Extract the signature data */
+ sigLen = M_ASN1_STRING_length(si->signature);
+ sigData = M_ASN1_STRING_data(si->signature);
+
+ ok = EVP_VerifyFinal(&digest->ctx, sigData, sigLen, keypair->pubkey);
+ if (ok >= 1) {
+ return CRYPTO_ERROR_NONE;
+ } else if (ok == 0) {
+ return CRYPTO_ERROR_BAD_SIGNATURE;
+ } else if (ok < 0) {
/* Shouldn't happen */
openssl_post_errors(M_ERROR, _("OpenSSL error occured"));
- return CRYPTO_ERROR_INTERNAL;
- }
+ return CRYPTO_ERROR_INTERNAL;
+ }
}
}
/*
* Add a new signer
* Returns: true on success
- * false on failure
+ * false on failure
*/
int crypto_sign_add_signer(SIGNATURE *sig, DIGEST *digest, X509_KEYPAIR *keypair)
{
* space for the output.
*
* Returns: true on success, stores the encoded data in dest, and the size in length.
- * false on failure.
+ * false on failure.
*/
int crypto_sign_encode(SIGNATURE *sig, void *dest, size_t *length)
{
* size of sigData.
*
* Returns: SIGNATURE instance on success.
- * NULL on failure.
+ * NULL on failure.
*/
* Perform global initialization of OpenSSL
* This function is not thread safe.
* Returns: 0 on success
- * errno on failure
+ * errno on failure
*/
int init_crypto (void)
{
* All cryptographic operations must be completed before calling this function.
* This function is not thread safe.
* Returns: 0 on success
- * errno on failure
+ * errno on failure
*/
int cleanup_crypto (void)
{
return (digest);
}
-int crypto_digest_update (DIGEST *digest, const void *data, size_t length) {
+bool crypto_digest_update (DIGEST *digest, const void *data, size_t length) {
switch (digest->type) {
case CRYPTO_DIGEST_MD5:
/* Doesn't return anything ... */
}
}
-int crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length) {
+bool crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length) {
switch (digest->type) {
case CRYPTO_DIGEST_MD5:
int init_crypto (void);
int cleanup_crypto (void);
DIGEST * crypto_digest_new (crypto_digest_t type);
-int crypto_digest_update (DIGEST *digest, const void *data, size_t length);
-int crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length);
+bool crypto_digest_update (DIGEST *digest, const void *data, size_t length);
+bool crypto_digest_finalize (DIGEST *digest, void *dest, size_t *length);
void crypto_digest_free (DIGEST *digest);
SIGNATURE * crypto_sign_new (void);
crypto_error_t crypto_sign_get_digest (SIGNATURE *sig, X509_KEYPAIR *keypair, DIGEST **digest);
/*
- S M A R T A L L O C
- Smart Memory Allocator
+ S M A R T A L L O C
+ Smart Memory Allocator
- Evolved over several years, starting with the initial
- SMARTALLOC code for AutoSketch in 1986, guided by the Blind
- Watchbreaker, John Walker. Isolated in this general-purpose
- form in September of 1989. Updated with be more POSIX
- compliant and to include Web-friendly HTML documentation in
- October of 1998 by the same culprit. For additional
- information and the current version visit the Web page:
+ Evolved over several years, starting with the initial
+ SMARTALLOC code for AutoSketch in 1986, guided by the Blind
+ Watchbreaker, John Walker. Isolated in this general-purpose
+ form in September of 1989. Updated with be more POSIX
+ compliant and to include Web-friendly HTML documentation in
+ October of 1998 by the same culprit. For additional
+ information and the current version visit the Web page:
- http://www.fourmilab.ch/smartall/
+ http://www.fourmilab.ch/smartall/
- Version $Id$
+ Version $Id$
*/
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-extern char my_name[]; /* daemon name */
+extern char my_name[]; /* daemon name */
typedef unsigned short sm_ushort;
/* Memory allocation control structures and storage. */
struct abufhead {
- struct b_queue abq; /* Links on allocated queue */
- unsigned ablen; /* Buffer length in bytes */
+ struct b_queue abq; /* Links on allocated queue */
+ unsigned ablen; /* Buffer length in bytes */
const char *abfname; /* File name pointer */
- sm_ushort ablineno; /* Line number of allocation */
+ sm_ushort ablineno; /* Line number of allocation */
};
static struct b_queue abqueue = { /* Allocated buffer queue */
};
-static bool bufimode = false; /* Buffers not tracked when True */
+static bool bufimode = false; /* Buffers not tracked when True */
#define HEAD_SIZE BALIGN(sizeof(struct abufhead))
/* SMALLOC -- Allocate buffer, enqueing on the orphaned buffer
- tracking list. */
+ tracking list. */
static void *smalloc(const char *fname, int lineno, unsigned int nbytes)
{
head->abfname = bufimode ? NULL : fname;
head->ablineno = (sm_ushort) lineno;
/* Emplace end-clobber detector at end of buffer */
- buf[nbytes - 1] = (((long) buf) & 0xFF) ^ 0xC5;
+ buf[nbytes - 1] = (uint8_t)((((long) buf) & 0xFF) ^ 0xC5);
buf += HEAD_SIZE; /* Increment to user data start */
if (++sm_buffers > sm_max_buffers) {
- sm_max_buffers = sm_buffers;
+ sm_max_buffers = sm_buffers;
}
sm_bytes += nbytes;
if (sm_bytes > sm_max_bytes) {
- sm_max_bytes = sm_bytes;
+ sm_max_bytes = sm_bytes;
}
V(mutex);
} else {
}
/* SM_NEW_OWNER -- Update the File and line number for a buffer
- This is to accomodate mem_pool. */
+ This is to accomodate mem_pool. */
void sm_new_owner(const char *fname, int lineno, char *buf)
{
}
/* SM_FREE -- Update free pool availability. FREE is never called
- except through this interface or by actuallyfree().
- free(x) is defined to generate a call to this
- routine. */
+ except through this interface or by actuallyfree().
+ free(x) is defined to generate a call to this
+ routine. */
void sm_free(const char *file, int line, void *fp)
{
P(mutex);
Dmsg4(1150, "sm_free %d at %x from %s:%d\n",
- head->ablen, fp,
- head->abfname, head->ablineno);
+ head->ablen, fp,
+ head->abfname, head->ablineno);
/* The following assertions will catch virtually every release
of an address which isn't an allocated buffer. */
Emsg2(M_ABORT, 0, _("qp->qprev->qnext != qp called from %s:%d\n"), file, line);
}
- /* The following assertion detects storing off the end of the
+ /* The following assertion detects storing off the end of the
allocated space in the buffer by comparing the end of buffer
- checksum with the address of the buffer. */
+ checksum with the address of the buffer. */
if (((unsigned char *)cp)[head->ablen - 1] != ((((long) cp) & 0xFF) ^ 0xC5)) {
V(mutex);
qdchain(qp);
V(mutex);
- /* Now we wipe the contents of the just-released buffer with
+ /* Now we wipe the contents of the just-released buffer with
"designer garbage" (Duff Kurland's phrase) of alternating
bits. This is intended to ruin the day for any miscreant who
attempts to access data through a pointer into storage that's
}
/* SM_MALLOC -- Allocate buffer. NULL is returned if no memory
- was available. */
+ was available. */
void *sm_malloc(const char *fname, int lineno, unsigned int nbytes)
{
if ((buf = smalloc(fname, lineno, nbytes)) != NULL) {
/* To catch sloppy code that assumes buffers obtained from
- malloc() are zeroed, we preset the buffer contents to
+ malloc() are zeroed, we preset the buffer contents to
"designer garbage" consisting of alternating bits. */
memset(buf, 0x55, (int) nbytes);
/* SM_CALLOC -- Allocate an array and clear it to zero. */
void *sm_calloc(const char *fname, int lineno,
- unsigned int nelem, unsigned int elsize)
+ unsigned int nelem, unsigned int elsize)
{
void *buf;
return buf;
}
-/* SM_REALLOC -- Adjust the size of a previously allocated buffer.
+/* SM_REALLOC -- Adjust the size of a previously allocated buffer.
Note that the trick of "resurrecting" a previously
- freed buffer with realloc() is NOT supported by this
- function. Further, because of the need to maintain
- our control storage, SM_REALLOC must always allocate
- a new block and copy the data in the old block.
- This may result in programs which make heavy use of
- realloc() running much slower than normally. */
+ freed buffer with realloc() is NOT supported by this
+ function. Further, because of the need to maintain
+ our control storage, SM_REALLOC must always allocate
+ a new block and copy the data in the old block.
+ This may result in programs which make heavy use of
+ realloc() running much slower than normally. */
void *sm_realloc(const char *fname, int lineno, void *ptr, unsigned int size)
{
e_msg(fname, lineno, M_ABORT, 0, _("sm_realloc size: %d\n"), size);
}
- /* If the old block pointer is NULL, treat realloc() as a
+ /* If the old block pointer is NULL, treat realloc() as a
malloc(). SVID is silent on this, but many C libraries
permit this. */
/* Sizes differ. Allocate a new buffer of the requested size.
If we can't obtain such a buffer, act as defined in SVID:
- return NULL from realloc() and leave the buffer in PTR
+ return NULL from realloc() and leave the buffer in PTR
intact. */
sm_buffers--;
/* If the new buffer is larger than the old, fill the balance
of it with "designer garbage". */
if (size > osize) {
- memset(((char *) buf) + osize, 0x55, (int) (size - osize));
+ memset(((char *) buf) + osize, 0x55, (int) (size - osize));
}
/* All done. Free and dechain the original buffer. */
return buf;
}
-/* ACTUALLYMALLOC -- Call the system malloc() function to obtain
- storage which will eventually be released
- by system or library routines not compiled
- using SMARTALLOC. */
+/* ACTUALLYMALLOC -- Call the system malloc() function to obtain
+ storage which will eventually be released
+ by system or library routines not compiled
+ using SMARTALLOC. */
void *actuallymalloc(unsigned int size)
{
return malloc(size);
}
-/* ACTUALLYCALLOC -- Call the system calloc() function to obtain
- storage which will eventually be released
- by system or library routines not compiled
- using SMARTALLOC. */
+/* ACTUALLYCALLOC -- Call the system calloc() function to obtain
+ storage which will eventually be released
+ by system or library routines not compiled
+ using SMARTALLOC. */
void *actuallycalloc(unsigned int nelem, unsigned int elsize)
{
}
/* ACTUALLYREALLOC -- Call the system realloc() function to obtain
- storage which will eventually be released
- by system or library routines not compiled
- using SMARTALLOC. */
+ storage which will eventually be released
+ by system or library routines not compiled
+ using SMARTALLOC. */
void *actuallyrealloc(void *ptr, unsigned int size)
{
}
/* ACTUALLYFREE -- Interface to system free() function to release
- buffers allocated by low-level routines. */
+ buffers allocated by low-level routines. */
void actuallyfree(void *cp)
{
}
/* SM_DUMP -- Print orphaned buffers (and dump them if BUFDUMP is
- * True).
+ * True).
* N.B. DO NOT USE any Bacula print routines (Dmsg, Jmsg, Emsg, ...)
* as they have all been shut down at this point.
*/
while (ap != (struct abufhead *) &abqueue) {
if ((ap == NULL) ||
- (ap->abq.qnext->qprev != (struct b_queue *) ap) ||
- (ap->abq.qprev->qnext != (struct b_queue *) ap)) {
- fprintf(stderr, _(
+ (ap->abq.qnext->qprev != (struct b_queue *) ap) ||
+ (ap->abq.qprev->qnext != (struct b_queue *) ap)) {
+ fprintf(stderr, _(
"\nOrphaned buffers exist. Dump terminated following\n"
" discovery of bad links in chain of orphaned buffers.\n"
" Buffer address with bad links: %lx\n"), (long) ap);
- break;
+ break;
}
if (ap->abfname != NULL) {
- unsigned memsize = ap->ablen - (HEAD_SIZE + 1);
- char errmsg[500];
+ unsigned memsize = ap->ablen - (HEAD_SIZE + 1);
+ char errmsg[500];
- bsnprintf(errmsg, sizeof(errmsg),
+ bsnprintf(errmsg, sizeof(errmsg),
_("Orphaned buffer: %6u bytes allocated at line %d of %s %s\n"),
- memsize, ap->ablineno, my_name, ap->abfname
- );
+ memsize, ap->ablineno, my_name, ap->abfname
+ );
fprintf(stderr, "%s", errmsg);
- if (bufdump) {
- char buf[20];
- unsigned llen = 0;
- char *cp = ((char *) ap) + HEAD_SIZE;
-
- errmsg[0] = EOS;
- while (memsize) {
- if (llen >= 16) {
+ if (bufdump) {
+ char buf[20];
+ unsigned llen = 0;
+ char *cp = ((char *) ap) + HEAD_SIZE;
+
+ errmsg[0] = EOS;
+ while (memsize) {
+ if (llen >= 16) {
bstrncat(errmsg, "\n", sizeof(errmsg));
- llen = 0;
+ llen = 0;
fprintf(stderr, "%s", errmsg);
- errmsg[0] = EOS;
- }
+ errmsg[0] = EOS;
+ }
bsnprintf(buf, sizeof(buf), " %02X",
- (*cp++) & 0xFF);
- bstrncat(errmsg, buf, sizeof(errmsg));
- llen++;
- memsize--;
- }
+ (*cp++) & 0xFF);
+ bstrncat(errmsg, buf, sizeof(errmsg));
+ llen++;
+ memsize--;
+ }
fprintf(stderr, "%s\n", errmsg);
- }
+ }
}
ap = (struct abufhead *) ap->abq.qnext;
}
/* SM_CHECK -- Check the buffers and dump if any damage exists. */
void sm_check(const char *fname, int lineno, bool bufdump)
{
- if (!sm_check_rtn(fname, lineno, bufdump)) {
+ if (!sm_check_rtn(fname, lineno, bufdump)) {
Emsg2(M_ABORT, 0, _("Damaged buffer found. Called from %s:%d\n"),
- fname, lineno);
- }
+ fname, lineno);
+ }
}
#undef sm_check_rtn
while (ap != (struct abufhead *) &abqueue) {
bad = 0;
if ((ap == NULL) ||
- (ap->abq.qnext->qprev != (struct b_queue *) ap)) {
- bad = 0x1;
+ (ap->abq.qnext->qprev != (struct b_queue *) ap)) {
+ bad = 0x1;
}
if (ap->abq.qprev->qnext != (struct b_queue *) ap) {
- bad |= 0x2;
+ bad |= 0x2;
}
if (((unsigned char *) ap)[((struct abufhead *) ap)->ablen - 1] !=
- ((((long) ap) & 0xFF) ^ 0xC5)) {
- bad |= 0x4;
+ ((((long) ap) & 0xFF) ^ 0xC5)) {
+ bad |= 0x4;
}
badbuf |= bad;
if (bad) {
- fprintf(stderr,
+ fprintf(stderr,
_("\nDamaged buffers found at %s:%d\n"), fname, lineno);
- if (bad & 0x1) {
+ if (bad & 0x1) {
fprintf(stderr, _(" discovery of bad prev link.\n"));
- }
- if (bad & 0x2) {
+ }
+ if (bad & 0x2) {
fprintf(stderr, _(" discovery of bad next link.\n"));
- }
- if (bad & 0x4) {
+ }
+ if (bad & 0x4) {
fprintf(stderr, _(" discovery of data overrun.\n"));
- }
+ }
fprintf(stderr, _(" Buffer address: %lx\n"), (long) ap);
- if (ap->abfname != NULL) {
- unsigned memsize = ap->ablen - (HEAD_SIZE + 1);
- char errmsg[80];
+ if (ap->abfname != NULL) {
+ unsigned memsize = ap->ablen - (HEAD_SIZE + 1);
+ char errmsg[80];
- fprintf(stderr,
+ fprintf(stderr,
_("Damaged buffer: %6u bytes allocated at line %d of %s %s\n"),
- memsize, ap->ablineno, my_name, ap->abfname
- );
- if (bufdump) {
- unsigned llen = 0;
- char *cp = ((char *) ap) + HEAD_SIZE;
-
- errmsg[0] = EOS;
- while (memsize) {
- if (llen >= 16) {
+ memsize, ap->ablineno, my_name, ap->abfname
+ );
+ if (bufdump) {
+ unsigned llen = 0;
+ char *cp = ((char *) ap) + HEAD_SIZE;
+
+ errmsg[0] = EOS;
+ while (memsize) {
+ if (llen >= 16) {
strcat(errmsg, "\n");
- llen = 0;
+ llen = 0;
fprintf(stderr, "%s", errmsg);
- errmsg[0] = EOS;
- }
- if (*cp < 0x20) {
+ errmsg[0] = EOS;
+ }
+ if (*cp < 0x20) {
sprintf(errmsg + strlen(errmsg), " %02X",
- (*cp++) & 0xFF);
- } else {
+ (*cp++) & 0xFF);
+ } else {
sprintf(errmsg + strlen(errmsg), " %c ",
- (*cp++) & 0xFF);
- }
- llen++;
- memsize--;
- }
+ (*cp++) & 0xFF);
+ }
+ llen++;
+ memsize--;
+ }
fprintf(stderr, "%s\n", errmsg);
- }
- }
+ }
+ }
}
ap = (struct abufhead *) ap->abq.qnext;
}
/* SM_STATIC -- Orphaned buffer detection can be disabled (for such
- items as buffers allocated during initialisation) by
- calling sm_static(1). Normal orphaned buffer
- detection can be re-enabled with sm_static(0). Note
- that all the other safeguards still apply to buffers
- allocated when sm_static(1) mode is in effect. */
+ items as buffers allocated during initialisation) by
+ calling sm_static(1). Normal orphaned buffer
+ detection can be re-enabled with sm_static(0). Note
+ that all the other safeguards still apply to buffers
+ allocated when sm_static(1) mode is in effect. */
void sm_static(int mode)
{
-@erase "$(INTDIR)\bsys.obj"
-@erase "$(INTDIR)\btime.obj"
-@erase "$(INTDIR)\btimers.obj"
- -@erase "$(INTDIR)\chksum.obj"
-@erase "$(INTDIR)\compat.obj"
-@erase "$(INTDIR)\cram-md5.obj"
-@erase "$(INTDIR)\crc32.obj"
-@erase "$(INTDIR)\create_file.obj"
+ -@erase "$(INTDIR)\crypto.obj"
-@erase "$(INTDIR)\daemon.obj"
-@erase "$(INTDIR)\dlist.obj"
-@erase "$(INTDIR)\edit.obj"
"$(INTDIR)\bsys.obj" \
"$(INTDIR)\btime.obj" \
"$(INTDIR)\btimers.obj" \
- "$(INTDIR)\chksum.obj" \
"$(INTDIR)\compat.obj" \
"$(INTDIR)\cram-md5.obj" \
"$(INTDIR)\crc32.obj" \
"$(INTDIR)\create_file.obj" \
+ "$(INTDIR)\crypto.obj" \
"$(INTDIR)\daemon.obj" \
"$(INTDIR)\dlist.obj" \
"$(INTDIR)\edit.obj" \
-@erase "$(INTDIR)\btime.sbr"
-@erase "$(INTDIR)\btimers.obj"
-@erase "$(INTDIR)\btimers.sbr"
- -@erase "$(INTDIR)\chksum.obj"
- -@erase "$(INTDIR)\chksum.sbr"
-@erase "$(INTDIR)\compat.obj"
-@erase "$(INTDIR)\compat.sbr"
-@erase "$(INTDIR)\cram-md5.obj"
-@erase "$(INTDIR)\crc32.sbr"
-@erase "$(INTDIR)\create_file.obj"
-@erase "$(INTDIR)\create_file.sbr"
+ -@erase "$(INTDIR)\crypto.obj"
+ -@erase "$(INTDIR)\crypto.sbr"
-@erase "$(INTDIR)\daemon.obj"
-@erase "$(INTDIR)\daemon.sbr"
-@erase "$(INTDIR)\dlist.obj"
"$(INTDIR)\bsys.sbr" \
"$(INTDIR)\btime.sbr" \
"$(INTDIR)\btimers.sbr" \
- "$(INTDIR)\chksum.sbr" \
"$(INTDIR)\compat.sbr" \
"$(INTDIR)\cram-md5.sbr" \
"$(INTDIR)\crc32.sbr" \
"$(INTDIR)\create_file.sbr" \
+ "$(INTDIR)\crypto.sbr" \
"$(INTDIR)\daemon.sbr" \
"$(INTDIR)\dlist.sbr" \
"$(INTDIR)\edit.sbr" \
"$(INTDIR)\bsys.obj" \
"$(INTDIR)\btime.obj" \
"$(INTDIR)\btimers.obj" \
- "$(INTDIR)\chksum.obj" \
"$(INTDIR)\compat.obj" \
"$(INTDIR)\cram-md5.obj" \
"$(INTDIR)\crc32.obj" \
"$(INTDIR)\create_file.obj" \
+ "$(INTDIR)\crypto.obj" \
"$(INTDIR)\daemon.obj" \
"$(INTDIR)\dlist.obj" \
"$(INTDIR)\edit.obj" \
!ENDIF
-SOURCE=..\filed\chksum.cpp
+SOURCE=..\compat\compat.cpp
!IF "$(CFG)" == "baculafd - Win32 Release"
-"$(INTDIR)\chksum.obj" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\compat.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ELSEIF "$(CFG)" == "baculafd - Win32 Debug"
-"$(INTDIR)\chksum.obj" "$(INTDIR)\chksum.sbr" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\compat.obj" "$(INTDIR)\compat.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
-
-SOURCE=..\compat\compat.cpp
+SOURCE="..\lib\cram-md5.cpp"
!IF "$(CFG)" == "baculafd - Win32 Release"
-"$(INTDIR)\compat.obj" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\cram-md5.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ELSEIF "$(CFG)" == "baculafd - Win32 Debug"
-"$(INTDIR)\compat.obj" "$(INTDIR)\compat.sbr" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\cram-md5.obj" "$(INTDIR)\cram-md5.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
-SOURCE="..\lib\cram-md5.cpp"
+SOURCE=..\lib\crc32.cpp
!IF "$(CFG)" == "baculafd - Win32 Release"
-"$(INTDIR)\cram-md5.obj" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\crc32.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ELSEIF "$(CFG)" == "baculafd - Win32 Debug"
-"$(INTDIR)\cram-md5.obj" "$(INTDIR)\cram-md5.sbr" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\crc32.obj" "$(INTDIR)\crc32.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
-SOURCE=..\lib\crc32.cpp
+SOURCE=..\findlib\create_file.cpp
!IF "$(CFG)" == "baculafd - Win32 Release"
-"$(INTDIR)\crc32.obj" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\create_file.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ELSEIF "$(CFG)" == "baculafd - Win32 Debug"
-"$(INTDIR)\crc32.obj" "$(INTDIR)\crc32.sbr" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\create_file.obj" "$(INTDIR)\create_file.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
-SOURCE=..\findlib\create_file.cpp
+
+SOURCE=..\lib\crypto.cpp
!IF "$(CFG)" == "baculafd - Win32 Release"
-"$(INTDIR)\create_file.obj" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\crypto.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ELSEIF "$(CFG)" == "baculafd - Win32 Debug"
-"$(INTDIR)\create_file.obj" "$(INTDIR)\create_file.sbr" : $(SOURCE) "$(INTDIR)"
+"$(INTDIR)\crypto.obj" "$(INTDIR)\crypto.sbr" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
+
SOURCE=..\lib\daemon.cpp
!IF "$(CFG)" == "baculafd - Win32 Release"
-@erase "$(INTDIR)\console_conf.obj"
-@erase "$(INTDIR)\cram-md5.obj"
-@erase "$(INTDIR)\crc32.obj"
+ -@erase "$(INTDIR)\crypto.obj"
-@erase "$(INTDIR)\dlist.obj"
-@erase "$(INTDIR)\edit.obj"
-@erase "$(INTDIR)\getopt.obj"
"$(INTDIR)\console_conf.obj" \
"$(INTDIR)\cram-md5.obj" \
"$(INTDIR)\crc32.obj" \
+ "$(INTDIR)\crypto.obj" \
"$(INTDIR)\dlist.obj" \
"$(INTDIR)\edit.obj" \
"$(INTDIR)\getopt.obj" \
-@erase "$(INTDIR)\console_conf.obj"
-@erase "$(INTDIR)\cram-md5.obj"
-@erase "$(INTDIR)\crc32.obj"
+ -@erase "$(INTDIR)\crypto.obj"
-@erase "$(INTDIR)\dlist.obj"
-@erase "$(INTDIR)\edit.obj"
-@erase "$(INTDIR)\getopt.obj"
"$(INTDIR)\console_conf.obj" \
"$(INTDIR)\cram-md5.obj" \
"$(INTDIR)\crc32.obj" \
+ "$(INTDIR)\crypto.obj" \
"$(INTDIR)\dlist.obj" \
"$(INTDIR)\edit.obj" \
"$(INTDIR)\getopt.obj" \
$(CPP) $(CPP_PROJ) $(SOURCE)
+SOURCE=..\lib\crypto.cpp
+
+"$(INTDIR)\crypto.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
SOURCE=..\lib\dlist.cpp
"$(INTDIR)\dlist.obj" : $(SOURCE) "$(INTDIR)"
+++ /dev/null
-#include "../../filed/chksum.c"
--- /dev/null
+#include "../../lib/crypto.c"
..\lib\btime
..\lib\cram-md5
..\lib\crc32
+..\lib\crypto
..\lib\daemon
..\lib\dlist
..\lib\edit
-@erase "$(INTDIR)\btime.obj"
-@erase "$(INTDIR)\cram-md5.obj"
-@erase "$(INTDIR)\crc32.obj"
+ -@erase "$(INTDIR)\crypto.obj"
-@erase "$(INTDIR)\daemon.obj"
-@erase "$(INTDIR)\dlist.obj"
-@erase "$(INTDIR)\edit.obj"
"$(INTDIR)\btime.obj" \
"$(INTDIR)\cram-md5.obj" \
"$(INTDIR)\crc32.obj" \
+ "$(INTDIR)\crypto.obj" \
"$(INTDIR)\daemon.obj" \
"$(INTDIR)\dlist.obj" \
"$(INTDIR)\edit.obj" \
-@erase "$(INTDIR)\cram-md5.sbr"
-@erase "$(INTDIR)\crc32.obj
-@erase "$(INTDIR)\crc32.sbr"
+ -@erase "$(INTDIR)\crypto.obj
+ -@erase "$(INTDIR)\crypto.sbr"
-@erase "$(INTDIR)\daemon.obj
-@erase "$(INTDIR)\daemon.sbr"
-@erase "$(INTDIR)\dlist.obj
"$(INTDIR)\btime.sbr" \
"$(INTDIR)\cram-md5.sbr" \
"$(INTDIR)\crc32.sbr" \
+ "$(INTDIR)\crypto.sbr" \
"$(INTDIR)\daemon.sbr" \
"$(INTDIR)\dlist.sbr" \
"$(INTDIR)\edit.sbr" \
"$(INTDIR)\btime.obj" \
"$(INTDIR)\cram-md5.obj" \
"$(INTDIR)\crc32.obj" \
+ "$(INTDIR)\crypto.obj" \
"$(INTDIR)\daemon.obj" \
"$(INTDIR)\dlist.obj" \
"$(INTDIR)\edit.obj" \
!ENDIF
+FILENAME=crypto
+SOURCE=..\lib\crypto.cpp
+!IF "$(CFG)" == "wx-console - Win32 Release"
+
+
+"$(INTDIR)\$(FILENAME).obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "wx-console - Win32 Debug"
+
+
+"$(INTDIR)\$(FILENAME).obj" "$(INTDIR)\$(FILENAME).sbr" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+
FILENAME=daemon
SOURCE=..\lib\daemon.cpp
!IF "$(CFG)" == "wx-console - Win32 Release"