ietf-mxcomp
[Top] [All Lists]

RE: DEPLOY: Microsoft Royalty Free Sender ID Patent License FAQ

2004-08-26 07:49:41

Or an alternative MTA :-)

I'm not sure that is really a joking matter.  We aren't supposed to
talk about "hidden agendas", but since you raised the issue, I'll ask
directly:

Is your goal in supporting the SenderID license to get people to use
"an alternative MTA", say the one that Harry and Jim work on?

QMail is not being maintained. The license terms make it impossible
for it to be maintained. There are better mailers out there with
true open source licenses. These do not create issues in the 
standards development area.

I would advise anyone using QMail to move to a supported product.
Whether that support is commercial or voluntary does not matter to
me, I don't sell mail servers.

I don't think that a standards group should be constrained by the
license terms of an unsupported product that has not been maintained
for years and is unlikely to be maintained in the future.


If I had to patch Qmail the way I would do it is as follows:

[ideas snipped]

Your scheme does not match the design of qmail.  What you are
suggesting is a major rewrite of the qmail MTA.

Actually not, it is many years since I looked at QMail, but this is 
the type of modification I used to do in a day or so. 

Making a call out to a sharred library is no different in principle
than making a call out to an object library. 

Take a look at the following:

http://users.actcom.co.il/~choo/lupg/tutorials/libraries/unix-c-libraries.ht
ml#shared_dlsym


#include <dlfcn.h>      /* defines dlopen(), etc.       */
.
.
void* lib_handle;       /* handle of the opened library */

lib_handle = dlopen("/full/path/to/library", RTLD_LAZY);
if (!lib_handle) {
    fprintf(stderr, "Error during dlopen(): %s\n", dlerror());
    exit(1);
}

/* first define a function pointer variable to hold the function's address
*/
struct local_file* (*readfile)(const char* file_path);
/* then define a pointer to a possible error string */
const char* error_msg;
/* finally, define a pointer to the returned file */
struct local_file* a_file;

/* now locate the 'readfile' function in the library */
readfile = dlsym(lib_handle, "readfile");

/* check that no error occured */
error_msg = dlerror();
if (error_msg) {
    fprintf(stderr, "Error locating 'readfile' - %s\n", error_msg);
    exit(1);
}

/* finally, call the function, with a given file path */
a_file = (*readfile)("hello.txt");

dlclose(lib_handle); 

                Phill


<Prev in Thread] Current Thread [Next in Thread>