]> git.sur5r.net Git - openldap/blob - servers/slapd/suffixalias.c
Removed o_suffix and o_suffixalias as they were 1) leaked and 2) unused
[openldap] / servers / slapd / suffixalias.c
1 /*
2  * Copyright (c) 1998 Will Ballantyne, ITSD, Government of BC
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to ITSD, Government of BC. The name of ITSD
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  */
12
13 #include "portable.h"
14
15 #include <stdio.h>
16 #include <string.h>
17 #include <ac/socket.h>          /* Get struct sockaddr for slap.h */
18 #include "slap.h"
19
20 /* 
21  * given a dn (or root part), return an aliased dn if any of the 
22  * alias suffixes match
23  */
24 char *suffixAlias (char *dn, Operation *op, Backend *be)
25 {
26         int     i, dnLength;
27
28         if(dn == NULL) return NULL;
29
30         dnLength = strlen ( dn );
31         for ( i = 0;
32               be->be_suffixAlias != NULL && be->be_suffixAlias[i] != NULL;
33               i += 2) {
34                 int aliasLength = strlen (be->be_suffixAlias[i]);
35                 if (aliasLength > dnLength) {
36                         continue;
37                 }
38
39                 if (!strcasecmp(be->be_suffixAlias[i], 
40                                 dn + (dnLength - aliasLength))) {
41                         char *oldDN = dn;
42                         dn = ch_malloc ( (dnLength - aliasLength) +
43                                           strlen (be->be_suffixAlias[ i+1 ]) + 1);
44                         strncpy (dn, oldDN, dnLength - aliasLength);
45                         strcpy  (dn + (dnLength - aliasLength), be->be_suffixAlias[ i+1 ]);
46                         Debug( LDAP_DEBUG_ARGS, "ALIAS: converted %s to %s", oldDN, dn, 0);
47                         free (oldDN);
48                         break;
49                 }
50         }
51         return dn;
52 }