Before expanding the API I would like to have some comments about my code.
Could someone make comments or give hints?
Cheers
Jean-Frederic
Index: ./include/ldap.h
=================================================================== RCS
file: /repo/OpenLDAP/pkg/ldap/include/ldap.h,v retrieving revision 1.208
diff -u -r1.208 ldap.h --- ./include/ldap.h 1 May 2003 21:39:29 -0000
1.208 +++ ./include/ldap.h 31 Jul 2003 12:29:58 -0000 @@ -602,6 +602,24
@@ #define LDAP_URL_ERR_BADFILTER 0x09 /* bad or missing filter */
#define LDAP_URL_ERR_BADEXTS 0x0a /* bad or missing extensions */
+#if defined(_OSD_POSIX) && ('A' == '\xC1') +#define USE_EBCDIC_API +#endif
+ +/* ebcdic API (in ldap_ebcdic.c) */ +#ifdef USE_EBCDIC_API +#define
ldap_init ldap_init_ebcdic +#define ldap_initialize ldap_initialize_ebcdic
+#define ldap_simple_bind ldap_simple_bind_ebcdic +#define
ldap_simple_bind_s ldap_simple_bind_s_ebcdic +#define ldap_err2string
ldap_err2string_ebcdic +#define ldap_search_ext ldap_search_ext_ebcdic
+#define ldap_search_ext_s ldap_search_ext_s_ebcdic +#define
ldap_first_attribute ldap_first_attribute_ebcdic +#define
ldap_next_attribute ldap_next_attribute_ebcdic +#define ldap_get_values
ldap_get_values_ebcdic +#endif + /* * The API draft spec says we should
declare (or cause to be declared) * 'struct timeval'. We don't. See IETF
LDAPext discussions. #include <stdio.h> #include <stdlib.h> #include
"ldap.h"
#ifdef ldap_init #undef ldap_init #endif #ifdef ldap_initialize #undef
ldap_initialize #endif #ifdef ldap_simple_bind #undef ldap_simple_bind
#endif #ifdef ldap_simple_bind_s #undef ldap_simple_bind_s #endif #ifdef
ldap_err2string #undef ldap_err2string #endif #ifdef ldap_search_ext #undef
ldap_search_ext #endif #ifdef ldap_search_ext_s #undef ldap_search_ext_s
#endif #ifdef ldap_first_attribute #undef ldap_first_attribute #endif
#ifdef ldap_next_attribute #undef ldap_next_attribute #endif #ifdef
ldap_get_values #undef ldap_get_values #endif
/* Alloc a buffer, copy and convert the input string into it */ static char
*malloc2ebcdic(LDAP_CONST char *string) { char *newstring; if (string ==
NULL) return(NULL);
newstring = (char *) malloc(strlen(string)); if (newstring == NULL)
return(NULL); strcpy(newstring,string); _e2a(newstring); return(newstring);
} static void safefree(char *string) { if (string!=NULL) free(string); }
/* From open.c */ LDAP * ldap_init_ebcdic ( LDAP_CONST char *host, int port
) { LDAP *ptr; char *new; new = malloc2ebcdic(host); if (new == NULL)
return ((LDAP *)NULL); ptr = ldap_init(new,port); free(new); return(ptr); }
int ldap_initialize_ebcdic ( LDAP **ldp, LDAP_CONST char *url ) { int i;
char *new; new = malloc2ebcdic(url); if (new == NULL) return (-1); i =
ldap_initialize(ldp,new); free(new); return(i); }
/* From sbind.c */ int ldap_simple_bind_ebcdic ( LDAP *ld, LDAP_CONST char
*who, LDAP_CONST char *passwd ) { char *newwho; char *newpasswd; int ret;
newwho = malloc2ebcdic(who); newpasswd = malloc2ebcdic(passwd); ret =
ldap_simple_bind(ld,newwho,newpasswd); safefree(newwho);
safefree(newpasswd); return(ret); } int ldap_simple_bind_s_ebcdic ( LDAP
*ld, LDAP_CONST char *who, LDAP_CONST char *passwd ) { char *newwho; char
*newpasswd; int ret; newwho = malloc2ebcdic(who); newpasswd =
malloc2ebcdic(passwd); ret = ldap_simple_bind_s(ld,newwho,newpasswd);
safefree(newwho); safefree(newpasswd); return(ret); }
/* From error.c: */ char * ldap_err2string_ebcdic ( int err ) { static char
ebcdic_err[80]; strcpy(ebcdic_err,ldap_err2string(err)); _a2e(ebcdic_err);
return(ebcdic_err); }
/* From search.c */ int ldap_search_ext_ebcdic ( LDAP
*ld, LDAP_CONST char *base, int scope,
LDAP_CONST char *filter, char **attrs, int
attrsonly, LDAPControl **serverctrls, LDAPControl
**clientctrls, struct timeval *timeout, int
sizelimit, int *msgidp ) { char *newbase; char
*newfilter; char **newattrs; int i,j,ret; newbase = malloc2ebcdic(base);
newfilter = malloc2ebcdic(filter); if (attrs == NULL) newattrs = NULL;
else { i = 0; newattrs = attrs; while (newattrs[i]!=NULL) i++; newattrs =
malloc(sizeof(char *)*i); j = i; for (i=0;i<j;i++) newattrs[i] =
malloc2ebcdic(attrs[i]); }
ret = ldap_search_ext (ld, newbase, scope, newfilter, newattrs, attrsonly,
serverctrls, clientctrls, timeout, sizelimit, msgidp);
safefree(newbase); safefree(newfilter); if (newattrs!=NULL) { for
(i=0;i<j;i++) safefree(newattrs[i]); free(newattrs); } return (ret); }
int ldap_search_ext_s_ebcdic ( LDAP *ld, LDAP_CONST char
*base, int scope, LDAP_CONST char *filter, char
**attrs, int attrsonly, LDAPControl
**serverctrls, LDAPControl **clientctrls, struct timeval
*timeout, int sizelimit, LDAPMessage
**res ) { char *newbase; char *newfilter; char **newattrs; int i,j,ret;
newbase = malloc2ebcdic(base); newfilter = malloc2ebcdic(filter); if
(attrs == NULL) newattrs = NULL; else { i = 0; newattrs = attrs; while
(newattrs[i]!=NULL) i++; newattrs = malloc(sizeof(char *)*i); j = i; for
(i=0;i<j;i++) newattrs[i] = malloc2ebcdic(attrs[i]); }
ret = ldap_search_ext_s (ld, newbase, scope, newfilter, newattrs,
attrsonly, serverctrls, clientctrls, timeout, sizelimit, res);
safefree(newbase); safefree(newfilter); if (newattrs!=NULL) { for
(i=0;i<j;i++) safefree(newattrs[i]); free(newattrs); } return (ret); }
/* From getattr.c */ char * ldap_first_attribute_ebcdic ( LDAP *ld,
LDAPMessage *entry, BerElement **ber ) { char *ptr; ptr =
ldap_first_attribute(ld,entry,ber); if (ptr!=NULL) _a2e(ptr); return(ptr);
}
char * ldap_next_attribute_ebcdic ( LDAP *ld, LDAPMessage *entry,
BerElement *ber ) { char *ptr; ptr = ldap_next_attribute(ld,entry,ber); if
(ptr!=NULL) _a2e(ptr); return(ptr); } /* From getvalues.c */ char **
ldap_get_values_ebcdic ( /* deprecated */ LDAP *ld, LDAPMessage
*entry, LDAP_CONST char *target ) { char **ptr; char *newtarget; int i=0;
newtarget = malloc2ebcdic(target); ptr =
ldap_get_values(ld,entry,newtarget); safefree(newtarget); /* I am
converting all the values... that sounds wrong! */ if (ptr!=NULL) {
while(ptr[i]!=NULL) { _a2e(ptr[i]); i++; } } return(ptr); }