From 62a3e611471aa68b1d8701dd169cf8757848107a Mon Sep 17 00:00:00 2001 From: clayton Date: Fri, 31 Jul 1998 21:18:29 +0000 Subject: [PATCH] Makefile.PL - Fixed a build problem with NT and Perl 5.005 - Added define for LDAPV3. - Needs gobs of work before release o LDAPv2 Library Support o Better UI o Consistent environment variable usage. git-svn-id: svn://10.0.0.236/trunk@6975 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/directory/perldap/API.xs | 184 +++++++++++++++++++++----- mozilla/directory/perldap/Makefile.PL | 15 ++- 2 files changed, 166 insertions(+), 33 deletions(-) diff --git a/mozilla/directory/perldap/API.xs b/mozilla/directory/perldap/API.xs index a840fac6313..a62a98604dd 100644 --- a/mozilla/directory/perldap/API.xs +++ b/mozilla/directory/perldap/API.xs @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: API.xs,v 1.6 1998-07-29 03:30:26 leif Exp $ + * $Id: API.xs,v 1.7 1998-07-31 21:18:28 clayton Exp $ * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in @@ -94,11 +94,11 @@ char ** avref2charptrptr(SV *avref) return NULL; } - New(1,tmp_cpp,avref_arraylen+2,char *); + Newz(1,tmp_cpp,avref_arraylen+2,char *); for (ix_av = 0;ix_av <= avref_arraylen;ix_av++) { current_val = av_fetch((AV *)SvRV(avref),ix_av,0); - tmp_cpp[ix_av] = SvPV(*current_val,na); + tmp_cpp[ix_av] = strdup(SvPV(*current_val,na)); } tmp_cpp[ix_av] = NULL; @@ -119,11 +119,11 @@ struct berval ** avref2berptrptr(SV *avref) return NULL; } - New(1,tmp_ber,avref_arraylen+2,struct berval *); + Newz(1,tmp_ber,avref_arraylen+2,struct berval *); for (ix_av = 0;ix_av <= avref_arraylen;ix_av++) { current_val = av_fetch((AV *)SvRV(avref),ix_av,0); - tmp_ber[ix_av]->bv_val = (char *)SvPV(*current_val,na); + tmp_ber[ix_av]->bv_val = strdup(SvPV(*current_val,na)); tmp_ber[ix_av]->bv_len = na; } tmp_ber[ix_av] = NULL; @@ -190,7 +190,7 @@ LDAPMod *parse1mod(SV *ldap_value_ref,char *ldap_current_attribute, if (ldap_current_attribute == NULL) return(NULL); - New(1,ldap_current_mod,1,LDAPMod); + Newz(1,ldap_current_mod,1,LDAPMod); ldap_current_mod->mod_type = ldap_current_attribute; if (SvROK(ldap_value_ref)) { @@ -246,7 +246,6 @@ LDAPMod *parse1mod(SV *ldap_value_ref,char *ldap_current_attribute, else ldap_current_mod->mod_op = LDAP_MOD_REPLACE; ldap_current_mod->mod_values = avref2charptrptr(ldap_value_ref); - /*av2modvals((AV *)SvRV(ldap_value_ref),0); */ if (ldap_current_mod->mod_values == NULL) { ldap_current_mod->mod_op = LDAP_MOD_DELETE; @@ -272,7 +271,7 @@ LDAPMod *parse1mod(SV *ldap_value_ref,char *ldap_current_attribute, ldap_current_mod->mod_op = LDAP_MOD_REPLACE; } New(1,ldap_current_mod->mod_values,2,char *); - ldap_current_mod->mod_values[0] = SvPV(ldap_value_ref,na); + ldap_current_mod->mod_values[0] = strdup(SvPV(ldap_value_ref,na)); ldap_current_mod->mod_values[1] = NULL; } } @@ -297,26 +296,22 @@ LDAPMod ** hash2mod(SV *ldap_change_ref,int ldap_add_func,const char *func) HV *ldap_change; if (!SvROK(ldap_change_ref) || SvTYPE(SvRV(ldap_change_ref)) != SVt_PVHV) - croak("Net::LDAPapi::%s needs Hash reference as argument 3.",func); + croak("Mozilla::LDAP::API::%s needs Hash reference as argument 3.",func); ldap_change = (HV *)SvRV(ldap_change_ref); + Newz(1,ldapmod,1+HvKEYS(ldap_change),LDAPMod *); hv_iterinit(ldap_change); while((ldap_change_element = hv_iternext(ldap_change)) != NULL) { - ldap_current_attribute = hv_iterkey(ldap_change_element,&keylen); + ldap_current_attribute = strdup(hv_iterkey(ldap_change_element,&keylen)); ldap_current_value_sv = hv_iterval(ldap_change,ldap_change_element); ldap_current_mod = parse1mod(ldap_current_value_sv, ldap_current_attribute,ldap_add_func,0); while (ldap_current_mod != NULL) { ldap_attribute_count++; - (ldapmod - ? Renew(ldapmod,1+ldap_attribute_count,LDAPMod *) - : New(1,ldapmod,1+ldap_attribute_count,LDAPMod *)); - /* New(1,ldapmod[ldap_attribute_count -1],sizeof(LDAPMod),LDAPMod); */ ldapmod[ldap_attribute_count-1] = (LDAPMod *)ldap_current_mod; - /* ,ldapmod[ldap_attribute_count-1], sizeof(LDAPMod),LDAPMod *); */ ldap_current_mod = parse1mod(ldap_current_value_sv, ldap_current_attribute,ldap_add_func,1); @@ -326,6 +321,18 @@ LDAPMod ** hash2mod(SV *ldap_change_ref,int ldap_add_func,const char *func) return ldapmod; } +/* StrCaseCmp - Replacement for strcasecmp, since it doesn't exist on many + systems, including NT... */ + +int StrCaseCmp(const char *s, const char *t) +{ + while (*s && *t && toupper(*s) == toupper(*t)) + { + s++; t++; + } + return(toupper(*s) - toupper(*t)); +} + /* internal_rebind_proc - Wrapper to call a PERL rebind process */ int LDAP_CALL internal_rebind_proc(LDAP *ld, char **dnp, char **pwp, @@ -377,6 +384,8 @@ ldap_abandon(ld,msgid) LDAP * ld int msgid +#ifdef LDAPV3 + int ldap_abandon_ext(ld,msgid,serverctrls,clientctrls) LDAP * ld @@ -384,13 +393,17 @@ ldap_abandon_ext(ld,msgid,serverctrls,clientctrls) LDAPControl ** serverctrls LDAPControl ** clientctrls +#endif + int ldap_add(ld,dn,attrs) LDAP * ld const char * dn LDAPMod ** attrs = hash2mod($arg,1,"$func_name"); -# CLEANUP: -# ldap_mods_free(attrs,0); + CLEANUP: + ldap_mods_free(attrs,1); + +#ifdef LDAPV3 int ldap_add_ext(ld,dn,attrs,serverctrls,clientctrls,msgidp) @@ -403,8 +416,8 @@ ldap_add_ext(ld,dn,attrs,serverctrls,clientctrls,msgidp) OUTPUT: RETVAL msgidp -# CLEANUP: -# ldap_mods_free(attrs,0); + CLEANUP: + ldap_mods_free(attrs,1); int ldap_add_ext_s(ld,dn,attrs,serverctrls,clientctrls) @@ -413,14 +426,18 @@ ldap_add_ext_s(ld,dn,attrs,serverctrls,clientctrls) LDAPMod ** attrs = hash2mod($arg,1,"$func_name"); LDAPControl ** serverctrls LDAPControl ** clientctrls -# CLEANUP: -# ldap_mods_free(attrs,0); + CLEANUP: + ldap_mods_free(attrs,1); + +#endif int ldap_add_s(ld,dn,attrs) LDAP * ld const char * dn LDAPMod ** attrs = hash2mod($arg,1,"$func_name"); + CLEANUP: + ldap_mods_free(attrs,1); void ldap_ber_free(ber,freebuf) @@ -434,6 +451,8 @@ ldap_compare(ld,dn,attr,value) const char * attr const char * value +#ifdef LDAPV3 + int ldap_compare_ext(ld,dn,attr,bvalue,serverctrls,clientctrls,msgidp) LDAP * ld @@ -456,6 +475,8 @@ ldap_compare_ext_s(ld,dn,attr,bvalue,serverctrls,clientctrls) LDAPControl ** serverctrls LDAPControl ** clientctrls +#endif + int ldap_compare_s(ld,dn,attr,value) LDAP * ld @@ -463,10 +484,14 @@ ldap_compare_s(ld,dn,attr,value) const char * attr const char * value +#ifdef LDAPV3 + void ldap_control_free(ctrl) LDAPControl * ctrl +#endif + #ifdef CONTROLS_COUNT_WORKS int ldap_controls_count(ctrls) @@ -474,15 +499,21 @@ ldap_controls_count(ctrls) #endif +#ifdef LDAPV3 + void ldap_controls_free(ctrls) LDAPControl ** ctrls +#endif + int ldap_count_entries(ld,result) LDAP * ld LDAPMessage * result +#ifdef LDAPV3 + int ldap_count_messages(ld,result) LDAP * ld @@ -493,6 +524,8 @@ ldap_count_references(ld,result) LDAP * ld LDAPMessage * result +#endif + int ldap_create_filter(buf,buflen,pattern,prefix,suffix,attr,value,valwords) char * buf @@ -503,6 +536,10 @@ ldap_create_filter(buf,buflen,pattern,prefix,suffix,attr,value,valwords) char * attr char * value char ** valwords + CLEANUP: + ldap_value_free(valwords); + +#ifdef LDAPV3 int ldap_create_persistentsearch_control(ld,changetypes,changesonly,return_echg_ctrls,ctrl_iscritical,ctrlp) @@ -543,11 +580,15 @@ ldap_create_virtuallist_control(ld,ldvlistp,ctrlp) RETVAL ctrlp +#endif + int ldap_delete(ld,dn) LDAP * ld const char * dn +#ifdef LDAPV3 + int ldap_delete_ext(ld,dn,serverctrls,clientctrls,msgidp) LDAP * ld @@ -566,6 +607,8 @@ ldap_delete_ext_s(ld,dn,serverctrls,clientctrls) LDAPControl ** serverctrls LDAPControl ** clientctrls +#endif + int ldap_delete_s(ld,dn) LDAP * ld @@ -599,6 +642,8 @@ ldap_explode_rdn(dn,notypes) RET_CPP(MOZLDAP_VAL); } +#ifdef LDAPV3 + int ldap_extended_operation(ld,requestoid,requestdata,serverctrls,clientctrls,msgidp) LDAP * ld @@ -624,6 +669,10 @@ ldap_extended_operation_s(ld,requestoid,requestdata,serverctrls,clientctrls,reto RETVAL retoidp retdatap + CLEANUP: + ldap_value_free_len(retdatap); + +#endif char * ldap_first_attribute(ld,entry,ber) @@ -642,6 +691,8 @@ ldap_first_entry(ld,chain) LDAP * ld LDAPMessage * chain +#ifdef LDAPV3 + LDAPMessage * ldap_first_message(ld,res) LDAP * ld @@ -652,14 +703,20 @@ ldap_first_reference(ld,res) LDAP * ld LDAPMessage * res +#endif + void ldap_free_friendlymap(map) FriendlyMap * map +#ifdef LDAPV3 + void ldap_free_sort_keylist(sortKeyList) LDAPsortkey ** sortKeyList +#endif + void ldap_free_urldesc(ludp) LDAPURLDesc * ludp @@ -677,6 +734,8 @@ ldap_get_dn(ld,entry) CLEANUP: ldap_memfree(RETVAL); +#ifdef LDAPV3 + int ldap_get_entry_controls(ld,entry,serverctrlsp) LDAP * ld @@ -686,6 +745,8 @@ ldap_get_entry_controls(ld,entry,serverctrlsp) RETVAL serverctrlsp +#endif + void ldap_getfilter_free(lfdp) LDAPFiltDesc * lfdp @@ -696,6 +757,8 @@ ldap_getfirstfilter(lfdp,tagpat,value) char * tagpat char * value +#ifdef LDAPV3 + void ldap_get_lang_values(ld,entry,target,type) LDAP * ld @@ -721,11 +784,30 @@ ldap_get_lang_values_len(ld,entry,target,type) RET_BVPP(MOZLDAP_VAL); } +#endif + int ldap_get_lderrno(ld,m,s) LDAP * ld - char * &m = NO_INIT - char * &s = NO_INIT + SV * m = NO_INIT + SV * s = NO_INIT + CODE: + { + char *mm,*ss; + RETVAL = ldap_get_lderrno(ld,&mm,&ss); + if (mm == NULL) + { + m = &sv_undef; + } else { + m = sv_2mortal(newSVpv(mm,strlen(mm))); + } + if (ss == NULL) + { + s = &sv_undef; + } else { + s = sv_2mortal(newSVpv(ss,strlen(ss))); + } + } OUTPUT: RETVAL m @@ -784,6 +866,8 @@ int ldap_is_ldap_url(url) char * url +#ifdef LDAPV3 + void ldap_memcache_destroy(cache) LDAPMemCache * cache @@ -813,6 +897,8 @@ ldap_memcache_init(ttl,size,baseDNs,cachep) OUTPUT: RETVAL cachep + CLEANUP: + ldap_value_free(baseDNs); int ldap_memcache_set(ld,cache) @@ -823,6 +909,8 @@ void ldap_memcache_update(cache) LDAPMemCache * cache +#endif + void ldap_memfree(p) void * p @@ -832,8 +920,10 @@ ldap_modify(ld,dn,mods) LDAP * ld const char * dn LDAPMod ** mods = hash2mod($arg,0,"$func_name"); -# CLEANUP: -# ldap_mods_free(mods,0); + CLEANUP: + ldap_mods_free(mods,1); + +#ifdef LDAPV3 int ldap_modify_ext(ld,dn,mods,serverctrls,clientctrls,msgidp) @@ -846,8 +936,8 @@ ldap_modify_ext(ld,dn,mods,serverctrls,clientctrls,msgidp) OUTPUT: RETVAL msgidp -# CLEANUP: -# ldap_mods_free(mods,0); + CLEANUP: + ldap_mods_free(mods,1); int ldap_modify_ext_s(ld,dn,mods,serverctrls,clientctrls) @@ -856,14 +946,18 @@ ldap_modify_ext_s(ld,dn,mods,serverctrls,clientctrls) LDAPMod ** mods = hash2mod($arg,0,"$func_name"); LDAPControl ** serverctrls LDAPControl ** clientctrls -# CLEANUP: -# ldap_mods_free(mods,0); + CLEANUP: + ldap_mods_free(mods,1); + +#endif int ldap_modify_s(ld,dn,mods) LDAP * ld const char * dn LDAPMod ** mods = hash2mod($arg,0,"$func_name"); + CLEANUP: + ldap_mods_free(mods,1); int ldap_modrdn(ld,dn,newrdn) @@ -915,11 +1009,13 @@ ldap_multisort_entries(ld,chain,attr) char ** attr CODE: { - RETVAL = ldap_multisort_entries(ld,&chain,attr,strcasecmp); + RETVAL = ldap_multisort_entries(ld,&chain,attr,StrCaseCmp); } OUTPUT: RETVAL chain + CLEANUP: + ldap_value_free(attr); char * ldap_next_attribute(ld,entry,ber) @@ -937,6 +1033,8 @@ ldap_next_entry(ld,entry) LDAP * ld LDAPMessage * entry +#ifdef LDAPV3 + LDAPMessage * ldap_next_message(ld,msg) LDAP * ld @@ -1037,11 +1135,15 @@ ldap_parse_virtuallist_control(ld,ctrls,target_posp,list_sizep,errcodep) list_sizep errcodep +#endif + void ldap_perror(ld,s) LDAP * ld const char * s +#ifdef LDAPV3 + int ldap_rename(ld,dn,newrdn,newparent,deleteoldrdn,serverctrls,clientctrls,msgidp) LDAP * ld @@ -1066,6 +1168,8 @@ ldap_rename_s(ld,dn,newrdn,newparent,deleteoldrdn,serverctrls,clientctrls) LDAPControl ** serverctrls LDAPControl ** clientctrls +#endif + int ldap_result(ld,msgid,all,timeout,result) LDAP * ld @@ -1083,6 +1187,8 @@ ldap_result2error(ld,r,freeit) LDAPMessage * r int freeit +#ifdef LDAPV3 + int ldap_sasl_bind(ld,dn,mechanism,cred,serverctrls,clientctrls,msgidp) LDAP * ld @@ -1109,6 +1215,8 @@ ldap_sasl_bind_s(ld,dn,mechanism,cred,serverctrls,clientctrls,servercredp) RETVAL servercredp +#endif + int ldap_search(ld,base,scope,filter,attrs,attrsonly) LDAP * ld @@ -1117,6 +1225,10 @@ ldap_search(ld,base,scope,filter,attrs,attrsonly) const char * filter char ** attrs int attrsonly + CLEANUP: + ldap_value_free(attrs); + +#ifdef LDAPV3 int ldap_search_ext(ld,base,scope,filter,attrs,attrsonly,serverctrls,clientctrls,timeoutp,sizelimit,msgidp) @@ -1134,6 +1246,8 @@ ldap_search_ext(ld,base,scope,filter,attrs,attrsonly,serverctrls,clientctrls,tim OUTPUT: RETVAL msgidp + CLEANUP: + ldap_value_free(attrs); int ldap_search_ext_s(ld,base,scope,filter,attrs,attrsonly,serverctrls,clientctrls,timeoutp,sizelimit,res) @@ -1151,6 +1265,10 @@ ldap_search_ext_s(ld,base,scope,filter,attrs,attrsonly,serverctrls,clientctrls,t OUTPUT: RETVAL res + CLEANUP: + ldap_value_free(attrs); + +#endif int ldap_search_s(ld,base,scope,filter,attrs,attrsonly,res) @@ -1164,6 +1282,8 @@ ldap_search_s(ld,base,scope,filter,attrs,attrsonly,res) OUTPUT: RETVAL res + CLEANUP: + ldap_value_free(attrs); int ldap_search_st(ld,base,scope,filter,attrs,attrsonly,timeout,res) @@ -1178,6 +1298,8 @@ ldap_search_st(ld,base,scope,filter,attrs,attrsonly,timeout,res) OUTPUT: RETVAL res + CLEANUP: + ldap_value_free(attrs); int ldap_set_filter_additions(lfdp,prefix,suffix) @@ -1235,7 +1357,7 @@ ldap_sort_entries(ld,chain,attr) char * attr CODE: { - RETVAL = ldap_sort_entries(ld,&chain,attr,strcasecmp); + RETVAL = ldap_sort_entries(ld,&chain,attr,StrCaseCmp); } OUTPUT: RETVAL diff --git a/mozilla/directory/perldap/Makefile.PL b/mozilla/directory/perldap/Makefile.PL index a9f7726fd33..53c0867fb73 100644 --- a/mozilla/directory/perldap/Makefile.PL +++ b/mozilla/directory/perldap/Makefile.PL @@ -1,5 +1,5 @@ ############################################################################# -# $Id: Makefile.PL,v 1.5 1998-07-29 08:27:00 leif Exp $ +# $Id: Makefile.PL,v 1.6 1998-07-31 21:18:29 clayton Exp $ # # The contents of this file are subject to the Mozilla Public License # Version 1.0 (the "License"); you may not use this file except in @@ -83,6 +83,16 @@ if ($osname =~ /mswin/i) } } +$v3_def = "-DLDAPV3"; + +if ($osname =~ /mswin/i) +{ + $myextlib = "$lib_ldap\\$ldap_lib.lib"; +} else { + $myextlib = ""; +} + + WriteMakefile( 'NAME' => 'Mozilla::LDAP::API', 'VERSION_FROM' => 'API.pm', @@ -92,5 +102,6 @@ WriteMakefile( 'INC' => "", )), 'LIBS' => ["-L$lib_ldap -l$ldap_lib"], - 'DEFINE' => "$ssl_def", + 'MYEXTLIB' => $myextlib, + 'DEFINE' => "$v3_def $ssl_def", );