]> git.sur5r.net Git - openldap/blobdiff - clients/rcpt500/main.c
Fix sasl passwd handling (needs to be copied to other tools)
[openldap] / clients / rcpt500 / main.c
index 346c5fc10d3e4e22a8ddd5885d92c93cf9564de3..f970476a5e8012fce75bfe84b2e1eb6320bcc28d 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /*
  * main.c: for rcpt500 (X.500 email query responder)
  *
 #include "portable.h"
 
 #include <stdio.h>
-#include <stdlib.h>
+
+#include <ac/stdlib.h>
 
 #include <ac/ctype.h>
+#include <ac/signal.h>
 #include <ac/string.h>
 #include <ac/syslog.h>
 #include <ac/unistd.h>
 
-#include "ldapconfig.h"
+#include "ldap_defaults.h"
 #include "rcpt500.h"
 
 int dosyslog = 0;
@@ -54,7 +57,6 @@ main( int argc, char **argv )
     char               *prog, *usage = "%s [-l] [-U] [-h ldaphost] [-p ldapport] [-b searchbase] [-a] [-z sizelimit] [-u dapuser] [-f filterfile] [-t templatefile] [-c rdncount]\n";
     struct msginfo     msg;
     int                        c, errflg;
-    char               *replytext;
 
     *reply = '\0';
 
@@ -111,16 +113,20 @@ main( int argc, char **argv )
     }
     if ( errflg || optind < argc ) {
        fprintf( stderr, usage, prog );
-       exit( 1 );
+       exit( EXIT_FAILURE );
     }
 
+#ifdef SIGPIPE
+       (void) SIGNAL( SIGPIPE, SIG_IGN );
+#endif
+
     if ( dosyslog ) {
        /*
         * if syslogging requested, initialize
         */
 #ifdef LOG_DAEMON
        openlog( prog, OPENLOG_OPTIONS, LOG_DAEMON );
-#else
+#elif LOG_DEBUG
        openlog( prog, OPENLOG_OPTIONS );
 #endif
     }
@@ -135,7 +141,7 @@ main( int argc, char **argv )
     if ( dosyslog ) {
        syslog( LOG_INFO, "processing command \"%s %s\" from %s",
                ( msg.msg_command < 0 ) ? "Unknown" :
-               cmds[ msg.msg_command ].cmd_text,
+               rcpt_cmds[ msg.msg_command ].cmd_text,
                ( msg.msg_arg == NULL ) ? "" : msg.msg_arg, msg.msg_replyto );
     }
 
@@ -145,10 +151,10 @@ main( int argc, char **argv )
 
 /*
     sprintf( reply, "Your request was interpreted as: %s %s\n\n",
-           cmds[ msg.msg_command ].cmd_text, msg.msg_arg );
+           rcpt_cmds[ msg.msg_command ].cmd_text, msg.msg_arg );
 */
 
-    (*cmds[ msg.msg_command ].cmd_handler)( &msg, reply );
+    (*rcpt_cmds[ msg.msg_command ].cmd_handler)( &msg, reply );
 
     if ( send_reply( &msg, reply ) < 0 ) {
        if ( dosyslog ) {
@@ -231,20 +237,20 @@ read_hdr( FILE *fp, int offset, char *buf, int MAXSIZEe, char **linep )
 {
     char       *hdr;
 
-    for ( hdr = buf + offset; isspace( *hdr ); ++hdr ) {
+    for ( hdr = buf + offset; isspace( (unsigned char) *hdr ); ++hdr ) {
        ;
     }
     if (( hdr = strdup( hdr )) == NULL ) {
        if ( dosyslog ) {
            syslog( LOG_ERR, "strdup: %m" );
        }
-       exit( 1 );
+       exit( EXIT_FAILURE );
     }
 
     while ( 1 ) {
        *linep = fgets( buf, MAXSIZE, fp );
        buf[ strlen( buf ) - 1 ] = '\0';        /* remove trailing newline */
-       if ( *linep == NULL || !isspace( **linep )) {
+       if ( *linep == NULL || !isspace( (unsigned char) **linep )) {
            break;
        }
        if (( hdr = realloc( hdr, strlen( hdr ) +
@@ -252,7 +258,7 @@ read_hdr( FILE *fp, int offset, char *buf, int MAXSIZEe, char **linep )
            if ( dosyslog ) {
                syslog( LOG_ERR, "realloc: %m" );
            }
-           exit( 1 );
+           exit( EXIT_FAILURE );
        }
        strcat( hdr, "\n" );
        strcat( hdr, *linep );
@@ -350,16 +356,16 @@ find_command( char *text, char **argp )
 
     p = text;
     for ( s = argbuf; *p != '\0'; ++p ) {
-       *s++ = TOLOWER( *p );
+       *s++ = TOLOWER( (unsigned char) *p );
     }
     *s = '\0';
 
-    for ( i = 0; cmds[ i ].cmd_text != NULL; ++i ) {
-       if (( s = strstr( argbuf, cmds[ i ].cmd_text )) != NULL
-                   && isspace( *(s + strlen( cmds[ i ].cmd_text )))) {
-           strcpy( argbuf, text + (s - argbuf) + strlen( cmds[ i ].cmd_text ));
+    for ( i = 0; rcpt_cmds[ i ].cmd_text != NULL; ++i ) {
+       if (( s = strstr( argbuf, rcpt_cmds[ i ].cmd_text )) != NULL
+           && isspace( (unsigned char) s[ strlen( rcpt_cmds[ i ].cmd_text ) ] )) {
+           strcpy( argbuf, text + (s - argbuf) + strlen( rcpt_cmds[ i ].cmd_text ));
            *argp = argbuf;
-           while ( isspace( **argp )) {
+           while ( isspace( (unsigned char) **argp )) {
                ++(*argp);
            }
            return( i );