On Wed, May 27, 2009 at 12:09:45PM +0300, Gregory Edigarov wrote:
> Sorry for the first one.
> If there's something wrong with style again, please tell me exactly 
> what.  I will  edit it again.
> 
> -- 
> With best regards,
>       Gregory Edigarov
> --- smtpd.c.orig      Tue May 26 23:11:26 2009
> +++ smtpd.c.new       Wed May 27 12:04:17 2009
> @@ -83,6 +83,52 @@
>  
>  extern char  **environ;
>  
> +char    *executable     = "/usr/libexec/smtpd-auth";
> +char    *plugin         = "/usr/libexec/smtpd-auth.so";
> +
> +/*
> + * athenticate through custom executable
> + */ 
> +
> +int auth_exec (char *executable, char *user, char *passwd)
> +{       
> +        pid_t a_pid;
> +        int r;
> +        
> +        if( ( a_pid = fork()) == 0) 
> +                execl(executable,executable,user,passwd);
> +        else
> +                r = wait();

Consider the case when fork() may fail. Also, wait(2) takes
an argument.


> +/*        
> + * authenticate using plugin
> + */
> +
> +int auth_plugin (char *plugin, char *user, char *passwd)
> +{
> +        void *handle; 
> +        int (*smtp_authenticate) (char*, char*); /* plugin must export this 
> function */
> +        int r;
> +        
> +        handle = dlopen (plugin,RTLD_NOW);
> +        if (!handle) { 
> +                /* perhaps should log something before */
> +                return 0;
> +        }
> +        
> +        smtp_authenticate = dlsym(handle,"smtp_authenticate");
> +        if ((error = dlerror()) != NULL)  {
                ^^^^^
is 'error' a global variable?

--patrick

Reply via email to