xref: /titanic_52/usr/src/lib/libldap5/sources/ldap/common/friendly.c (revision 004388ebfdfe2ed7dfd2d153a876dfcc22d2c006)
1*004388ebScasper /*
2*004388ebScasper  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
3*004388ebScasper  * Use is subject to license terms.
4*004388ebScasper  */
57c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
67c478bd9Sstevel@tonic-gate 
77c478bd9Sstevel@tonic-gate /*
87c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the Netscape Public
97c478bd9Sstevel@tonic-gate  * License Version 1.1 (the "License"); you may not use this file
107c478bd9Sstevel@tonic-gate  * except in compliance with the License. You may obtain a copy of
117c478bd9Sstevel@tonic-gate  * the License at http://www.mozilla.org/NPL/
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * Software distributed under the License is distributed on an "AS
147c478bd9Sstevel@tonic-gate  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
157c478bd9Sstevel@tonic-gate  * implied. See the License for the specific language governing
167c478bd9Sstevel@tonic-gate  * rights and limitations under the License.
177c478bd9Sstevel@tonic-gate  *
187c478bd9Sstevel@tonic-gate  * The Original Code is Mozilla Communicator client code, released
197c478bd9Sstevel@tonic-gate  * March 31, 1998.
207c478bd9Sstevel@tonic-gate  *
217c478bd9Sstevel@tonic-gate  * The Initial Developer of the Original Code is Netscape
227c478bd9Sstevel@tonic-gate  * Communications Corporation. Portions created by Netscape are
237c478bd9Sstevel@tonic-gate  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
247c478bd9Sstevel@tonic-gate  * Rights Reserved.
257c478bd9Sstevel@tonic-gate  *
267c478bd9Sstevel@tonic-gate  * Contributor(s):
277c478bd9Sstevel@tonic-gate  */
287c478bd9Sstevel@tonic-gate /*
297c478bd9Sstevel@tonic-gate  *  Copyright (c) 1990 Regents of the University of Michigan.
307c478bd9Sstevel@tonic-gate  *  All rights reserved.
317c478bd9Sstevel@tonic-gate  */
327c478bd9Sstevel@tonic-gate /*
337c478bd9Sstevel@tonic-gate  *  friendly.c
347c478bd9Sstevel@tonic-gate  */
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate #if 0
377c478bd9Sstevel@tonic-gate #ifndef lint
387c478bd9Sstevel@tonic-gate static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of Michigan.\nAll rights reserved.\n";
397c478bd9Sstevel@tonic-gate #endif
407c478bd9Sstevel@tonic-gate #endif
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate #include "ldap-int.h"
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate char *
457c478bd9Sstevel@tonic-gate LDAP_CALL
467c478bd9Sstevel@tonic-gate ldap_friendly_name( char *filename, char *name, FriendlyMap *map )
477c478bd9Sstevel@tonic-gate {
487c478bd9Sstevel@tonic-gate 	int	i, entries;
497c478bd9Sstevel@tonic-gate 	FILE	*fp;
507c478bd9Sstevel@tonic-gate 	char	*s;
517c478bd9Sstevel@tonic-gate 	char	buf[BUFSIZ];
527c478bd9Sstevel@tonic-gate 
537c478bd9Sstevel@tonic-gate 	if ( map == NULL ) {
547c478bd9Sstevel@tonic-gate 		return( name );
557c478bd9Sstevel@tonic-gate 	}
567c478bd9Sstevel@tonic-gate     if ( NULL == name)
577c478bd9Sstevel@tonic-gate     {
587c478bd9Sstevel@tonic-gate         return (name);
597c478bd9Sstevel@tonic-gate     }
607c478bd9Sstevel@tonic-gate 
617c478bd9Sstevel@tonic-gate 	if ( *map == NULL ) {
62*004388ebScasper 		if ( (fp = fopen( filename, "rF" )) == NULL )
637c478bd9Sstevel@tonic-gate 			return( name );
647c478bd9Sstevel@tonic-gate 
657c478bd9Sstevel@tonic-gate 		entries = 0;
667c478bd9Sstevel@tonic-gate 		while ( fgets( buf, sizeof(buf), fp ) != NULL ) {
677c478bd9Sstevel@tonic-gate 			if ( buf[0] != '#' )
687c478bd9Sstevel@tonic-gate 				entries++;
697c478bd9Sstevel@tonic-gate 		}
707c478bd9Sstevel@tonic-gate 		rewind( fp );
717c478bd9Sstevel@tonic-gate 
727c478bd9Sstevel@tonic-gate 		if ( (*map = (FriendlyMap)NSLDAPI_MALLOC( (entries + 1) *
737c478bd9Sstevel@tonic-gate 		    sizeof(struct friendly) )) == NULL ) {
747c478bd9Sstevel@tonic-gate 			fclose( fp );
757c478bd9Sstevel@tonic-gate 			return( name );
767c478bd9Sstevel@tonic-gate 		}
777c478bd9Sstevel@tonic-gate 
787c478bd9Sstevel@tonic-gate 		i = 0;
797c478bd9Sstevel@tonic-gate 		while ( fgets( buf, sizeof(buf), fp ) != NULL && i < entries ) {
807c478bd9Sstevel@tonic-gate 			if ( buf[0] == '#' )
817c478bd9Sstevel@tonic-gate 				continue;
827c478bd9Sstevel@tonic-gate 
837c478bd9Sstevel@tonic-gate 			if ( (s = strchr( buf, '\n' )) != NULL )
847c478bd9Sstevel@tonic-gate 				*s = '\0';
857c478bd9Sstevel@tonic-gate 
867c478bd9Sstevel@tonic-gate 			if ( (s = strchr( buf, '\t' )) == NULL )
877c478bd9Sstevel@tonic-gate 				continue;
887c478bd9Sstevel@tonic-gate 			*s++ = '\0';
897c478bd9Sstevel@tonic-gate 
907c478bd9Sstevel@tonic-gate 			if ( *s == '"' ) {
917c478bd9Sstevel@tonic-gate 				int	esc = 0, found = 0;
927c478bd9Sstevel@tonic-gate 
937c478bd9Sstevel@tonic-gate 				for ( ++s; *s && !found; s++ ) {
947c478bd9Sstevel@tonic-gate 					switch ( *s ) {
957c478bd9Sstevel@tonic-gate 					case '\\':
967c478bd9Sstevel@tonic-gate 						esc = 1;
977c478bd9Sstevel@tonic-gate 						break;
987c478bd9Sstevel@tonic-gate 					case '"':
997c478bd9Sstevel@tonic-gate 						if ( !esc )
1007c478bd9Sstevel@tonic-gate 							found = 1;
1017c478bd9Sstevel@tonic-gate 						/* FALL */
1027c478bd9Sstevel@tonic-gate 					default:
1037c478bd9Sstevel@tonic-gate 						esc = 0;
1047c478bd9Sstevel@tonic-gate 						break;
1057c478bd9Sstevel@tonic-gate 					}
1067c478bd9Sstevel@tonic-gate 				}
1077c478bd9Sstevel@tonic-gate 			}
1087c478bd9Sstevel@tonic-gate 
1097c478bd9Sstevel@tonic-gate 			(*map)[i].f_unfriendly = nsldapi_strdup( buf );
1107c478bd9Sstevel@tonic-gate 			(*map)[i].f_friendly = nsldapi_strdup( s );
1117c478bd9Sstevel@tonic-gate 			i++;
1127c478bd9Sstevel@tonic-gate 		}
1137c478bd9Sstevel@tonic-gate 
1147c478bd9Sstevel@tonic-gate 		fclose( fp );
1157c478bd9Sstevel@tonic-gate 		(*map)[i].f_unfriendly = NULL;
1167c478bd9Sstevel@tonic-gate 	}
1177c478bd9Sstevel@tonic-gate 
1187c478bd9Sstevel@tonic-gate 	for ( i = 0; (*map)[i].f_unfriendly != NULL; i++ ) {
1197c478bd9Sstevel@tonic-gate 		if ( strcasecmp( name, (*map)[i].f_unfriendly ) == 0 )
1207c478bd9Sstevel@tonic-gate 			return( (*map)[i].f_friendly );
1217c478bd9Sstevel@tonic-gate 	}
1227c478bd9Sstevel@tonic-gate 	return( name );
1237c478bd9Sstevel@tonic-gate }
1247c478bd9Sstevel@tonic-gate 
1257c478bd9Sstevel@tonic-gate 
1267c478bd9Sstevel@tonic-gate void
1277c478bd9Sstevel@tonic-gate LDAP_CALL
1287c478bd9Sstevel@tonic-gate ldap_free_friendlymap( FriendlyMap *map )
1297c478bd9Sstevel@tonic-gate {
1307c478bd9Sstevel@tonic-gate 	struct friendly* pF;
1317c478bd9Sstevel@tonic-gate 
1327c478bd9Sstevel@tonic-gate 	if ( map == NULL || *map == NULL ) {
1337c478bd9Sstevel@tonic-gate 		return;
1347c478bd9Sstevel@tonic-gate 	}
1357c478bd9Sstevel@tonic-gate 
1367c478bd9Sstevel@tonic-gate 	for ( pF = *map; pF->f_unfriendly; pF++ ) {
1377c478bd9Sstevel@tonic-gate 		NSLDAPI_FREE( pF->f_unfriendly );
1387c478bd9Sstevel@tonic-gate 		NSLDAPI_FREE( pF->f_friendly );
1397c478bd9Sstevel@tonic-gate 	}
1407c478bd9Sstevel@tonic-gate 	NSLDAPI_FREE( *map );
1417c478bd9Sstevel@tonic-gate 	*map = NULL;
1427c478bd9Sstevel@tonic-gate }
143