Hi all,

I have tried to compile qmail-ldap with control patch on
slamd64 ( slackware 64bit ) and got following error 

./compile -DALTQUEUE -DBIGBROTHER -DBIGTODO -DEXTERNAL_TODO -DDASH_EXT
-DDATA_COMPRESS -DIGNOREVERISIGN -DSMTPEXECCHECK -DCOURIER -DDEBUG
-DUSE_CONTROLDB -DUSE_RFC2307 -DUSE_RFC822  -L/opt/openldap/lib -lldap
-llber -I/opt/openldap/include control.c
control.c: In function `control_ldap_search':
control.c:408: warning: assignment makes pointer from integer without a
cast
control.c:463: warning: assignment makes pointer from integer without a
cast
control.c: At top level:
control.c:672: error: conflicting types for 'flatten_attrib_array'
control.c:390: error: previous implicit declaration of
'flatten_attrib_array' was here
make: *** [control.o] Error 1

I have patched a clean qmail1-03 with following patches

qmail-ldap-1.03-20060201-controls20060403b
qmail-ldap-1.03-20060201.patch

My Makefile looks like this

SNAPSHOOT
+++++++++++++++++++++++++++
LDAPFLAGS=-DALTQUEUE -DBIGBROTHER -DBIGTODO -DEXTERNAL_TODO -DDASH_EXT
-DDATA_COMPRESS -DIGNOREVERISIGN -DSMTPEXECCHECK -DCOURIER
SYSLOGAUTH=-DSYSLOGAUTH
RFCFLAGS=-DUSE_RFC2307 -DUSE_RFC822
CONTROLDB=-DUSE_CONTROLDB
LDAPLIBS=-L/opt/openldap/lib -lldap -llber
LDAPINCLUDES=-I/opt/openldap/include
ZINCLUDES=-I/usr/include
TLS=-DTLS_REMOTE -DTLS_SMTPD
TLSINCLUDES=-I/usr/include/openssl
TLSLIBS=-L/usr/lib64 -lssl -lcrypto
OPENSSLBIN=/usr/bin/openssl
OPENSSLBIN=openssl
MNW=-DMAKE_NETSCAPE_WORK
MDIRMAKE=-DAUTOMAILDIRMAKE
HDIRMAKE=-DAUTOHOMEDIRMAKE
DEBUG=-DDEBUG
BACKUPPATH=/backup/qmail-backup/qmail-ldap.`date "+%Y%m%d-%H%M"`.tar
# STOP editing HERE !!!


# Don't edit Makefile! Use conf-* for configuration.

SHELL=/bin/sh

ifdef LDAPFLAGS
QLDAPLIB=qldap.a
else
ifdef SECUREBIND
QLDAPLIB=qldap.a
else
ifdef CONTROLDB
QLDAPLIB=qldap.a
endif
endif
endif

ifdef SECUREBIND
SECUREBINDLIBS=getopt.a substdio.a
SECUREBINDLIB1=case_diffb.o constmap.o
endif

ifdef CONTROLDB
NEWLDAPPROGLIBS=control.o stralloc.a fs.a
ifdef DEBUG
CONTROLLIBS=read-ctrl.o case.a env.a
else
CONTROLLIBS=read-ctrl.o case.a
endif
endif

# This sums it up nice and correctly, I think!
LDAPFLAGS := $(LDAPFLAGS) $(DEBUG) $(CONTROLDB) $(RFCFLAGS)
$(SECUREBIND) $(LDAPLIBS) $(LDAPINCLUDES)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++



When i check control.c i think that "flatten_attrib_array" is twice
defined

Control.c line 68
char *flatten_attrib_arry(const char *attrs[]);

Control.c line 652
#ifdef USE_CONTROLDB
/* This function will return TRUE if file is OK to fetch from LDAP */
int verify_ldap_file_check(const char *fn) {
 if(!strstr(fn, ".cdb")
    && (strstr(fn, "me") == fn)
    && (strstr(fn, "ldapserver") == fn)
    && (strstr(fn, "ldapcontroldn") == fn)
    && (strstr(fn, "ldaplogin") == fn)
    && (strstr(fn, "ldappassword") == fn)
#if defined(SECUREBIND_SASL) || defined(SECUREBIND_SSL) ||
defined(SECUREBIND_TLS) || defined(SECUREBIND_ALL)
    && (strstr(fn, "ldapsecurebind") == fn)
#endif
    /* Do we have what we need for an LDAP search!? */
    && ldap_controldn.len
    && (me.len || ldap_me.len)
    && q->ld)
   return 1;
 return 0;
}

char *flatten_attrib_array(const char *attrs[]) {
  int i;
  stralloc string = {0};

  for(i=0; attrs[i]; i++) {
    logit(256, "                                    attrs[%d]: '%s'\n",
i, attrs[i]);
    if(! stralloc_copys(&string, attrs[i]) ) _exit(QLX_NOMEM);

    if(attrs[i+1])
      if(! stralloc_cats(&string, ", ") ) _exit(QLX_NOMEM);
  }
  if(! stralloc_0(&string)) _exit(QLX_NOMEM);

  logit(256, "                                    string:   '%s'\n",
string.s);
  return(string.s);
}
#endif 

Sorry for the long post , hope anyone could give me a hint


Best regards
Stefan

Reply via email to