Ir para conteúdo
Fórum Script Brasil
  • 0

Erro de compilação


RafaelMagalhaes82

Pergunta

Estou com esse código fonte:

/*
 * -----------------------------------------------------------------------------
 *
 * Author: Markus Moeller 
 *
 * Copyright © 2007 Markus Moeller. All rights reserved.
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
 *
 * -----------------------------------------------------------------------------
 */

#include <netdb.h>
#include <ctype.h>
#include <errno.h>

#include "support.h"

char *convert_domain_to_bind_path(char *domain);
char *escape_filter(char *filter);
int check_AD(struct main_args *margs, LDAP *ld);
int ldap_set_defaults(struct main_args *margs, LDAP *ld);
int ldap_set_ssl_defaults(struct main_args *margs);
LDAP *tool_ldap_open(struct main_args *margs, char* host, int port, char *ssl);

#define CONNECT_TIMEOUT 2
#define SEARCH_TIMEOUT 30

#define FILTER "(memberuid=%s)"
#define ATTRIBUTE "cn"
#define FILTER_UID "(uid=%s)"
#define FILTER_GID "(&(gidNumber=%s)(objectclass=posixgroup))"
#define ATTRIBUTE_GID "gidNumber"

#define FILTER_AD "(samaccountname=%s)"
#define ATTRIBUTE_AD "memberof"

int get_attributes(struct main_args *margs, LDAP *ld, LDAPMessage *res, const char *attribute /* IN */, char ***out_val /* OUT (caller frees) */);
int search_group_tree(struct main_args *margs,LDAP *ld, char *bindp, char *ldap_group,char *group, int depth);

#ifdef HAVE_SUN_LDAP_SDK
#ifdef HAVE_LDAP_REBINDPROC_CALLBACK

#if defined(HAVE_SASL_H) || defined(HAVE_SASL_SASL_H) || defined(HAVE_SASL_DARWIN)
static LDAP_REBINDPROC_CALLBACK ldap_sasl_rebind;

static int LDAP_CALL LDAP_CALLBACK ldap_sasl_rebind(
                            LDAP *ld,
                            char **whop,
                            char **credp,
                            int *methodp,
                            int freeit,
                            void *params)
{
  struct ldap_creds *cp = (struct ldap_creds *)params;
  whop = whop;
  credp = credp;
  methodp = methodp;
  freeit = freeit;
  return tool_sasl_bind(ld,cp->dn,cp->pw);
}
#endif

static LDAP_REBINDPROC_CALLBACK ldap_simple_rebind;

static int LDAP_CALL LDAP_CALLBACK ldap_simple_rebind(
                              LDAP *ld,
                              char **whop,
                              char **credp,
                              int *methodp,
                              int freeit,
                              void *params)
{
  struct ldap_creds *cp = (struct ldap_creds *)params;
  whop = whop;
  credp = credp;
  methodp = methodp;
  freeit = freeit;
  return ldap_bind_s( ld, cp->dn , cp->pw , LDAP_AUTH_SIMPLE );
}
#elif defined(HAVE_LDAP_REBIND_PROC)
#if defined(HAVE_SASL_H) || defined(HAVE_SASL_SASL_H) || defined(HAVE_SASL_DARWIN)
static LDAP_REBIND_PROC ldap_sasl_rebind;

static int ldap_sasl_rebind(
                            LDAP *ld,
                            LDAP_CONST char *url,
                            ber_tag_t request,
                            ber_int_t msgid,
                            void *params)
{
  struct ldap_creds *cp = (struct ldap_creds *)params;
  url = url;
  request = request;
  msgid = msgid;
  return tool_sasl_bind(ld, cp->dn, cp->pw);
}
#endif

static LDAP_REBIND_PROC ldap_simple_rebind;

static int ldap_simple_rebind(
                              LDAP *ld,
                              LDAP_CONST char *url,
                              ber_tag_t request,
                              ber_int_t msgid,
                              void *params)
{
  struct ldap_creds *cp = (struct ldap_creds *)params;
  url = url;
  request = request;
  msgid = msgid;
  return ldap_bind_s( ld, cp->dn , cp->pw , LDAP_AUTH_SIMPLE );
}

#elif defined(HAVE_LDAP_REBIND_FUNCTION)
#ifndef LDAP_REFERRALS
#define LDAP_REFERRALS
#endif
#if defined(HAVE_SASL_H) || defined(HAVE_SASL_SASL_H) || defined(HAVE_SASL_DARWIN)
static LDAP_REBIND_FUNCTION ldap_sasl_rebind;

static int ldap_sasl_rebind(
                            LDAP *ld,
                            char **whop,
                            char **credp,
                            int *methodp,
                            int freeit,
                            void *params)
{
  struct ldap_creds *cp = (struct ldap_creds *)params;
  whop = whop;
  credp = credp;
  methodp = methodp;
  freeit = freeit;
  return tool_sasl_bind(ld,cp->dn,cp->pw);
}
#endif

static LDAP_REBIND_FUNCTION ldap_simple_rebind;

static int ldap_simple_rebind(
                              LDAP *ld,
                              char **whop,
                              char **credp,
                              int *methodp,
                              int freeit,
                              void *params)
{
  struct ldap_creds *cp = (struct ldap_creds *)params;
  whop = whop;
  credp = credp;
  methodp = methodp;
  freeit = freeit;
  return ldap_bind_s( ld, cp->dn , cp->pw , LDAP_AUTH_SIMPLE );
}
#else
# error "No rebind functione defined"
#endif
#else /* HAVE_SUN_LDAP_SDK */
#if defined(HAVE_SASL_H) || defined(HAVE_SASL_SASL_H) || defined(HAVE_SASL_DARWIN)
static LDAP_REBIND_PROC ldap_sasl_rebind;

static int ldap_sasl_rebind(
                LDAP *ld,
                LDAP_CONST char *url,
                ber_tag_t request,
                ber_int_t msgid,
                void *params )
{
  struct ldap_creds *cp = (struct ldap_creds *)params;
  url = url;
  request = request;
  msgid = msgid;
  return tool_sasl_bind(ld,cp->dn,cp->pw);
}
#endif

