remove obsolete mail, cn and sn speed-up
This commit is contained in:
@@ -10,9 +10,6 @@
|
||||
static const char* findattr(struct ldaprec* f,struct string* name) {
|
||||
int i;
|
||||
if (!matchstring(name,"dn")) return f->dn;
|
||||
if (!matchstring(name,"mail")) return f->mail;
|
||||
if (!matchstring(name,"sn")) return f->sn;
|
||||
if (!matchstring(name,"cn")) return f->cn;
|
||||
for (i=0; i<ATTRIBS; ++i)
|
||||
if (!matchstring(name,f->a[i].name))
|
||||
return f->a[i].value;
|
||||
|
||||
2
ldif.h
2
ldif.h
@@ -9,7 +9,7 @@ struct attribute {
|
||||
};
|
||||
|
||||
struct ldaprec {
|
||||
long dn, mail, sn, cn; /* most often encountered records */
|
||||
long dn;
|
||||
int n; /* number of attributes */
|
||||
struct attribute a[ATTRIBS];
|
||||
struct ldaprec* next;
|
||||
|
||||
13
ldif_parse.c
13
ldif_parse.c
@@ -12,15 +12,12 @@
|
||||
mduptab_t attributes,classes;
|
||||
mstorage_t stringtable;
|
||||
|
||||
long dn, mail, sn, cn, objectClass;
|
||||
long dn, objectClass;
|
||||
|
||||
unsigned long ldifrecords;
|
||||
|
||||
static void addattribute(struct ldaprec** l,long name,long val) {
|
||||
if (name==dn) (*l)->dn=val; else
|
||||
if (name==mail) (*l)->mail=val; else
|
||||
if (name==sn) (*l)->sn=val; else
|
||||
if (name==cn) (*l)->cn=val; else {
|
||||
if ((*l)->n<ATTRIBS) {
|
||||
(*l)->a[(*l)->n].name=name;
|
||||
(*l)->a[(*l)->n].value=val;
|
||||
@@ -29,7 +26,6 @@ static void addattribute(struct ldaprec** l,long name,long val) {
|
||||
buffer_putsflush(buffer_2,"LDIF parse error: too many attributes!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* "ou=fnord; O=fefe; c=de" -> "ou=fnord,o=fefe,c=de" */
|
||||
@@ -60,7 +56,7 @@ static int parserec(buffer* b, struct ldaprec** l) {
|
||||
char buf[8192];
|
||||
int n,i,eof=0,ofs=0;
|
||||
if (!(*l=malloc(sizeof(struct ldaprec)))) return 2;
|
||||
(*l)->dn=(*l)->mail=(*l)->sn=(*l)->cn=-1;
|
||||
(*l)->dn=-1;
|
||||
(*l)->next=0; (*l)->n=0;
|
||||
ldifrecords=0;
|
||||
do {
|
||||
@@ -102,7 +98,7 @@ lookagain:
|
||||
addattribute(l,tmp,val);
|
||||
|
||||
(*l)->next=m;
|
||||
m->n=0; m->dn=m->mail=m->sn=m->cn=-1; m->next=0;
|
||||
m->n=0; m->dn=-1; m->next=0;
|
||||
ofs=0;
|
||||
// dumprec(*l);
|
||||
l=&((*l)->next);
|
||||
@@ -141,9 +137,6 @@ int ldif_parse(const char* filename) {
|
||||
buffer in=BUFFER_INIT(read,fd,buf,sizeof buf);
|
||||
if (fd<0) return 1;
|
||||
dn=mduptab_add(&attributes,"dn");
|
||||
mail=mduptab_add(&attributes,"mail");
|
||||
sn=mduptab_add(&attributes,"sn");
|
||||
cn=mduptab_add(&attributes,"cn");
|
||||
objectClass=mduptab_add(&attributes,"objectClass");
|
||||
{
|
||||
int res=parserec(&in,&first);
|
||||
|
||||
39
parse.c
39
parse.c
@@ -27,21 +27,6 @@ void dumprec(struct ldaprec* l) {
|
||||
buffer_puts(buffer_1,"\n");
|
||||
} else
|
||||
buffer_puts(buffer_1,"no dn?!\n");
|
||||
if (l->mail>=0) {
|
||||
buffer_puts(buffer_1,"mail: ");
|
||||
buffer_puts(buffer_1,stringtable.root+l->mail);
|
||||
buffer_puts(buffer_1,"\n");
|
||||
}
|
||||
if (l->sn>=0) {
|
||||
buffer_puts(buffer_1,"sn: ");
|
||||
buffer_puts(buffer_1,stringtable.root+l->sn);
|
||||
buffer_puts(buffer_1,"\n");
|
||||
}
|
||||
if (l->cn>=0) {
|
||||
buffer_puts(buffer_1,"cn: ");
|
||||
buffer_puts(buffer_1,stringtable.root+l->cn);
|
||||
buffer_puts(buffer_1,"\n");
|
||||
}
|
||||
for (i=0; i<l->n; ++i) {
|
||||
buffer_puts(buffer_1,attributes.strings.root+l->a[i].name);
|
||||
buffer_puts(buffer_1,": ");
|
||||
@@ -89,9 +74,6 @@ int main() {
|
||||
dumprec(x);
|
||||
return 1;
|
||||
}
|
||||
if (x->mail>=0) len+=8;
|
||||
if (x->sn>=0) len+=8;
|
||||
if (x->cn>=0) len+=8;
|
||||
for (i=0; i<x->n; ++i) {
|
||||
len+=8;
|
||||
if (x->a[i].name==objectClass) oc=1;
|
||||
@@ -158,12 +140,7 @@ int main() {
|
||||
uint32_t* record_offsets=alloca(4*record_count);
|
||||
uint32_t cur=0;
|
||||
while (x) {
|
||||
// char* old=dest;
|
||||
int i=x->n+1;
|
||||
if (x->mail>=0) ++i;
|
||||
if (x->sn>=0) ++i;
|
||||
if (x->cn>=0) ++i;
|
||||
// fdprintf(2,"writing record \"%s\": ",map+x->dn+offset_stringtable);
|
||||
record_offsets[cur]=dest-map; ++cur;
|
||||
uint32_pack(dest,i); uint32_pack(dest+4,0); dest+=8;
|
||||
uint32_pack(dest,x->dn+offset_stringtable);
|
||||
@@ -175,21 +152,6 @@ int main() {
|
||||
}
|
||||
}
|
||||
dest+=8;
|
||||
if (x->mail>=0) {
|
||||
uint32_pack(dest,mail+offset_attributes);
|
||||
uint32_pack(dest+4,x->mail+offset_stringtable);
|
||||
dest+=8;
|
||||
}
|
||||
if (x->sn>=0) {
|
||||
uint32_pack(dest,sn+offset_attributes);
|
||||
uint32_pack(dest+4,x->sn+offset_stringtable);
|
||||
dest+=8;
|
||||
}
|
||||
if (x->cn>=0) {
|
||||
uint32_pack(dest,cn+offset_attributes);
|
||||
uint32_pack(dest+4,x->cn+offset_stringtable);
|
||||
dest+=8;
|
||||
}
|
||||
for (i=0; i<x->n; ++i) {
|
||||
if (x->a[i].name>=0) {
|
||||
uint32_pack(dest,x->a[i].name+offset_attributes);
|
||||
@@ -200,7 +162,6 @@ int main() {
|
||||
dest+=8;
|
||||
}
|
||||
}
|
||||
// fdprintf(2,"length %d\n",dest-old);
|
||||
x=x->next;
|
||||
}
|
||||
// fdprintf(2,"actual offset of record_index: %lu\n",dest-map);
|
||||
|
||||
Reference in New Issue
Block a user