/* ldapdiff Copyright (C) 2000-2007 Thomas.Reith@rhoen.de 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 */ #define VERSION "GNU ldapdiff Version 1.2.3 by Thomas.Reith@rhoen.de" #define COPYING "Copyright (C) 2000-2006 Free Software Foundation, Inc." #define LDAPCONF "ldapdiff.conf" #define SYSLOGNAME "ldapdiff" #define SECTGLOB "global" #define DNNAME "dn" #define MAXCONFVAR 1024 #define MAXATTRLEN 4096 #define MAXLOGLEN 128 #define MAXLDIFLINELEN 64 #define EXITLDOK 0 #define EXITLDERROR 1 #define EXITLDWARNING 2 #define LDALLOC(x,y) ldifalloc(x,y,__FILE__,__LINE__); #define LDDUP(x) ldifdup(x,__FILE__,__LINE__); #define LDBINDUP(x,y) ldifbindup(x,y,__FILE__,__LINE__); typedef enum { SECTIONGLOBAL, SECTIONPROFILE, SECTIONNONE } tesectiontype; typedef enum { CONFLDAPHOST, CONFLDAPPORT, CONFROOTDN, CONFROOTPW, CONFMODFILE, CONFADDFILE, CONFONLINEUPDATE, CONFOFFLINEUPDATE, CONFONLINEERRFATAL, CONFICONV, CONFLDIFCHARSET, CONFLDAPCHARSET, CONFSCHEMACHECK, CONFSCHEMABASE, CONFSCHEMAFILTER, CONFSCHEMAATTRIBUTE, CONFBASEDN, CONFFILTER, CONFGROUP, CONFIGNORE, CONFIGNOREVAL, CONFNOEQUALITY, CONFMAPALIAS, CONFDELETEENTRY, CONFDELETEATTRIBUTE, CONFMODIFYBYDELADD, CONFADDENTRY, CONFNONE } tevarid; typedef enum { LOG0, /* print non fatal errors */ LOG1, /* print statistics */ LOG2 /* print debug informations */ } teloglevel; typedef enum { ATTRCHECK, ATTRIGNORE } teignore; typedef enum { MODATTRADD, MODATTRREPLACE, MODATTRDELETE } temodentry; typedef enum { MODADD, MODMODIFY, MODDELETE } temod; typedef enum { ATTRASC, ATTRBIN, ATTRUNKNOWN, ATTREMPTY } teattrtype; /* structure for config variables */ struct s_conf { char *section; tesectiontype sectiontype; tevarid varid; char *var; char *val; }; /* pointered list of ldap values */ struct s_ldifval { char *val; /* attribute value */ size_t val_len; /* attribute value len */ struct s_ldifval *next; }; /* pointered list of ldif attributes */ struct s_ldifentry { char *var; /* attribute name */ teattrtype val_type; /* attribute type */ struct s_ldifval *vallist; /* attribute value(s) */ struct s_ldifentry *next; /* pointer to next attribute */ }; /* pointered list of ldif entries */ struct s_ldif { char *dnvar; /* dn name (normally "dn") */ char *dnval; /* dn value */ struct s_ldifentry *attrlist; /* pointer to attributes list */ struct s_ldif *next; /* pointer to next entry */ }; /* pointered list of modify attribuites */ struct s_modentry { char *var; /* attribute name */ teattrtype val_type; /* attribute type */ temodentry modtype; struct s_ldifval *vallist; struct s_modentry *next; }; /* pointered list of modify entries */ struct s_mod { char *dnvar; char *dnval; temod modtype; struct s_modentry *attrlist; struct s_mod *next; }; /* pointered list of schema attributes */ struct s_schema { char *var; char **at_names; char *at_equality_oid; int at_single_value; struct s_schema *next; }; /* file ldaread.c */ extern void ldifread(struct s_ldif**,char*); /* file ldapiter.c */ extern void ldifiterldif(LDAP*,struct s_ldif*,struct s_mod**,struct s_schema*); extern void ldifiterldap(LDAP*,struct s_ldif*,struct s_mod**,struct s_schema*); /* file ldapcmp.c */ extern void ldifcmp(LDAP*,struct s_ldif*,struct s_ldif*,struct s_mod**,struct s_schema*); extern void ldifadddn(struct s_ldif*,struct s_mod**); extern void ldifdeletedn(char*,char*,struct s_mod**); /* file lapwrite.c */ extern void ldifwrite(struct s_mod*,struct s_schema*); /* file ldapmisc.c */ extern char *ldifnormalizedn(char*); extern struct s_ldif* ldifadd(struct s_ldif**,char*,char*); extern void ldifaddentry(struct s_ldif*,char*,char*,size_t,teattrtype); extern void ldiffree(struct s_ldif**); extern void *ldifalloc(size_t,size_t,char*,int); extern char *ldifdup(char*,char*,int); extern char *ldifbindup(char*,size_t,char*,int); extern int ldifgetfilter(struct s_ldifentry*,char*); extern int ldifconfnormalize(char*,char*,char*); extern void ldiftrim(char*); extern int ldifgetfacility(char*); extern teignore ldifcheckignore(char*); extern teignore ldifcheckignoreval(char*); extern int ldifchecknoequality(char*); extern char *ldifcheckalias(char*); extern int ldifcheckbase(char*); /* file ldaplog.c */ extern void ldiflogval(teloglevel,char*,char*,char*,size_t); extern void ldiflog(teloglevel,char*,...); extern void ldiflogbin(teloglevel,char*,...); /* file ldapconf.c */ extern void ldifinitconf(char*); extern char *ldifgetgconf(tevarid); extern char *ldifgetpconf(tevarid); /* file ldapmod.c */ extern int ldifmodify(LDAP*,struct s_mod*,struct s_schema*); /* file ldapstats.c */ extern void ldifstats(struct s_mod*); /* file ldapiconv.c */ extern void ldificonvopen(); extern int ldificonv(char**,char**); extern void ldificonvclose(); /* file ldapparse.c */ extern int ldifparse(char*,char**,char**,size_t*,teattrtype*); /* file ldapschema.c */ extern void ldifschemacreate(LDAP*,struct s_schema**); extern void ldifschemafree(struct s_schema**); extern int ldifschemaequal(struct s_schema*,char*); extern char *ldifschemarattr(struct s_schema*,char*); extern void ldifschemareplacealiases(struct s_ldif*,struct s_schema*);