static LDAP_REBIND_PROC ldap_simple_rebind;

static int ldap_simple_rebind(
                  LDAP *ld,
                  LDAP_CONST char *url,
                  ber_tag_t request,
                  ber_int_t msgid,
                  void *params )
{

  struct ldap_creds *cp = (struct ldap_creds *)params;
  url = url;
  request = request;
  msgid = msgid;
  return ldap_bind_s( ld, cp->dn , cp->pw , LDAP_AUTH_SIMPLE );
}

#endif 
char *convert_domain_to_bind_path(char *domain) {
  char *dp,*bindp=NULL,*bp=NULL;
  int i=0;

  if (!domain)
    return NULL;
  
  for (dp=domain; *dp; dp++) {
    if ( *dp == '.' ) 
      i++;
  }
  /* 
   * add dc= and 
   * replace . with ,dc= => new length = old length + #dots * 3 + 3 
   */
  bindp=malloc(strlen(domain)+3+i*3+1);
  bp=bindp;
  strcpy(bp,"dc=");
  bp +=3;
  for (dp=domain; *dp; dp++) {
    if ( *dp == '.' ) {
      strcpy(bp,",dc=");
      bp+=4;
    } else 
      *bp++ = *dp;      
  }
  *bp='';
  return bindp;
}

char *escape_filter(char *filter) {
  int i;
  char *ldap_filter_esc,*ldf;

  i=0;
  for (ldap_filter_esc=filter; *ldap_filter_esc; ldap_filter_esc++) {
    if ( (*ldap_filter_esc== '*') ||
         (*ldap_filter_esc== '(') ||
         (*ldap_filter_esc== ')') ||
         (*ldap_filter_esc== '\\') )
      i=i+3;
  }

  ldap_filter_esc=calloc(strlen(filter)+i+1,sizeof(char));
  ldf = ldap_filter_esc;
  for (; *filter;  filter++) {
    if ( *filter == '*') {
      strcpy(ldf,"\\2a");
      ldf = ldf + 3;
    } else if (*filter == '(') {
      strcpy(ldf,"\\28");
      ldf = ldf + 3;
    } else if (*filter == ')') {
      strcpy(ldf,"\\29");
      ldf = ldf + 3;
    } else if (*filter == '\\') {
      strcpy(ldf,"\\5c");
      ldf = ldf + 3;
    } else {
      *ldf=*filter;
      ldf++;
    }
  }
  *ldf='';

  return ldap_filter_esc;
};

