This was discussed with Gregory in private but for the record and archives:
I think this doesn't belong here and should be part of a login script which
would take care of forking the executable, or calling the function exported
from some shared lib. This feeling is shared by others too.
Gilles
patrick keshishian a icrit :
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