Yahoo Groups archive

Milter-greylist

Index last updated: 2026-04-28 23:32 UTC

Message

Re: [milter-greylist] Compiling milter-greylist 4.3.4 with DKIM ?

2010-02-26 by Michael Mansour

Hi Emmanuel,

> Michael Mansour <mic@...> wrote:
> 
> > # nm /usr/lib/libdkim.a
> 
> The closest thing is DKIMSignInit/DKIMVerifyInit. What about in the
> header files? Perhaps dkim_init is supposed to be a macro?

The dkim.h that comes with the libdkim 1.0.19 RPM has this:

# cat /usr/include/dkim.h
/*****************************************************************************
*  Copyright 2005 Alt-N Technologies, Ltd.
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  This code incorporates intellectual property owned by Yahoo! and licensed
*  pursuant to the Yahoo! DomainKeys Patent License Agreement.
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*
*****************************************************************************/

#ifdef WIN32
#define DKIM_CALL       WINAPI
#else
#define DKIM_CALL
#define MAKELONG(a,b) ((long)(((unsigned)(a) & 0xffff) | (((unsigned)(b) &
0xffff) << 16)))
#endif


#ifdef __cplusplus
extern "C" {
#endif

// DKIM Body hash versions
#define DKIM_BODYHASH_ALLMAN_1  1
#define DKIM_BODYHASH_IETF_1    2
#define DKIM_BODYHASH_BOTH              DKIM_BODYHASH_ALLMAN_1 |
DKIM_BODYHASH_IETF_1

// DKIM hash algorithms
#define DKIM_HASH_SHA1                  1
#define DKIM_HASH_SHA256                2
#define DKIM_HASH_SHA1_AND_256  DKIM_HASH_SHA1 | DKIM_HASH_SHA256

// DKIM canonicalization methods
#define DKIM_CANON_SIMPLE               1
#define DKIM_CANON_NOWSP                2
#define DKIM_CANON_RELAXED              3

#define DKIM_SIGN_SIMPLE                       
MAKELONG(DKIM_CANON_SIMPLE,DKIM_CANON_SIMPLE)
#define DKIM_SIGN_SIMPLE_RELAXED       
MAKELONG(DKIM_CANON_RELAXED,DKIM_CANON_SIMPLE)
#define DKIM_SIGN_RELAXED                      
MAKELONG(DKIM_CANON_RELAXED,DKIM_CANON_RELAXED)
#define DKIM_SIGN_RELAXED_SIMPLE       
MAKELONG(DKIM_CANON_SIMPLE,DKIM_CANON_RELAXED)

// DKIM Error codes
#define DKIM_SUCCESS                    0       // operation successful
#define DKIM_OUT_OF_MEMORY              1       // memory allocation failed
#define DKIM_INVALID_CONTEXT    2       // DKIMContext structure invalid for
this operation
#define DKIM_NO_SENDER                  3       // Could not find From: or
Sender: header in message
#define DKIM_BAD_PRIVATE_KEY    4       // Could not parse private key
#define DKIM_BUFFER_TOO_SMALL   5       // Buffer passed in is not large enough

// DKIM Verification Error codes
#define DKIM_FAIL                                                       -1   
          // verify error: message is suspicious
#define DKIM_BAD_SYNTAX                                         -2           
  // signature error: DKIM-Signature could not parse or has bad tags/values
#define DKIM_SIGNATURE_BAD                                      -3           
  // signature error: RSA verify failed
#define DKIM_SIGNATURE_BAD_BUT_TESTING          -4              // signature
error: RSA verify failed but testing
#define DKIM_SIGNATURE_EXPIRED                          -5              //
signature error: x= is old
#define DKIM_SELECTOR_INVALID                           -6              //
signature error: selector doesn't parse or contains invalid values
#define DKIM_SELECTOR_GRANULARITY_MISMATCH      -7              // signature
error: selector g= doesn't match i=
#define DKIM_SELECTOR_KEY_REVOKED                       -8              //
signature error: selector p= empty
#define DKIM_SELECTOR_DOMAIN_NAME_TOO_LONG      -9              // signature
error: selector domain name too long to request
#define DKIM_SELECTOR_DNS_TEMP_FAILURE          -10             // signature
error: temporary dns failure requesting selector
#define DKIM_SELECTOR_DNS_PERM_FAILURE          -11             // signature
error: permanent dns failure requesting selector
#define DKIM_SELECTOR_PUBLIC_KEY_INVALID        -12             // signature
error: selector p= value invalid or wrong format
#define DKIM_NO_SIGNATURES                                      -13          
  // process error, no sigs
#define DKIM_NO_VALID_SIGNATURES                        -14             //
process error, no valid sigs
#define DKIM_BODY_HASH_MISMATCH                         -15             //
sigature verify error: message body does not hash to bh value
#define DKIM_SELECTOR_ALGORITHM_MISMATCH        -16             // signature
error: selector h= doesn't match signature a=
#define DKIM_STAT_INCOMPAT                                      -17          
  // signature error: incompatible v=
#define DKIM_MAX_ERROR                                          -18          
  // set this to 1 greater than the highest error code (but negative)

// DKIM_SUCCESS                                                              
  // verify result: all signatures verified
                                                                             
                  // signature result: signature verified
#define DKIM_FINISHED_BODY                                      1       //
process result: no more message body is needed
#define DKIM_PARTIAL_SUCCESS                            2       // verify
result: at least one but not all signatures verified
#define DKIM_NEUTRAL                                            3       //
verify result: no signatures verified but message is not suspicous
#define DKIM_SUCCESS_BUT_EXTRA                          4       // signature
result: signature verified but it did not include all of the body



// This function is called once for each header in the message
// return 1 to include this header in the signature and 0 to exclude.
typedef int (DKIM_CALL *DKIMHEADERCALLBACK)(const char* szHeader);

// This function is called to retrieve a TXT record from DNS
typedef int (DKIM_CALL *DKIMDNSCALLBACK)(const char* szFQDN, char* szBuffer,
int nBufLen );

#ifdef _WIN32
#include <pshpack1.h>
#endif

typedef struct DKIMContext_t
{
        unsigned int reserved1;
        unsigned int reserved2;
        void*            reserved3;
} DKIMContext;

typedef struct DKIMSignOptions_t
{
        int nCanon;                                                          
  // canonization
        int nIncludeBodyLengthTag;                              // 0 = don't
include l= tag, 1 = include l= tag
        int nIncludeTimeStamp;                                  // 0 = don't
include t= tag, 1 = include t= tag
        int nIncludeQueryMethod;                                // 0 = don't
include q= tag, 1 = include q= tag
        char szSelector[80];                                    // selector -
required
        char szDomain[256];                                             //
domain - optional - if empty, domain is computed from sender
        char szIdentity[256];                                   // for i= tag,
if empty tag will not be included in sig
        unsigned long expireTime;                               // for x= tag,
if 0 tag will not be included in sig
        DKIMHEADERCALLBACK pfnHeaderCallback;   // header callback
        char szRequiredHeaders[256];                    // colon-separated
list of headers that must be signed
        int nHash;                                                           
  // use one of the DKIM_HASH_xx constants here
                                                                             
          // even if not present in the message
        int nIncludeCopiedHeaders;                              // 0 = don't
include z= tag, 1 = include z= tag
        int nIncludeBodyHash;                                   // use one of
the DKIM_BODYHASH_xx constants here
} DKIMSignOptions;

typedef struct DKIMVerifyOptions_t
{
        DKIMDNSCALLBACK pfnSelectorCallback;    // selector record callback
        DKIMDNSCALLBACK pfnPracticesCallback;   // SSP record callback
        int nHonorBodyLengthTag;                                // 0 = ignore
l= tag, 1 = use l= tag to limit the amount of body verified
        int nCheckPractices;                                    // 0 = use
default (unknown) practices, 1 = request and use sender's signing practices
        int nSubjectRequired;                                   // 0 = subject
is required to be signed, 1 = not required
        int nSaveCanonicalizedData;             // 0 = canonicalized data is
not saved, 1 = canonicalized data is saved
} DKIMVerifyOptions;

typedef struct DKIMVerifyDetails_t
{
        char *szSignature;
        char *DNS;
        char *szCanonicalizedData;
        int nResult;
} DKIMVerifyDetails;


#ifdef _WIN32
#include <poppack.h>
#endif

int DKIM_CALL DKIMSignInit( DKIMContext* pSignContext, DKIMSignOptions*
pOptions );
int DKIM_CALL DKIMSignProcess( DKIMContext* pSignContext, char* szBuffer, int
nBufLength );
int DKIM_CALL DKIMSignGetSig( DKIMContext* pSignContext, char* szPrivKey,
char* szSignature, int nSigLength );
int DKIM_CALL DKIMSignGetSig2( DKIMContext* pSignContext, char* szPrivKey,
char** pszSignature );
void DKIM_CALL DKIMSignFree( DKIMContext* pSignContext );

int DKIM_CALL DKIMVerifyInit( DKIMContext* pVerifyContext, DKIMVerifyOptions*
pOptions );
int DKIM_CALL DKIMVerifyProcess( DKIMContext* pVerifyContext, char* szBuffer,
int nBufLength );
int DKIM_CALL DKIMVerifyResults( DKIMContext* pVerifyContext );
int DKIM_CALL DKIMVerifyGetDetails( DKIMContext* pVerifyContext, int*
nSigCount, DKIMVerifyDetails** pDetails, char* szPractices );
void DKIM_CALL DKIMVerifyFree( DKIMContext* pVerifyContext );

char *DKIM_CALL DKIMVersion();

char *DKIM_CALL DKIMGetErrorString( int ErrorCode );

#ifdef __cplusplus
}
#endif


Grep'ing through that I couldn't find anything related to dkim_init?

Should I try compiling the library from the latest 1.0.21 source?

http://sourceforge.net/projects/libdkim/

ATrpms.net are usually very good with providing the right RPM's for the job,
so I doubt compiling the libdkim from source will make a difference, but I'm
willing to try if we're out of ideas above?

Michael.

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.