int check_AD(struct main_args *margs, LDAP *ld) {
  LDAPMessage *res;
  char **attr_value=NULL;
  struct timeval searchtime;
  int max_attr=0;
  int j,rc=0;

#define FILTER_SCHEMA "(objectclass=*)"
#define ATTRIBUTE_SCHEMA "schemaNamingContext"
#define FILTER_SAM "(ldapdisplayname=samaccountname)"

  searchtime.tv_sec  = SEARCH_TIMEOUT;
  searchtime.tv_usec = 0;

  if (margs->debug)
    fprintf(stderr, "%s| %s: Search ldap server with bind path \"\" and filter: %s\n",LogTime(), PROGRAM,FILTER_SCHEMA);
  rc = ldap_search_ext_s(ld, (char *)"", LDAP_SCOPE_BASE, (char *)FILTER_SCHEMA, NULL, 0, 
                         NULL, NULL, &searchtime, 0, &res);

  if ( rc == LDAP_SUCCESS )
    max_attr = get_attributes(margs,ld,res,ATTRIBUTE_SCHEMA,&attr_value);
  
  if (max_attr==1) {
    ldap_msgfree(res);
    if (margs->debug)
      fprintf(stderr, "%s| %s: Search ldap server with bind path %s and filter: %s\n",LogTime(), PROGRAM,attr_value[0],FILTER_SAM);
    rc = ldap_search_ext_s(ld, attr_value[0], LDAP_SCOPE_SUBTREE, (char *)FILTER_SAM, NULL, 0, 
                           NULL, NULL, &searchtime, 0, &res);
    if (margs->debug)
      fprintf(stderr, "%s| %s: Found %d ldap entr%s\n",LogTime(), PROGRAM, ldap_count_entries( ld, res),ldap_count_entries( ld, res)>1||ldap_count_entries( ld, res)==0?"ies":"y");
    if (ldap_count_entries( ld, res) > 0) 
      margs->AD=1;
  } else {
    if (margs->debug)
      fprintf(stderr, "%s| %s: Did not find ldap entry for subschemasubentry\n",LogTime(), PROGRAM);
  }
  if (margs->debug)
    fprintf(stderr, "%s| %s: Determined ldap server %sas an Active Directory server\n",LogTime(), PROGRAM,margs->AD?"":"not ");
  /*
   * Cleanup
   */
  if (attr_value){
    for (j=0;j<max_attr;j++) {
      free(attr_value[j]);
    }
    free(attr_value);
    attr_value=NULL;
  }
  ldap_msgfree(res);
  return rc;
}
int search_group_tree(struct main_args *margs,LDAP *ld, char* bindp, char *ldap_group,char *group, int depth) {
  LDAPMessage *res=NULL;
  char **attr_value=NULL;
  int max_attr=0;
  char *filter=NULL;
  char *search_exp=NULL;
  int j,rc=0,retval=0;
  char *av=NULL,*avp=NULL;
  int ldepth;
  char *ldap_filter_esc=NULL;
  struct timeval searchtime;

#define FILTER_GROUP_AD "(&(%s)(objectclass=group))"
#define FILTER_GROUP "(&(memberuid=%s)(objectclass=posixgroup))"

  searchtime.tv_sec  = SEARCH_TIMEOUT;
  searchtime.tv_usec = 0;

  if (margs->AD)
    filter=(char *)FILTER_GROUP_AD;
  else
    filter=(char *)FILTER_GROUP;

  ldap_filter_esc = escape_filter(ldap_group); 

  search_exp=malloc(strlen(filter)+strlen(ldap_filter_esc)+1);
  snprintf(search_exp,strlen(filter)+strlen(ldap_filter_esc)+1, filter, ldap_filter_esc);

  if (ldap_filter_esc)
     free(ldap_filter_esc);

  if (depth > margs->mdepth) {
    if (margs->debug)
      fprintf(stderr, "%s| %s: Max search depth reached %d>%d\n",LogTime(), PROGRAM,depth,margs->mdepth);
    return 0;
  }
  if (margs->debug)
    fprintf(stderr, "%s| %s: Search ldap server with bind path %s and filter : %s\n",LogTime(), PROGRAM,bindp,search_exp);
  rc = ldap_search_ext_s(ld, bindp, LDAP_SCOPE_SUBTREE,
                         search_exp, NULL, 0, 
                         NULL, NULL, &searchtime, 0, &res);
  if (search_exp)
    free(search_exp);

  if (rc != LDAP_SUCCESS) {
    fprintf(stderr, "%s| %s: Error searching ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
    ldap_unbind_s(ld);
    return 0;
  }

  if (margs->debug)
    fprintf(stderr, "%s| %s: Found %d ldap entr%s\n",LogTime(), PROGRAM, ldap_count_entries( ld, res),ldap_count_entries( ld, res)>1||ldap_count_entries( ld, res)==0?"ies":"y");

  if (margs->AD)
    max_attr = get_attributes(margs,ld,res,ATTRIBUTE_AD,&attr_value);
  else 
    max_attr = get_attributes(margs,ld,res,ATTRIBUTE,&attr_value);
  
  /*
   * Compare group names
   */
  retval=0;
  ldepth = depth+1;
  for (j=0;j<max_attr;j++) {

    /* Compare first CN= value assuming it is the same as the group name itself */
    av=attr_value[j];
    if (!strncasecmp("CN=",av,3)) {
      av+=3;
      if ((avp=strchr(av,','))) {
        *avp='';
      }
    }
    if (margs->debug) { 
      int n;
      fprintf(stderr, "%s| %s: Entry %d \"%s\" in hex UTF-8 is ",LogTime(), PROGRAM, j+1, av);
      for (n=0; av[n] != ''; n++)
         fprintf(stderr, "%02x",(unsigned char)av[n]);
      fprintf(stderr, "\n");
    }
    if (!strcasecmp(group,av)) {
      retval=1;
      if (margs->debug)
        fprintf(stderr, "%s| %s: Entry %d \"%s\" matches group name \"%s\"\n",LogTime(), PROGRAM, j+1, av, group);
      break;
    } else {
      if (margs->debug)
        fprintf(stderr, "%s| %s: Entry %d \"%s\" does not match group name \"%s\"\n",LogTime(), PROGRAM, j+1, av, group);
    }
    /*
     * Do recursive group search
     */
    if (margs->debug)
      fprintf(stderr, "%s| %s: Perform recursive group search for group \"%s\"\n",LogTime(), PROGRAM,av);
    av=attr_value[j];
    if (search_group_tree(margs,ld,bindp,av,group,ldepth)) {
      retval=1;
      if (!strncasecmp("CN=",av,3)) {
        av+=3;
        if ((avp=strchr(av,','))) {
          *avp='';
        }
      }
      if (margs->debug)
        fprintf(stderr, "%s| %s: Entry %d \"%s\" is member of group named \"%s\"\n",LogTime(), PROGRAM, j+1, av, group);
    else
        break;

    }
  }

  /*
   * Cleanup
   */
  if (attr_value){
    for (j=0;j<max_attr;j++) {
      free(attr_value[j]);
    }
    free(attr_value);
    attr_value=NULL;
  }
  ldap_msgfree(res);

  return retval;
}

int ldap_set_defaults(struct main_args *margs, LDAP *ld) {
  int val,rc=0;
#ifdef LDAP_OPT_NETWORK_TIMEOUT
  struct timeval tv;
#endif
  val = LDAP_VERSION3;
  rc = ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &val);
  if ( rc != LDAP_SUCCESS ) {
    if(margs->debug)
      fprintf(stderr, "%s| %s: Error while setting protocol version: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
    return rc;
  }
  rc = ldap_set_option(ld, LDAP_OPT_REFERRALS , LDAP_OPT_OFF);
  if ( rc != LDAP_SUCCESS ) {
    if(margs->debug)
      fprintf(stderr, "%s| %s: Error while setting referrals off: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
    return rc;
  }
#ifdef LDAP_OPT_NETWORK_TIMEOUT
  tv.tv_sec = CONNECT_TIMEOUT;
  tv.tv_usec = 0;
  rc = ldap_set_option (ld, LDAP_OPT_NETWORK_TIMEOUT, &tv);
  if ( rc != LDAP_SUCCESS ) {
    if(margs->debug)
      fprintf(stderr, "%s| %s: Error while setting network timeout: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
    return rc;
  }
#endif /* LDAP_OPT_NETWORK_TIMEOUT */
  return LDAP_SUCCESS;
}

int ldap_set_ssl_defaults(struct main_args *margs) {
#if defined(HAVE_OPENLDAP) || defined(HAVE_LDAPSSL_CLIENT_INIT)
  int rc=0;
#endif
#ifdef HAVE_OPENLDAP
  int val;
  char *ssl_cacertfile=NULL;
  int free_path;
#elif defined(HAVE_LDAPSSL_CLIENT_INIT)
  char *ssl_certdbpath=NULL;
#endif

#ifdef HAVE_OPENLDAP
  if (!margs->rc_allow) {
    ssl_cacertfile=getenv("TLS_CACERTFILE");
    free_path=0;
    if (!ssl_cacertfile) {
      ssl_cacertfile=strdup("/etc/ssl/certs/cert.pem");
      free_path=1;
    }
    if (margs->debug)
      fprintf(stderr, "%s| %s: Set certificate file for ldap server to %s.(Changeable through setting environment variable TLS_CACERTFILE)\n",LogTime(), PROGRAM,ssl_cacertfile);
    rc = ldap_set_option(NULL, LDAP_OPT_X_TLS_CACERTFILE, ssl_cacertfile);
    if (ssl_cacertfile && free_path) {
      free(ssl_cacertfile);
      ssl_cacertfile=NULL;
    }
    if ( rc != LDAP_OPT_SUCCESS ) {
      fprintf(stderr, "%s| %s: Error while setting LDAP_OPT_X_TLS_CACERTFILE for ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
      return rc;
    }
  } else {
    if (margs->debug)
      fprintf(stderr, "%s| %s: Disable server certificate check for ldap server.\n",LogTime(), PROGRAM);
    val = LDAP_OPT_X_TLS_ALLOW;
    rc = ldap_set_option (NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, &val);
    if ( rc != LDAP_SUCCESS ) {
      fprintf(stderr, "%s| %s: Error while setting LDAP_OPT_X_TLS_REQUIRE_CERT ALLOW for ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
      return rc;
    }
  }
#elif defined(HAVE_LDAPSSL_CLIENT_INIT)
  /* 
   *  Solaris SSL ldap calls require path to certificate database
   */
/*
  rc = ldapssl_client_init( ssl_certdbpath, NULL );
  rc = ldapssl_advclientauth_init( ssl_certdbpath, NULL , 0 , NULL, NULL, 0, NULL, 2);
*/
  ssl_certdbpath=getenv("SSL_CERTDBPATH");
  if (!ssl_certdbpath) {
    ssl_certdbpath=strdup("/etc/certs");
  }
  if (margs->debug)
    fprintf(stderr, "%s| %s: Set certificate database path for ldap server to %s.(Changeable through setting environment variable SSL_CERTDBPATH)\n",LogTime(), PROGRAM,ssl_certdbpath);
  if (!margs->rc_allow) {
    rc = ldapssl_advclientauth_init( ssl_certdbpath, NULL , 0 , NULL, NULL, 0, NULL, 2);
  } else {
    rc = ldapssl_advclientauth_init( ssl_certdbpath, NULL , 0 , NULL, NULL, 0, NULL, 0);
    if (margs->debug)
      fprintf(stderr, "%s| %s: Disable server certificate check for ldap server.\n",LogTime(), PROGRAM);
  }
  if (ssl_certdbpath) {
    free(ssl_certdbpath);
    ssl_certdbpath=NULL;
  }
  if ( rc != LDAP_SUCCESS ) {
    fprintf(stderr, "%s| %s: Error while setting SSL for ldap server: %s\n",LogTime(), PROGRAM,ldapssl_err2string(rc));
    return rc;
  }
#else
  fprintf(stderr, "%s| %s: SSL not supported by ldap library\n",LogTime(), PROGRAM);
#endif
  return LDAP_SUCCESS;
}

int get_attributes(struct main_args *margs,LDAP *ld,LDAPMessage *res, const char *attribute, char ***ret_value) {
/* Part of this work is from OpenLDAP Software.
 *
 * Copyright 1998-2009 The OpenLDAP Foundation.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted only as authorized by the OpenLDAP
 * Public License.
 *
 * A copy of this license is available in the file LICENSE in the
 * top-level directory of the distribution or, alternatively, at
 * 
 */

  LDAPMessage *msg;
  char **attr_value=NULL;
  int max_attr=0;

  attr_value=*ret_value;
  /*
   * loop over attributes
   */
  if (margs->debug)
    fprintf(stderr, "%s| %s: Search ldap entries for attribute : %s\n",LogTime(), PROGRAM,attribute);
  for (msg = ldap_first_entry (ld, res); msg; msg = ldap_next_entry (ld, msg))
    {

      BerElement *b;
      char *attr;

      switch (ldap_msgtype( msg )) {

      case LDAP_RES_SEARCH_ENTRY:

    for (attr = ldap_first_attribute (ld, msg, &b); attr;
         attr = ldap_next_attribute (ld, msg, B))
      {
        if (strcasecmp (attr, attribute) == 0)
          {
        struct berval **values;
        int il;

        if ( (values = ldap_get_values_len (ld, msg, attr)) != NULL )
          {
            for (il = 0; values[il] != NULL; il++)
              {

            attr_value= realloc (attr_value,(il+1)*sizeof(char *));
            if ( !attr_value) 
              break;

                        attr_value[il] = malloc (values[il]->bv_len + 1);
                        memcpy(attr_value[il],values[il]->bv_val,values[il]->bv_len);   
            attr_value[il][values[il]->bv_len]=0;
              }
            max_attr=il;
          }
        ber_bvecfree(values);
          }
        ldap_memfree (attr);
      }
    ber_free (b, 0);
    break;
      case LDAP_RES_SEARCH_REFERENCE:
    if (margs->debug)
      fprintf(stderr, "%s| %s: Received a search reference message\n",LogTime(), PROGRAM);
    break;
      case LDAP_RES_SEARCH_RESULT:
    if (margs->debug)
      fprintf(stderr, "%s| %s: Received a search result message\n",LogTime(), PROGRAM);
    break;
      default:
    break;
      }
    }

  if (margs->debug)
    fprintf(stderr, "%s| %s: %d ldap entr%s found with attribute : %s\n",LogTime(), PROGRAM,max_attr,max_attr>1||max_attr==0?"ies":"y",attribute);

  *ret_value=attr_value;
  return max_attr;
}

/*
 * call to open ldap server with or without SSL
 */
LDAP *tool_ldap_open(struct main_args *margs, char* host, int port, char *ssl) {
    LDAP *ld;
#ifdef HAVE_OPENLDAP
    LDAPURLDesc *url=NULL;
    char *ldapuri=NULL;
#endif
    int rc=0;

      /* 
       * Use ldap open here to check if TCP connection is possible. If possible use it. 
       * (Not sure if this is the best way)
       */
#ifdef HAVE_OPENLDAP
      url = malloc(sizeof(*url));
      memset( url, 0, sizeof(*url));
#ifdef HAVE_LDAP_URL_LUD_SCHEME
      if (ssl) 
        url->lud_scheme = (char *)"ldaps";
      else
        url->lud_scheme = (char *)"ldap";
#endif
      url->lud_host = host;
      url->lud_port = port;
#ifdef HAVE_LDAP_SCOPE_DEFAULT
      url->lud_scope = LDAP_SCOPE_DEFAULT;
#else
      url->lud_scope = LDAP_SCOPE_SUBTREE;
#endif
#ifdef HAVE_LDAP_URL_DESC2STR
      ldapuri = ldap_url_desc2str( url );
#elif defined(HAVE_LDAP_URL_PARSE)
      rc = ldap_url_parse(ldapuri, &url);
      if (rc != LDAP_SUCCESS) {
        fprintf(stderr, "%s| %s: Error while parsing url: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
        if (ldapuri)
      free(ldapuri);
        if (url)
      free(url);
        return NULL;
      }
#else
#error "No URL parsing function"
#endif      
      if (url) {
    free(url);
        url=NULL;
      }
      rc = ldap_initialize(&ld, ldapuri);
      if (ldapuri)
    free(ldapuri);
      if (rc != LDAP_SUCCESS) {
        fprintf(stderr, "%s| %s: Error while initialising connection to ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
        ldap_unbind(ld);
        ld = NULL;
        return NULL;
      }
#else
      ld = ldap_init(host,port);
#endif
      rc = ldap_set_defaults(margs,ld);
      if (rc != LDAP_SUCCESS) {
        fprintf(stderr, "%s| %s: Error while setting default options for ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
        ldap_unbind(ld);
        ld = NULL;
        return NULL;
      }

      if (ssl) {
        /* 
         * Try Start TLS first
         */
    if (margs->debug)
          fprintf(stderr, "%s| %s: Set SSL defaults\n",LogTime(), PROGRAM);
        rc = ldap_set_ssl_defaults(margs);
        if (rc != LDAP_SUCCESS) {
          fprintf(stderr, "%s| %s: Error while setting SSL default options for ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
          ldap_unbind(ld);
          ld = NULL;
          return NULL;
        }
#ifdef HAVE_OPENLDAP
        /* 
         *  Use tls if possible
         */
    rc = ldap_start_tls_s(ld, NULL, NULL);
    if ( rc != LDAP_SUCCESS ) {
      fprintf(stderr, "%s| %s: Error while setting start_tls for ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
          ldap_unbind(ld);
          ld=NULL;
          url = malloc(sizeof(*url));
          memset( url, 0, sizeof(*url));
#ifdef HAVE_LDAP_URL_LUD_SCHEME
          url->lud_scheme = (char *)"ldaps";
#endif
          url->lud_host = host;
          url->lud_port = port;
#ifdef HAVE_LDAP_SCOPE_DEFAULT
          url->lud_scope = LDAP_SCOPE_DEFAULT;
#else
          url->lud_scope = LDAP_SCOPE_SUBTREE;
#endif
#ifdef HAVE_LDAP_URL_DESC2STR
          ldapuri = ldap_url_desc2str( url );
#elif defined(HAVE_LDAP_URL_PARSE)
          rc = ldap_url_parse(ldapuri, &url);
          if (rc != LDAP_SUCCESS) {
            fprintf(stderr, "%s| %s: Error while parsing url: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
            if (ldapuri)
          free(ldapuri);
            if (url)
          free(url);
            return NULL;
          }
#else
#error "No URL parsing function"
#endif      
          if (url) {
        free(url);
            url=NULL;
          }
          rc = ldap_initialize(&ld, ldapuri);
          if (ldapuri)
        free(ldapuri);
          if (rc != LDAP_SUCCESS) {
            fprintf(stderr, "%s| %s: Error while initialising connection to ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
            ldap_unbind(ld);
            ld = NULL;
            return NULL;
          } 
          rc = ldap_set_defaults(margs,ld);
          if (rc != LDAP_SUCCESS) {
            fprintf(stderr, "%s| %s: Error while setting default options for ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
            ldap_unbind(ld);
            ld = NULL;
            return NULL;
          }
    }
#elif defined(HAVE_LDAPSSL_CLIENT_INIT)
    ld = ldapssl_init(host,port,1);
    if (!ld) {
      fprintf(stderr, "%s| %s: Error while setting SSL for ldap server: %s\n",LogTime(), PROGRAM,ldapssl_err2string(rc));
      ldap_unbind(ld);
      ld=NULL;
      return NULL;
    }
        rc = ldap_set_defaults(margs,ld);
        if (rc != LDAP_SUCCESS) {
          fprintf(stderr, "%s| %s: Error while setting default options for ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
          ldap_unbind(ld);
          ld = NULL;
          return NULL;
        }
#else
        fprintf(stderr, "%s| %s: SSL not supported by ldap library\n",LogTime(), PROGRAM);
#endif
      } 
      return ld;
}

/*
 * ldap calls to get attribute from Ldap Directory Server
 */
int get_memberof(struct main_args *margs,char* user,char* domain,char *group) {
  LDAP *ld=NULL;
  LDAPMessage *res;
#ifndef HAVE_SUN_LDAP_SDK
  int ldap_debug=0;
#endif
  struct ldap_creds *lcreds=NULL;
  char *bindp=NULL;
  char *filter=NULL;
  char *search_exp;
  struct timeval searchtime;
  int i,j,rc=0,kc=1;
  int retval;
  char **attr_value=NULL;
  char *av=NULL,*avp=NULL;
  int max_attr=0;
  struct hstruct *hlist=NULL;
  int nhosts=0;
  char *hostname;
  char *host;
  int port;
  char *ssl=NULL;
  char* p;
  char* ldap_filter_esc=NULL;


  searchtime.tv_sec  = SEARCH_TIMEOUT;
  searchtime.tv_usec = 0;
  /*
   * Fill Kerberos memory cache with credential from keytab for SASL/GSSAPI
   */
  if (domain) {
    if (margs->debug)
      fprintf(stderr, "%s| %s: Setup Kerberos credential cache\n",LogTime(), PROGRAM);
#ifdef HAVE_KRB5_H
    kc = krb5_create_cache(margs,domain);
    if (kc) {
      fprintf(stderr, "%s| %s: Error during setup of Kerberos credential cache\n",LogTime(), PROGRAM);
    }
#endif
  }

  if (kc && (!margs->lurl || !margs->luser | !margs->lpass )) {
    /*
     * If Kerberos fails and no url given exit here
     */
    retval=0;
    goto cleanup;
  }

#ifndef HAVE_SUN_LDAP_SDK
  /*
   * Initialise ldap
   */
  ldap_debug = 127 /* LDAP_DEBUG_TRACE */;
  ldap_debug = -1 /* LDAP_DEBUG_ANY */;
  ldap_debug = 0;
  (void) ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &ldap_debug);
#endif

  if (margs->debug)
    fprintf(stderr, "%s| %s: Initialise ldap connection\n",LogTime(), PROGRAM);


  if (domain && !kc) {
    if (margs->ssl) {
      if (margs->debug)
    fprintf(stderr, "%s| %s: Enable SSL to ldap servers\n",LogTime(), PROGRAM);
    }
    if (margs->debug)
      fprintf(stderr, "%s| %s: Canonicalise ldap server name for domain %s\n",LogTime(), PROGRAM,domain);
    /*
     * Loop over list of ldap servers of users domain
     */
    nhosts=get_ldap_hostname_list(margs,&hlist,0,domain);
    for (i=0;i<nhosts;i++) {
      port=389;
      if (hlist[i].port != -1)
    port=hlist[i].port;
      if (margs->debug)
    fprintf(stderr, "%s| %s: Setting up connection to ldap server %s:%d\n",LogTime(), PROGRAM, hlist[i].host,port);

      ld = tool_ldap_open(margs,hlist[i].host,port,margs->ssl);
      if (!ld)
      continue;

      /*
       * ldap bind with SASL/GSSAPI authentication (only possible if a domain was part of the username)
       */

#if defined(HAVE_SASL_H) || defined(HAVE_SASL_SASL_H) || defined(HAVE_SASL_DARWIN)
      if (margs->debug)
        fprintf(stderr, "%s| %s: Bind to ldap server with SASL/GSSAPI\n",LogTime(), PROGRAM);

      rc = tool_sasl_bind(ld, bindp, margs->ssl);
      if (rc != LDAP_SUCCESS) {
        fprintf(stderr, "%s| %s: Error while binding to ldap server with SASL/GSSAPI: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
        ldap_unbind(ld);
        ld=NULL;
        continue;
      }
      lcreds=malloc(sizeof(struct ldap_creds));
      lcreds->dn = bindp?strdup(bindp):NULL;
      lcreds->pw = margs->ssl?strdup(margs->ssl):NULL;
      ldap_set_rebind_proc(ld, ldap_sasl_rebind,(char *)lcreds);
      if ( ld != NULL ) {
    if (margs->debug)
        fprintf(stderr, "%s| %s: %s initialised %sconnection to ldap server %s:%d\n",LogTime(), PROGRAM, ld?"Successfully":"Failed to",margs->ssl?"SSL protected ":"",hlist[i].host,port);    break;
      }
#else
      ldap_unbind(ld);
      ld=NULL;
      fprintf(stderr, "%s| %s: SASL not supported on system\n",LogTime(), PROGRAM);
      continue;
#endif
    }
    free_hostname_list(&hlist,nhosts);
    if ( ld == NULL ) {
      if (margs->debug)
        fprintf(stderr, "%s| %s: Error during initialisation of ldap connection: %s\n",LogTime(), PROGRAM,strerror(errno));
    }

    bindp=convert_domain_to_bind_path(domain);
  } 

  if ((!domain || !ld) && margs->lurl && strstr(margs->lurl,"://") ) {
    /* 
     * If username does not contain a domain and a url was given then try it
     */
    hostname=strstr(margs->lurl,"://")+3;
    ssl=strstr(margs->lurl,"ldaps://");
    if (ssl) {
      if (margs->debug)
    fprintf(stderr, "%s| %s: Enable SSL to ldap servers\n",LogTime(), PROGRAM);
    }
    if (margs->debug)
      fprintf(stderr, "%s| %s: Canonicalise ldap server name %s\n",LogTime(), PROGRAM,hostname);
    /*
     * Loop over list of ldap servers 
     */
    host=strdup(hostname);
    port=389;
    if ((p=strchr(host,':'))) {
      *p='';
      p++;
      port=atoi(p);
    } 
    nhosts=get_hostname_list(margs,&hlist,0,host);
    if (host)
      free(host);
    host=NULL;
    for (i=0;i<nhosts;i++) {

      ld = tool_ldap_open(margs,hlist[i].host,port,ssl);
      if (!ld) 
      continue;
      /*
       * ldap bind with username/password authentication
       */

      if (margs->debug)
    fprintf(stderr, "%s| %s: Bind to ldap server with Username/Password\n",LogTime(), PROGRAM);
      rc = ldap_simple_bind_s(ld, margs->luser, margs->lpass);
      if (rc != LDAP_SUCCESS) {
    fprintf(stderr, "%s| %s: Error while binding to ldap server with Username/Password: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
    ldap_unbind(ld);
    ld=NULL;
    continue;
      }
      lcreds=malloc(sizeof(struct ldap_creds));
      lcreds->dn = strdup(margs->luser);
      lcreds->pw = strdup(margs->lpass);
      ldap_set_rebind_proc(ld, ldap_simple_rebind,(char *)lcreds);
      if (margs->debug)
    fprintf(stderr, "%s| %s: %s set up %sconnection to ldap server %s:%d\n",LogTime(), PROGRAM, ld?"Successfully":"Failed to",ssl?"SSL protected ":"",hlist[i].host,port);
      break;
      
    }
    free_hostname_list(&hlist,nhosts);
    if (bindp)
      free(bindp);
    if (margs->lbind) {
      bindp=strdup(margs->lbind);
    } else {
      bindp=convert_domain_to_bind_path(domain);
    }
  }

  if ( ld == NULL ) {
    if (margs->debug)
      fprintf(stderr, "%s| %s: Error during initialisation of ldap connection: %s\n",LogTime(), PROGRAM,strerror(errno));
    retval=0;
    goto cleanup;
  }

  /*
   * ldap search for user
   */
  /* 
   * Check if server is AD by querying for attribute samaccountname
   */
  margs->AD=0;
  rc = check_AD(margs,ld);
  if (rc != LDAP_SUCCESS) {
    fprintf(stderr, "%s| %s: Error determining ldap server type: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
    ldap_unbind(ld);
    ld=NULL;
    retval=0;
    goto cleanup;
  }
  
  if (margs->AD)
    filter=(char *)FILTER_AD;
  else
    filter=(char *)FILTER;

  ldap_filter_esc = escape_filter(user);

  search_exp=malloc(strlen(filter)+strlen(ldap_filter_esc)+1);
  snprintf(search_exp,strlen(filter)+strlen(ldap_filter_esc)+1, filter, ldap_filter_esc);
  
  if (ldap_filter_esc)
     free (ldap_filter_esc);

  if (margs->debug)
    fprintf(stderr, "%s| %s: Search ldap server with bind path %s and filter : %s\n",LogTime(), PROGRAM,bindp,search_exp);
  rc = ldap_search_ext_s(ld, bindp, LDAP_SCOPE_SUBTREE,
                 search_exp, NULL, 0,
                         NULL, NULL, &searchtime, 0, &res);
   if (search_exp)
    free(search_exp);

  if (rc != LDAP_SUCCESS) {
    fprintf(stderr, "%s| %s: Error searching ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
    ldap_unbind(ld);
    ld=NULL;
    retval=0;
    goto cleanup;
  }

  if (margs->debug)
    fprintf(stderr, "%s| %s: Found %d ldap entr%s\n",LogTime(), PROGRAM, ldap_count_entries( ld, res),ldap_count_entries( ld, res)>1||ldap_count_entries( ld, res)==0?"ies":"y");

  if (ldap_count_entries( ld, res)!=0 ) {

    if (margs->AD)
      max_attr = get_attributes(margs,ld,res,ATTRIBUTE_AD,&attr_value);
    else {
      max_attr = get_attributes(margs,ld,res,ATTRIBUTE,&attr_value);
    }

    /*
     * Compare group names
     */
    retval=0;
    for (j=0;j<max_attr;j++) {

      /* Compare first CN= value assuming it is the same as the group name itself */
      av=attr_value[j];
      if (!strncasecmp("CN=",av,3)) {
        av+=3;
        if ((avp=strchr(av,','))) {
          *avp='';
        }
      }
      if (margs->debug) { 
        int n;
        fprintf(stderr, "%s| %s: Entry %d \"%s\" in hex UTF-8 is ",LogTime(), PROGRAM, j+1, av);
        for (n=0; av[n] != ''; n++)
           fprintf(stderr, "%02x",(unsigned char)av[n]);
        fprintf(stderr, "\n");
      }
      if (!strcasecmp(group,av)) {
        retval=1;
        if (margs->debug)
      fprintf(stderr, "%s| %s: Entry %d \"%s\" matches group name \"%s\"\n",LogTime(), PROGRAM, j+1, av, group);
        else
          break;
      } else {
        if (margs->debug)
        fprintf(stderr, "%s| %s: Entry %d \"%s\" does not match group name \"%s\"\n",LogTime(), PROGRAM, j+1, av, group);
      }
    }
    /* 
     * Do recursive group search for AD only since posixgroups can not contain other groups
     */
    if (!retval && margs->AD) {
      if (margs->debug && max_attr > 0)
        fprintf(stderr, "%s| %s: Perform recursive group search\n",LogTime(), PROGRAM);
      for (j=0;j<max_attr;j++) {

        av=attr_value[j];
        if (search_group_tree(margs,ld,bindp,av,group,1)) {
          retval=1;
          if (!strncasecmp("CN=",av,3)) {
            av+=3;
            if ((avp=strchr(av,','))) {
              *avp='';
            }
          }
          if (margs->debug)
            fprintf(stderr, "%s| %s: Entry %d group \"%s\" is (in)direct member of group \"%s\"\n",LogTime(), PROGRAM, j+1, av, group);
          else
            break;
        }
      }
    }

    /*
     * Cleanup
     */
    if (attr_value){
      for (j=0;j<max_attr;j++) {
        free(attr_value[j]);
      }
      free(attr_value);
      attr_value=NULL;
    }
    ldap_msgfree(res);
  } else if (ldap_count_entries( ld, res)==0 && margs->AD) {
    ldap_msgfree(res);
    ldap_unbind(ld);
    ld=NULL;
    retval=0;
    goto cleanup;
  } else {
    ldap_msgfree(res);
    retval=0;
  }

  if (!margs->AD && retval == 0) {
    /*
     * Check for primary Group membership
     */
    if (margs->debug)
      fprintf(stderr, "%s| %s: Search for primary group membership: \"%s\"\n",LogTime(), PROGRAM,group);
    filter=(char *)FILTER_UID;

    ldap_filter_esc = escape_filter(user);

    search_exp=malloc(strlen(filter)+strlen(ldap_filter_esc)+1);
    snprintf(search_exp,strlen(filter)+strlen(ldap_filter_esc)+1, filter, ldap_filter_esc);

    if (ldap_filter_esc)
        free(ldap_filter_esc);

    if (margs->debug)
      fprintf(stderr, "%s| %s: Search ldap server with bind path %s and filter: %s\n",LogTime(), PROGRAM,bindp,search_exp);
    rc = ldap_search_ext_s(ld, bindp, LDAP_SCOPE_SUBTREE,
                      search_exp, NULL, 0,
                           NULL, NULL, &searchtime, 0, &res);
    if (search_exp)
      free(search_exp);

    if ( rc != LDAP_SUCCESS ) {
      fprintf(stderr, "%s| %s: Search returned with error %s\n",LogTime(), PROGRAM, ldap_err2string(rc));
      goto cleanup;
    }

    if (margs->debug)
      fprintf(stderr, "%s| %s: Found %d ldap entr%s\n",LogTime(), PROGRAM, ldap_count_entries( ld, res),ldap_count_entries( ld, res)>1||ldap_count_entries( ld, res)==0?"ies":"y");

    max_attr = get_attributes(margs,ld,res,ATTRIBUTE_GID,&attr_value);

    if (max_attr==1) {
      char **attr_value_2=NULL;
      int max_attr_2=0;

      ldap_msgfree(res);
      filter=(char *)FILTER_GID;

      ldap_filter_esc = escape_filter(attr_value[0]);

      search_exp=malloc(strlen(filter)+strlen(ldap_filter_esc)+1);
      snprintf(search_exp,strlen(filter)+strlen(ldap_filter_esc)+1, filter, ldap_filter_esc);

      if (ldap_filter_esc)
         free(ldap_filter_esc);

      if (margs->debug)
    fprintf(stderr, "%s| %s: Search ldap server with bind path %s and filter: %s\n",LogTime(), PROGRAM,bindp,search_exp);
      rc = ldap_search_ext_s(ld, bindp, LDAP_SCOPE_SUBTREE,
                   search_exp, NULL, 0,
                             NULL, NULL, &searchtime, 0, &res);
      if (search_exp)
    free(search_exp);

      if ( rc != LDAP_SUCCESS ) {
        fprintf(stderr, "%s| %s: Search returned with error %s\n",LogTime(), PROGRAM, ldap_err2string(rc));
        goto cleanup;
      }

      max_attr_2 = get_attributes(margs,ld,res,ATTRIBUTE,&attr_value_2);
      /*
       * Compare group names
       */
      retval=0;
      if(max_attr_2==1) {

        /* Compare first CN= value assuming it is the same as the group name itself */
        av=attr_value_2[0];
        if (!strcasecmp(group,av)) {
          retval=1;
          if (margs->debug)
            fprintf(stderr, "%s| %s: \"%s\" matches group name \"%s\"\n",LogTime(), PROGRAM, av, group);
        } else {
          if (margs->debug)
            fprintf(stderr, "%s| %s: \"%s\" does not match group name \"%s\"\n",LogTime(), PROGRAM, av, group);
        }

      }

      /*
       * Cleanup
       */
      if (attr_value_2){
        for (j=0;j<max_attr_2;j++) {
          free(attr_value_2[j]);
        }
        free(attr_value_2);
        attr_value_2=NULL;
      }
      ldap_msgfree(res);

      if (margs->debug)
    fprintf(stderr, "%s| %s: Users primary group %s %s\n",LogTime(), PROGRAM, retval?"matches":"does not match", group);
  
    } else {
      if (margs->debug)
    fprintf(stderr, "%s| %s: Did not find ldap entry for group %s\n",LogTime(), PROGRAM, group);
    }
    /*
     * Cleanup
     */
    if (attr_value){
      for (j=0;j<max_attr;j++) {
    free(attr_value[j]);
      }
      free(attr_value);
      attr_value=NULL;
    }
  }

  rc = ldap_unbind(ld);
  ld=NULL;
  if (rc != LDAP_SUCCESS) {
    fprintf(stderr, "%s| %s: Error unbind ldap server: %s\n",LogTime(), PROGRAM,ldap_err2string(rc));
  }
  if (margs->debug)
    fprintf(stderr, "%s| %s: Unbind ldap server\n",LogTime(), PROGRAM);
 cleanup:
#ifdef HAVE_KRB5_H    
  if (domain)
    krb5_cleanup();
#endif
  if (lcreds) {
    if (lcreds->dn)
      free(lcreds->dn);
    if (lcreds->pw)
      free(lcreds->pw);
    free(lcreds);
  }
  if (bindp)
    free(bindp);
  bindp=NULL;
  return(retval);

}

Que ao compilar ocorre o seguinte erro:

rootmsolbhzvpx01:~/squid_kerb_ldap-1.2.1a# gcc -c support_ldap.c

support_ldap.c:33:39: erro: unknown type name âLDAPâ

support_ldap.c:34:48: erro: unknown type name âLDAPâ

support_ldap.c:36:1: erro: unknown type name âLDAPâ

support_ldap.c:50:45: erro: unknown type name âLDAPâ

support_ldap.c:50:55: erro: unknown type name âLDAPMessageâ

support_ldap.c:51:47: erro: unknown type name âLDAPâ

support_ldap.c:170:3: erro: #error "No rebind functione defined"

support_ldap.c:277:39: erro: unknown type name âLDAPâ

support_ldap.c:328:47: erro: unknown type name âLDAPâ

support_ldap.c:454:48: erro: unknown type name âLDAPâ

support_ldap.c: Na função âldap_set_ssl_defaultsâ:

support_ldap.c:558:10: erro: âLDAP_SUCCESSâ undeclared (first use in this functi on)

support_ldap.c:558:10: nota: each undeclared identifier is reported only once fo r each function it appears in

support_ldap.c: No nivel superior:

support_ldap.c:561:44: erro: unknown type name âLDAPâ

support_ldap.c:561:53: erro: unknown type name âLDAPMessageâ

support_ldap.c:648:1: erro: unknown type name âLDAPâ

support_ldap.c: Na função âtool_ldap_openâ:

support_ldap.c:649:5: erro: unknown type name âLDAPâ

support_ldap.c:705:10: aviso: assignment makes pointer from integer without a ca st [habilitado por padrão]

support_ldap.c:708:17: erro: âLDAP_SUCCESSâ undeclared (first use in this functi on)

support_ldap.c:709:9: aviso: formato â%sâ expects argument of type âchar *â, but argument 5 has type âintâ [-Wformat]

support_ldap.c:723:11: aviso: formato â%sâ expects argument of type âchar *â, bu t argument 5 has type âintâ [-Wformat]

support_ldap.c: Na função âget_memberofâ:

support_ldap.c:811:3: erro: unknown type name âLDAPâ

support_ldap.c:812:3: erro: unknown type name âLDAPMessageâ

support_ldap.c:972:17: erro: âLDAP_SUCCESSâ undeclared (first use in this functi on)

support_ldap.c:973:2: aviso: formato â%sâ expects argument of type âchar *â, but argument 5 has type âintâ [-Wformat]

support_ldap.c:981:32: erro: âldap_simple_rebindâ undeclared (first use in this function)

support_ldap.c:1013:5: aviso: formato â%sâ expects argument of type âchar *â, bu t argument 5 has type âintâ [-Wformat]

support_ldap.c:1035:37: erro: âLDAP_SCOPE_SUBTREEâ undeclared (first use in this function)

support_ldap.c:1042:5: aviso: formato â%sâ expects argument of type âchar *â, bu t argument 5 has type âintâ [-Wformat]

support_ldap.c:1245:5: aviso: formato â%sâ expects argument of type âchar *â, bu t argument 5 has type âintâ [-Wformat]

Como posso resolver?

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...