On Wed 25/Jan/2017 14:33:16 +0100 Sam Varshavchik wrote:
> Alessandro Vesely writes:
>>
>> while reviewing my Courier installation, I stumbled upon how my authProg.c is
>> compiled.  It uses -I/my/path/to/auth/cur -L/usr/path/to/courier-authlib and
>> -lcourierauthsasl, on a server with courier-authlib-0.66.4.20160106.  On a
>> stock Debian jessie (0.66.1) I have to add two more libraries.  The main
>> difficulty is to get the sources for the include files:
>>
>> I include courierauth.h and courierauthsasl.h from authlib-devel.  But I also
>> need:
>>
>> #include    "libs/libhmac/hmac.h" // for struct hmac_hashinfo
>> #include    "cramlib.h" // for auth_cram_callback
>>
>> In addition, I also need auth.h, because cramlib.h includes it (it would
>> suffice to declare "struct authinfo;" to avoid the inclusion).  All file 
>> names
>> in include_HEADER start with "courier", so some renaming would be in order if
>> this issue is ever addressed.
>>
>> I don't think I'm going to switch to binary versions of Courier any time 
>> soon,
>> so I don't really need a cleaner compiling environment for authpipe.  
>> However,
>> since a courier-authlib-dev package exists, I wonder why it doesn't support
>> SASL.  I use authsasl_frombase64, auth_cram_callback, and hmac_list.  What do
>> everybody else do?
>
> It should be possible for you to support SASL authentication by using
> authsasl_list, that's declared in courierauthsasl.h. You shouldn't need to 
> look
> at the lower-level functions.

Ehm, I may be dumb but I don't get it.  That struct is something like:

  struct authsasl_info authsasl_list[] = {
   {"EXTERNAL", 0},
   {"PLAIN", authsasl_plain},
   {"LOGIN", authsasl_login},
   {"CRAM-MD5", authsasl_cram},
   {"CRAM-SHA1", authsasl_cram},
   {"CRAM-SHA256", authsasl_cram},
   { 0, 0}};

Yes, I can find which cram types are available.  However, auth_cram_callback() 
wants a struct hmac_hashinfo *h in its cci parameter.  The authsasl_cram 
function declared in courierauthsasl.h seems to be designed to be called 
/during/ the dialog.  In authProg, instead, I read stuff more or less like:

   AUTH 30\nesmtp\nlogin\njoe@spam\npassword

/after/ the dialog is already terminated.  If it was SASL instead of login, the 
last two lines read would contain challenge and response, which I decode with 
authsasl_frombase64(); then I pass cleartext password, challenge and response 
to auth_cram_callback(), and based on its return code either authenticate the 
user or fail.  Can I do that with some of the exported functions?

Calling auth_sasl_extract_userid() I nearly get the job done, but still haven't 
verified the password.  I didn't find a function which calls 
auth_verify_cram(), except auth_cram_callback().  The latter is also called by 
auth_custom(), but that's a different thing, isn't it?

Ale
-- 















------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
courier-users mailing list
courier-users@lists.sourceforge.net
Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-users

Reply via email to