]> git.sur5r.net Git - openldap/blobdiff - clients/fax500/main.c
Provide a little information about SDF, how to use it, and where to get it.h
[openldap] / clients / fax500 / main.c
index 7f526dd794c943b4b818b60f2b32ec7a760af384..5cd49dbf812eb6deb4663253c21cf06842c99163 100644 (file)
 #include "portable.h"
 
 #include <stdio.h>
-#include <ctype.h>
+#include <stdlib.h>
 
+#include <ac/ctype.h>
+#include <ac/errno.h>
+#include <ac/signal.h>
 #include <ac/socket.h>
 #include <ac/string.h>
+#include <ac/sysexits.h>
 #include <ac/syslog.h>
 #include <ac/time.h>
+#include <ac/unistd.h>
 #include <ac/wait.h>
 
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
 #endif
-
+#ifdef HAVE_SYS_RESOURCE_H
 #include <sys/resource.h>
-#include <sysexits.h>
+#endif
 
 #include "lber.h"
 #include "ldap.h"
 
-#if LDAP_VERSION < LDAP_VERSION3
-/* quick fix until we have ldap_set_options */
-#include "../libraries/libldap/ldap-int.h"
-#endif
+#include "fax500.h"
 
 #include <ldapconfig.h>
 
@@ -52,7 +54,6 @@ char  *errorsfrom = NULL;
 char   *mailfrom = NULL;
 char   *host = NULL;
 int    hostlen = 0;
-char   *faxtotpc();
 
 int    identity;
 #define        MAIL500 1       
@@ -108,27 +109,33 @@ static char       *attrs[] = { "objectClass", "title", "postaladdress",
                        "rfc822RequestsTo", "joinable", "cn", "member",
                        "facsimileTelephoneNumber", NULL };
 
