home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ldapsdk.zip / libraries / libldap / friendly.c < prev    next >
C/C++ Source or Header  |  2000-07-05  |  2KB  |  123 lines

  1. /* $OpenLDAP: pkg/ldap/libraries/libldap/friendly.c,v 1.13.8.3 2000/07/04 17:58:51 kurt Exp $ */
  2. /*
  3.  * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
  4.  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  5.  */
  6. /*  Portions
  7.  *  Copyright (c) 1990 Regents of the University of Michigan.
  8.  *  All rights reserved.
  9.  *
  10.  *  friendly.c
  11.  */
  12.  
  13. #include "portable.h"
  14.  
  15. #include <stdio.h>
  16. #include <ac/stdlib.h>
  17.  
  18. #include <ac/errno.h>
  19. #include <ac/socket.h>
  20. #include <ac/string.h>
  21. #include <ac/time.h>
  22.  
  23. #include "ldap-int.h"
  24.  
  25. char *
  26. ldap_friendly_name(
  27.     LDAP_CONST char *filename,
  28.     /* LDAP_CONST */ char *uname,
  29.     LDAPFriendlyMap **map )
  30. {
  31.     int    i, entries;
  32.     FILE    *fp;
  33.     char    *s;
  34.     char    buf[BUFSIZ];
  35.  
  36.     if ( map == NULL ) {
  37.         errno = EINVAL;
  38.         return( uname );
  39.     }
  40.  
  41.     if ( *map == NULL ) {
  42.         if ( (fp = fopen( filename, "r" )) == NULL )
  43.             return( uname );
  44.  
  45.         entries = 0;
  46.         while ( fgets( buf, sizeof(buf), fp ) != NULL ) {
  47.             if ( buf[0] != '#' )
  48.                 entries++;
  49.         }
  50.         rewind( fp );
  51.  
  52.         if ( (*map = (LDAPFriendlyMap *) LDAP_MALLOC( (entries + 1) *
  53.             sizeof(LDAPFriendlyMap) )) == NULL ) {
  54.             fclose( fp );
  55.             return( uname );
  56.         }
  57.  
  58.         i = 0;
  59.         while ( fgets( buf, sizeof(buf), fp ) != NULL && i < entries ) {
  60.             if ( buf[0] == '#' )
  61.                 continue;
  62.  
  63.             if ( (s = strchr( buf, '\n' )) != NULL )
  64.                 *s = '\0';
  65.  
  66.             if ( (s = strchr( buf, '\t' )) == NULL )
  67.                 continue;
  68.             *s++ = '\0';
  69.  
  70.             if ( *s == '"' ) {
  71.                 int    esc = 0, found = 0;
  72.  
  73.                 for ( ++s; *s && !found; s++ ) {
  74.                     switch ( *s ) {
  75.                     case '\\':
  76.                         esc = 1;
  77.                         break;
  78.                     case '"':
  79.                         if ( !esc )
  80.                             found = 1;
  81.                         /* FALL */
  82.                     default:
  83.                         esc = 0;
  84.                         break;
  85.                     }
  86.                 }
  87.             }
  88.  
  89.             (*map)[i].lf_unfriendly = LDAP_STRDUP( buf );
  90.             (*map)[i].lf_friendly   = LDAP_STRDUP( s );
  91.             i++;
  92.         }
  93.  
  94.         fclose( fp );
  95.         (*map)[i].lf_unfriendly = NULL;
  96.     }
  97.  
  98.     for ( i = 0; (*map)[i].lf_unfriendly != NULL; i++ ) {
  99.         if ( strcasecmp( uname, (*map)[i].lf_unfriendly ) == 0 )
  100.             return( (*map)[i].lf_friendly );
  101.     }
  102.     return( uname );
  103. }
  104.  
  105.  
  106. void
  107. ldap_free_friendlymap( LDAPFriendlyMap **map )
  108. {
  109.     LDAPFriendlyMap* pF = *map;
  110.  
  111.     if ( pF == NULL )
  112.         return;
  113.  
  114.     while ( pF->lf_unfriendly )
  115.     {
  116.         LDAP_FREE( pF->lf_unfriendly );
  117.         LDAP_FREE( pF->lf_friendly );
  118.         pF++;
  119.     }
  120.     LDAP_FREE( *map );
  121.     *map = NULL;
  122. }
  123.