1 /* 2 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 #pragma ident "%Z%%M% %I% %E% SMI" 6 7 /* 8 * The contents of this file are subject to the Netscape Public 9 * License Version 1.1 (the "License"); you may not use this file 10 * except in compliance with the License. You may obtain a copy of 11 * the License at http://www.mozilla.org/NPL/ 12 * 13 * Software distributed under the License is distributed on an "AS 14 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 15 * implied. See the License for the specific language governing 16 * rights and limitations under the License. 17 * 18 * The Original Code is Mozilla Communicator client code, released 19 * March 31, 1998. 20 * 21 * The Initial Developer of the Original Code is Netscape 22 * Communications Corporation. Portions created by Netscape are 23 * Copyright (C) 1998-1999 Netscape Communications Corporation. All 24 * Rights Reserved. 25 * 26 * Contributor(s): 27 */ 28 /* 29 * Copyright (c) 1990 Regents of the University of Michigan. 30 * All rights reserved. 31 */ 32 /* 33 * friendly.c 34 */ 35 36 #if 0 37 #ifndef lint 38 static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of Michigan.\nAll rights reserved.\n"; 39 #endif 40 #endif 41 42 #include "ldap-int.h" 43 44 char * 45 LDAP_CALL 46 ldap_friendly_name( char *filename, char *name, FriendlyMap *map ) 47 { 48 int i, entries; 49 FILE *fp; 50 char *s; 51 char buf[BUFSIZ]; 52 53 if ( map == NULL ) { 54 return( name ); 55 } 56 if ( NULL == name) 57 { 58 return (name); 59 } 60 61 if ( *map == NULL ) { 62 if ( (fp = fopen( filename, "rF" )) == NULL ) 63 return( name ); 64 65 entries = 0; 66 while ( fgets( buf, sizeof(buf), fp ) != NULL ) { 67 if ( buf[0] != '#' ) 68 entries++; 69 } 70 rewind( fp ); 71 72 if ( (*map = (FriendlyMap)NSLDAPI_MALLOC( (entries + 1) * 73 sizeof(struct friendly) )) == NULL ) { 74 fclose( fp ); 75 return( name ); 76 } 77 78 i = 0; 79 while ( fgets( buf, sizeof(buf), fp ) != NULL && i < entries ) { 80 if ( buf[0] == '#' ) 81 continue; 82 83 if ( (s = strchr( buf, '\n' )) != NULL ) 84 *s = '\0'; 85 86 if ( (s = strchr( buf, '\t' )) == NULL ) 87 continue; 88 *s++ = '\0'; 89 90 if ( *s == '"' ) { 91 int esc = 0, found = 0; 92 93 for ( ++s; *s && !found; s++ ) { 94 switch ( *s ) { 95 case '\\': 96 esc = 1; 97 break; 98 case '"': 99 if ( !esc ) 100 found = 1; 101 /* FALL */ 102 default: 103 esc = 0; 104 break; 105 } 106 } 107 } 108 109 (*map)[i].f_unfriendly = nsldapi_strdup( buf ); 110 (*map)[i].f_friendly = nsldapi_strdup( s ); 111 i++; 112 } 113 114 fclose( fp ); 115 (*map)[i].f_unfriendly = NULL; 116 } 117 118 for ( i = 0; (*map)[i].f_unfriendly != NULL; i++ ) { 119 if ( strcasecmp( name, (*map)[i].f_unfriendly ) == 0 ) 120 return( (*map)[i].f_friendly ); 121 } 122 return( name ); 123 } 124 125 126 void 127 LDAP_CALL 128 ldap_free_friendlymap( FriendlyMap *map ) 129 { 130 struct friendly* pF; 131 132 if ( map == NULL || *map == NULL ) { 133 return; 134 } 135 136 for ( pF = *map; pF->f_unfriendly; pF++ ) { 137 NSLDAPI_FREE( pF->f_unfriendly ); 138 NSLDAPI_FREE( pF->f_friendly ); 139 } 140 NSLDAPI_FREE( *map ); 141 *map = NULL; 142 } 143