-static do_address();
-static do_group();
-static do_group_members();
-static send_message();
-static send_errors();
-static do_noemailorfax();
-static do_ambiguous();
-static add_to();
-static isgroup();
-static add_error();
-static add_group();
-static unbind_and_exit();
-static group_loop();
-static send_group();
-static has_attributes();
-static char **get_attributes_mail_dn();
-static char *canonical();
-
-main (argc, argv)
-int    argc;
-char   **argv;
+
+static void do_address(char *name, char ***to, int *nto, Group **togroups, int *ngroups, Error **err, int *nerr, int type);
+static int  do_group(LDAPMessage *e, char *dn, char ***to, int *nto, Group **togroups, int *ngroups, Error **err, int *nerr);
+static void do_group_members(LDAPMessage *e, char *dn, char ***to, int *nto, Group **togroups, int *ngroups, Error **err, int *nerr);
+static void send_message(char **to);
+static void send_errors(Error *err, int nerr);
+static void do_noemailorfax(FILE *fp, Error *err, int namelen, int errtype);
+static void do_ambiguous(FILE *fp, Error *err, int namelen);
+static int  count_values(char **list);
+static void add_to(char ***list, int *nlist, char **new);
+static int  isgroup(LDAPMessage *e);
+static void add_error(Error **err, int *nerr, int code, char *addr, LDAPMessage *msg);
+static void add_group(char *dn, Group **list, int *nlist);
+static void unbind_and_exit(int rc);
+static int  group_loop(char *dn);
+static void send_group(Group *group, int ngroup);
+static int  has_attributes(LDAPMessage *e, char *attr1, char *attr2);
+static char **get_attributes_mail_dn(LDAPMessage *e, char *attr1, char *attr2);
+static char *canonical(char *s);
+static int  connect_to_x500 (void);
+static void do_group_errors (LDAPMessage *e, char *dn, char ***to, int *nto, Error **err, int *nerr);
+static void do_group_request (LDAPMessage *e, char *dn, char ***to, int *nto, Error **err, int *nerr);
+static void add_member (char *gdn, char *dn, char ***to, int *nto, Group **togroups, int *ngroups, Error **err, int *nerr);
+
+
+int
+main ( int argc, char **argv )
 {
        char            *myname;
        char            **tolist;
@@ -136,9 +143,6 @@ char        **argv;
        Group           *togroups;
        int             numto, ngroups, numerr, nargs;
        int             i, j;
-       FILE            *fp;
-       extern int      optind, errno;
-       extern char     *optarg;
 
        while ( (i = getopt( argc, argv, "f:h:m:" )) != EOF ) {
                switch( i ) {
@@ -181,6 +185,10 @@ char       **argv;
                identity = MAIL500;
        }
 
+#ifdef SIGPIPE
+       (void) SIGNAL( SIGPIPE, SIG_IGN );
+#endif
+
 #ifdef LOG_MAIL
        openlog( myname, OPENLOG_OPTIONS, LOG_MAIL );
 #else
@@ -260,7 +268,7 @@ char        **argv;
         */
 
        if ( numerr > 0 && numto > nargs || ngroups > 0 ) {
-               int     fd;
+               FILE    *fp;
                char    buf[BUFSIZ];
 
                umask( 077 );
@@ -308,16 +316,21 @@ char      **argv;
        return( EX_OK );
 }
 
-connect_to_x500()
+static int
+connect_to_x500( void )
 {
-       if ( (ld = ldap_open( LDAPHOST, LDAP_PORT )) == NULL ) {
+       int sizelimit = FAX_MAXAMBIGUOUS;
+       int deref = LDAP_DEREF_ALWAYS;
+
+       if ( (ld = ldap_open( NULL, 0 )) == NULL ) {
                syslog( LOG_ALERT, "ldap_open failed" );
                return( -1 );
        }
-       ld->ld_sizelimit = FAX_MAXAMBIGUOUS;
-       ld->ld_deref = LDAP_DEREF_ALWAYS;
 
-       if ( ldap_simple_bind_s( ld, FAX_BINDDN, FAX_BIND_CRED ) != LDAP_SUCCESS ) {
+       ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &sizelimit);
+       ldap_set_option(ld, LDAP_OPT_DEREF, &deref);
+
+       if ( ldap_simple_bind_s( ld, NULL, NULL ) != LDAP_SUCCESS ) {
                syslog( LOG_ALERT, "ldap_simple_bind_s failed" );
                return( -1 );
        }
@@ -326,16 +339,17 @@ connect_to_x500()
 }
 
 
-static
-do_address( name, to, nto, togroups, ngroups, err, nerr, type )
-    char       *name;
-    char       ***to;
-    int                *nto;
-    Group      **togroups;
-    int                *ngroups;
-    Error      **err;
-    int                *nerr;
-    int                type;
+static void
+do_address(
+       char            *name,
+       char            ***to,
+       int             *nto,
+       Group           **togroups,
+       int             *ngroups,
+       Error           **err,
+       int             *nerr,
+       int             type
+)
 {
        int             rc, b, f, match;
        LDAPMessage     *e, *res;
@@ -577,16 +591,17 @@ do_address( name, to, nto, togroups, ngroups, err, nerr, type )
        return;
 }
 
-static
-do_group( e, dn, to, nto, togroups, ngroups, err, nerr )
-    LDAPMessage        *e;
-    char       *dn;
-    char       ***to;
-    int                *nto;
-    Group      **togroups;
-    int                *ngroups;
-    Error      **err;
-    int                *nerr;
+static int
+do_group(
+       LDAPMessage     *e,
+       char            *dn,
+       char            ***to,
+       int             *nto,
+       Group           **togroups,
+       int             *ngroups,
+       Error           **err,
+       int             *nerr
+)
 {
        /*
         * If this group has an rfc822ErrorsTo attribute, we need to
@@ -615,16 +630,17 @@ do_group( e, dn, to, nto, togroups, ngroups, err, nerr )
 }
 
 /* ARGSUSED */
-static
-do_group_members( e, dn, to, nto, togroups, ngroups, err, nerr )
-    LDAPMessage        *e;
-    char       *dn;
-    char       ***to;
-    int                *nto;
-    Group      **togroups;
-    int                *ngroups;
-    Error      **err;
-    int                *nerr;
+static void
+do_group_members(
+       LDAPMessage     *e,
+       char            *dn,
+       char            ***to,
+       int             *nto,
+       Group           **togroups,
+       int             *ngroups,
+       Error           **err,
+       int             *nerr
+)
 {
        int             i, rc;
        char            *ndn;
@@ -685,7 +701,10 @@ do_group_members( e, dn, to, nto, togroups, ngroups, err, nerr )
                timeout.tv_usec = 0;
 
                /* for each subtree to look in... */
-               ld->ld_sizelimit = FAX_MAXMEMBERS;
+               {
+                       int sizelimit = FAX_MAXMEMBERS;
+                       ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &sizelimit);
+               }       
                for ( i = 0; base[i].b_dn != NULL; i++ ) {
                        /* find entries that have joined this group... */
                        rc = ldap_search_st( ld, base[i].b_dn,
@@ -784,21 +803,26 @@ do_group_members( e, dn, to, nto, togroups, ngroups, err, nerr )
 
                        ldap_msgfree( res );
                }
-               ld->ld_sizelimit = FAX_MAXAMBIGUOUS;
+               {
+                       int sizelimit = FAX_MAXAMBIGUOUS;
+                       ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &sizelimit);
+               }       
        }
 
        return;
 }
 
-add_member( gdn, dn, to, nto, togroups, ngroups, err, nerr )
-    char       *gdn;
-    char       *dn;
-    char       ***to;
-    int                *nto;
-    Group      **togroups;
-    int                *ngroups;
-    Error      **err;
-    int                *nerr;
+static void
+add_member(
+       char            *gdn,
+       char            *dn,
+       char            ***to,
+       int             *nto,
+       Group           **togroups,
+       int             *ngroups,
+       Error           **err,
+       int             *nerr
+)
 {
        char            *ndn;
        char            **mail;
@@ -881,13 +905,15 @@ add_member( gdn, dn, to, nto, togroups, ngroups, err, nerr )
        return;
 }
 
-do_group_request( e, dn, to, nto, err, nerr )
-    LDAPMessage        *e;
-    char       *dn;
-    char       ***to;
-    int                *nto;
-    Error      **err;
-    int                *nerr;
+static void
+do_group_request(
+       LDAPMessage     *e,
+       char            *dn,
+       char            ***to,
+       int             *nto,
+       Error           **err,
+       int             *nerr
+)
 {
        char            **requeststo;
 
@@ -899,17 +925,17 @@ do_group_request( e, dn, to, nto, err, nerr )
        } else {
                add_error( err, nerr, E_NOREQUEST, dn, NULLMSG );
        }
-
-       return;
 }
 
-do_group_errors( e, dn, to, nto, err, nerr )
-    LDAPMessage        *e;
-    char       *dn;
-    char       ***to;
-    int                *nto;
-    Error      **err;
-    int                *nerr;
+static void
+do_group_errors(
+       LDAPMessage     *e,
+       char            *dn,
+       char            ***to,
+       int             *nto,
+       Error           **err,
+       int             *nerr
+)
 {
        char            **errorsto;
 
@@ -921,13 +947,10 @@ do_group_errors( e, dn, to, nto, err, nerr )
        } else {
                add_error( err, nerr, E_NOERRORS, dn, NULLMSG );
        }
-
-       return;
 }
 
-static
-send_message( to )
-    char       **to;
+static void
+send_message( char **to )
 {
        int     pid;
 #ifndef HAVE_WAITPID
@@ -936,7 +959,7 @@ send_message( to )
 
 
        /* parent */
-       if ( pid = fork() ) {
+       if ( (pid = fork()) != 0 ) {
 #ifdef HAVE_WAITPID
                waitpid( pid, (int *) NULL, 0 );
 #else
@@ -953,10 +976,8 @@ send_message( to )
        }
 }
 
-static
-send_group( group, ngroup )
-    Group      *group;
-    int                ngroup;
+static void
+send_group( Group *group, int ngroup )
 {
        int     i, pid;
        char    **argv;
@@ -984,7 +1005,7 @@ send_group( group, ngroup )
 
 
                /* parent */
-               if ( pid = fork() ) {
+               if ( (pid = fork()) != 0 ) {
 #ifdef HAVE_WAITPID
                        waitpid( pid, (int *) NULL, 0 );
 #else
@@ -1003,10 +1024,8 @@ send_group( group, ngroup )
        return;
 }
 
-static
-send_errors( err, nerr )
-    Error      *err;
-    int                nerr;
+static void
+send_errors( Error *err, int nerr )
 {
        int             i, namelen;
        FILE            *fp;
@@ -1102,12 +1121,8 @@ send_errors( err, nerr )
 }
 
 
-static
-do_noemailorfax( fp, err, namelen, errtype )
-    FILE       *fp;
-    Error      *err;
-    int                namelen;
-    int                errtype;
+static void
+do_noemailorfax( FILE *fp, Error *err, int namelen, int errtype )
 {
        int             i, last;
        char            *dn, *rdn;
@@ -1132,7 +1147,7 @@ do_noemailorfax( fp, err, namelen, errtype )
                    != NULL ) {
                        for ( i = 0; vals[i]; i++ ) {
                                last = strlen( vals[i] ) - 1;
-                               if ( isdigit( vals[i][last] ) ) {
+                               if ( isdigit((unsigned char) vals[i][last]) ) {
                                        rdn = strdup( vals[i] );
                                        break;
                                }
@@ -1170,7 +1185,7 @@ do_noemailorfax( fp, err, namelen, errtype )
                for ( i = 0; vals[0][i] != '\0'; i++ ) {
                        if ( vals[0][i] == '$' ) {
                                fprintf( fp, "\n%*s  ", namelen, " " );
-                               while ( isspace( vals[0][i+1] ) )
+                               while ( isspace((unsigned char) vals[0][i+1]) )
                                        i++;
                        } else {
                                fprintf( fp, "%c", vals[0][i] );
@@ -1196,11 +1211,8 @@ do_noemailorfax( fp, err, namelen, errtype )
 }
 
 /* ARGSUSED */
-static
-do_ambiguous( fp, err, namelen )
-    FILE       *fp;
-    Error      *err;
-    int                namelen;
+static void
+do_ambiguous( FILE *fp, Error *err, int namelen )
 {
        int             i, last;
        char            *dn, *rdn;
@@ -1222,7 +1234,7 @@ do_ambiguous( fp, err, namelen )
                        if ( (vals = ldap_get_values( ld, e, "cn" )) != NULL ) {
                                for ( i = 0; vals[i]; i++ ) {
                                        last = strlen( vals[i] ) - 1;
-                                       if ( isdigit( vals[i][last] ) ) {
+                                       if ( isdigit((unsigned char) vals[i][last]) ) {
                                                rdn = strdup( vals[i] );
                                                break;
                                        }
@@ -1251,9 +1263,8 @@ do_ambiguous( fp, err, namelen )
        }
 }
 
-static
-count_values( list )
-    char       **list;
+static int
+count_values( char **list )
 {
        int     i;
 
@@ -1263,11 +1274,8 @@ count_values( list )
        return( i );
 }
 
-static
-add_to( list, nlist, new )
-    char       ***list;
-    int                *nlist;
-    char       **new;
+static void
+add_to( char ***list, int *nlist, char **new )
 {
        int     i, nnew, oldnlist;
 
@@ -1291,9 +1299,8 @@ add_to( list, nlist, new )
        return;
 }
 
-static
-isgroup( e )
-    LDAPMessage        *e;
+static int
+isgroup( LDAPMessage *e )
 {
        int     i;
        char    **oclist;
@@ -1311,13 +1318,8 @@ isgroup( e )
        return( 0 );
 }
 
-static
-add_error( err, nerr, code, addr, msg )
-    Error      **err;
-    int                *nerr;
-    int                code;
-    char       *addr;
-    LDAPMessage        *msg;
+static void
+add_error( Error **err, int *nerr, int code, char *addr, LDAPMessage *msg )
 {
        if ( *nerr == 0 ) {
                *err = (Error *) malloc( sizeof(Error) );
@@ -1333,11 +1335,8 @@ add_error( err, nerr, code, addr, msg )
        return;
 }
 
-static
-add_group( dn, list, nlist )
-    char       *dn;
-    Group      **list;
-    int                *nlist;
+static void
+add_group( char *dn, Group **list, int *nlist )
 {
        int     i, namelen;
        char    **ufn;
@@ -1384,9 +1383,8 @@ add_group( dn, list, nlist )
        return;
 }
 
-static
-unbind_and_exit( rc )
-    int        rc;
+static void
+unbind_and_exit( int rc )
 {
        int     i;
 
@@ -1397,8 +1395,7 @@ unbind_and_exit( rc )
 }
 
 static char *
-canonical( s )
-    char       *s;
+canonical( char *s )
 {
        char    *saves = s;
 
@@ -1410,9 +1407,8 @@ canonical( s )
        return( saves );
 }
 
-static
-group_loop( dn )
-    char       *dn;
+static int
+group_loop( char *dn )
 {
        int             i;
        static char     **groups;
@@ -1434,11 +1430,8 @@ group_loop( dn )
        return( 0 );
 }
 
-static
-has_attributes( e, attr1, attr2 )
-    LDAPMessage        *e;
-    char       *attr1;
-    char       *attr2;
+static int
+has_attributes( LDAPMessage *e, char *attr1, char *attr2 )
 {
        char    **attr;
 
@@ -1456,10 +1449,7 @@ has_attributes( e, attr1, attr2 )
 }
 
 static char **
-get_attributes_mail_dn( e, attr1, attr2 )
-    LDAPMessage        *e;
-    char       *attr1;
-    char       *attr2;         /* this one is dn-valued */
+get_attributes_mail_dn( LDAPMessage *e, char *attr1, char *attr2 )
 {
        LDAPMessage     *ee, *res;
        char            **vals, **dnlist, **mail;