* rndegd.c (rndegd_constructor): Fixed name of register function
authorWerner Koch <wk@gnupg.org>
Fri, 17 May 2002 08:33:21 +0000 (08:33 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 17 May 2002 08:33:21 +0000 (08:33 +0000)
and prefixed the function name with _gcry_.
* rndw32.c (rndw32_constructor): Ditto.
* tiger.c (tiger_constructor): Ditto.

* Makefile.am: Removed all dynamic loading stuff.
* dynload.c: Ditto. Now only used for the constructor system.

cipher/ChangeLog
cipher/Makefile.am
cipher/dynload.c
cipher/rndegd.c
cipher/rndw32.c
cipher/tiger.c
src/cipher.h
src/missing-string.c

index 326f56a..648a429 100644 (file)
@@ -1,3 +1,13 @@
+2002-05-17  Werner Koch  <wk@gnupg.org>
+
+       * rndegd.c (rndegd_constructor): Fixed name of register function
+       and prefixed the function name with _gcry_.
+       * rndw32.c (rndw32_constructor): Ditto.
+       * tiger.c (tiger_constructor): Ditto.
+
+       * Makefile.am: Removed all dynamic loading stuff.
+       * dynload.c: Ditto. Now only used for the constructor system.
+
 2002-05-15  Werner Koch  <wk@gnupg.org>
 
        * random.c (gcry_random_bytes,gcry_random_bytes_secure)
index ba451d2..49c5389 100644 (file)
@@ -40,15 +40,6 @@ EXTRA_sha1_SOURCES = sha1.c
 EXTRA_tiger_SOURCES = tiger.c
 
 
-if ENABLE_GNUPG_EXTENSIONS
-pkglib_PROGRAMS  = @DYNAMIC_CIPHER_MODS@
-else
-pkglib_PROGRAMS  =
-endif
-
-
-DYNLINK_MOD_CFLAGS = -DIS_MODULE @DYNLINK_MOD_CFLAGS@
-
 libcipher_la_LDFLAGS =
 libcipher_la_SOURCES = cipher.c  \
                 pubkey.c       \
@@ -82,50 +73,15 @@ BUILT_SOURCES = construct.c
 DISTCLEANFILES = construct.c
 
 libcipher_la_DEPENDENCIES = @STATIC_CIPHER_OBJS@
-libcipher_la_LIBADD =    @STATIC_CIPHER_OBJS@
-
-
-# We could to something like 
-#   tiger_SOURCES = tiger.c
-#   tiger_CFLAGS = $(DYNLINK_MOD_CFLAGS)
-# but I have not yet figured out on how to suppress the link step.
-# this is probably a libtool thing.
-
-#if BUILD_MODULE_TIGER
-tiger$(EXEEXT): $(srcdir)/tiger.c
-       `echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o tiger $(srcdir)/tiger.c | \
-           sed -e 's/-O[2-9s]*/-O/g' `
-#endif
+libcipher_la_LIBADD =      @STATIC_CIPHER_OBJS@
 
+# We need to lower the optimization for this module.
 tiger.o: $(srcdir)/tiger.c
        `echo $(COMPILE) -c $(srcdir)/tiger.c | sed -e 's/-O[2-9s]*/-O1/g' `
 
-#twofish: $(srcdir)/twofish.c
-#       `echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o twofish $(srcdir)/twofish.c | \
-#           sed -e 's/-O[0-9s]*/  /g' `
-
-#if BUILD_MODULE_TWOFISH
-twofish$(EXEEXT): $(srcdir)/twofish.c
-       $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o twofish $(srcdir)/twofish.c
-#endif
-
-#twofish.o: $(srcdir)/twofish.c
-#       `echo $(COMPILE) -c $(srcdir)/twofish.c | sed -e 's/-O[0-9s]*/  /g' `
-
-#if BUILD_MODULE_RNDUNIX
-rndunix$(EXEEXT): $(srcdir)/rndunix.c
-       $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndunix $(srcdir)/rndunix.c
-#endif
-
-#if BUILD_MODULE_RNDLINUX
-rndlinux$(EXEEXT): $(srcdir)/rndlinux.c
-       $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndlinux $(srcdir)/rndlinux.c
-#endif
+tiger.lo: $(srcdir)/tiger.c
+       `echo $(LTCOMPILE) -c $(srcdir)/tiger.c | sed -e 's/-O[2-9s]*/-O1/g' `
 
-#if BUILD_MODULE_RNDEGD
-rndegd$(EXEEXT): $(srcdir)/rndegd.c
-       $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndegd $(srcdir)/rndegd.c
-#endif
 
 
 
index a34c288..711468a 100644 (file)
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  */
 
+/*
+ Note: We don't support dynamically loaded modules anymore.  This
+ would be troublesome for thread-safety and it is better done by the
+ application.  One of the next releases will have an API to support
+ additional ciphers.
+*/
+
+
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#ifdef HAVE_DL_DLOPEN
-  #include <dlfcn.h>
-#elif defined(HAVE_DLD_DLD_LINK)
-  #include <dld.h>
-#elif defined(HAVE_DL_SHL_LOAD)
-  #include <dl.h>
-  #include <errno.h>
-#endif
 #include "g10lib.h"
 #include "cipher.h"
 #include "dynload.h"
 
-#ifdef WITH_SYMBOL_UNDERSCORE
-  #define SYMBOL_VERSION "_gnupgext_version"
-  #define SYMBOL_ENUM   "_gnupgext_enum_func"
-#else
-  #define SYMBOL_VERSION "gnupgext_version"
-  #define SYMBOL_ENUM   "gnupgext_enum_func"
-#endif
-
-
-#ifndef RTLD_NOW
-  #define RTLD_NOW  1
-#endif
-
-#ifdef HAVE_DL_SHL_LOAD  /* HPUX has shl_load instead of dlopen */
-#define HAVE_DL_DLOPEN
-#define dlopen(PATHNAME,MODE) \
-    ((void *) shl_load(PATHNAME, DYNAMIC_PATH | \
-             (((MODE) & RTLD_NOW) ? BIND_IMMEDIATE : BIND_DEFERRED), 0L))
-#define dlclose(HANDLE) shl_unload((shl_t) (HANDLE))
-#define dlerror() (errno == 0 ? NULL : strerror(errno))
-
-static void *
-dlsym(void *handle, char *name)
-{
-    void *addr;
-    if (shl_findsym((shl_t *)&handle,name,(short)TYPE_UNDEFINED,&addr) != 0) {
-      return NULL;
-    }
-    return addr;
-}
-#endif /*HAVE_DL_SHL_LOAD*/
-
-
 
 typedef struct ext_list {
     struct ext_list *next;
     int internal;
-  #ifdef HAVE_DL_DLOPEN
-    void *handle; /* handle from dlopen() */
-  #else
     int handle;   /* if the function has been loaded, this is true */
-  #endif
     int  failed;  /* already tried but failed */
     void * (*enumfunc)(int, int*, int*, int*);
     char *hintstr; /* pointer into name */
@@ -94,86 +57,6 @@ typedef struct {
 } ENUMCONTEXT;
 
 
-#ifdef HAVE_DLD_DLD_LINK
-static char *mainpgm_path;
-static int did_dld_init;
-static int dld_available;
-#endif
-
-
-static int
-cmp_filenames( const char *a, const char *b )
-{
-    /* ? check whether this is an absolute filename and
-     * resolve symlinks?
-     */
-  #ifdef HAVE_DRIVE_LETTERS
-    return stricmp(a,b);
-  #else
-    return strcmp(a,b);
-  #endif
-}
-
-
-/****************
- * Register an extension module.  The last registered module will
- * be loaded first.  A name may have a list of classes
- * appended; e.g:
- *     mymodule.so(1:17,3:20,3:109)
- * means that this module provides digest algorithm 17 and public key
- * algorithms 20 and 109.  This is only a hint but if it is there the
- * loader may decide to only load a module which claims to have a
- * requested algorithm.
- *
- * mainpgm is the path to the program which wants to load a module
- * it is only used in some environments.
- */
-void
-_gcry_register_cipher_extension( const char *mainpgm, const char *fname )
-{
-    EXTLIST r, el, intex;
-    char *p, *pe;
-
-  #ifdef HAVE_DLD_DLD_LINK
-    if( !mainpgm_path && mainpgm && *mainpgm )
-       mainpgm_path = m_strdup(mainpgm);
-  #endif
-    el = gcry_xcalloc( 1, sizeof *el + strlen(fname) );
-    strcpy(el->name, fname );
-
-    /* check whether we have a class hint */
-    if( (p=strchr(el->name,'(')) && (pe=strchr(p+1,')')) && !pe[1] ) {
-       *p = *pe = 0;
-       el->hintstr = p+1;
-    }
-    else
-       el->hintstr = NULL;
-
-    /* check that it is not already registered */
-    intex = NULL;
-    for(r = extensions; r; r = r->next ) {
-       if( !cmp_filenames(r->name, el->name) ) {
-           log_info("extension `%s' already registered\n", el->name );
-           gcry_free(el);
-           return;
-       }
-       else if( r->internal )
-           intex = r;
-    }
-    /* and register */
-    /* we put them after the internal extension modules */
-    /* this is so that the external modules do not get loaded */
-    /* as soon as the internal modules are requested */
-    if( intex ) {
-       el->next = intex->next;
-       intex->next = el;
-    }
-    else {
-       el->next = extensions;
-       extensions = el;
-    }
-}
-
 void
 _gcry_register_internal_cipher_extension(
                        const char *module_id,
@@ -188,7 +71,7 @@ _gcry_register_internal_cipher_extension(
 
     /* check that it is not already registered */
     for(r = extensions; r; r = r->next ) {
-       if( !cmp_filenames(r->name, el->name) ) {
+       if( !strcmp (r->name, el->name) ) {
            log_info("extension `%s' already registered\n", el->name );
            gcry_free(el);
            return;
@@ -196,11 +79,7 @@ _gcry_register_internal_cipher_extension(
     }
     /* and register */
     el->enumfunc = enumfunc;
-  #ifdef HAVE_DL_DLOPEN
-    el->handle = (void*)1;
-  #else
     el->handle = 1;
-  #endif
     el->next = extensions;
     extensions = el;
 }
@@ -209,132 +88,6 @@ _gcry_register_internal_cipher_extension(
 static int
 load_extension( EXTLIST el )
 {
-  #ifdef USE_DYNAMIC_LINKING
-    char **name;
-  #ifdef HAVE_DL_DLOPEN
-    const char *err;
-    int seq = 0;
-    int class, vers;
-    void *sym;
-  #else
-    unsigned long addr;
-    int rc;
-  #endif
-
-    /* make sure we are not setuid */
-    if( getuid() != geteuid() )
-       log_bug("trying to load an extension while still setuid\n");
-
-    /* now that we are not setuid anymore, we can safely load modules */
-  #ifdef HAVE_DL_DLOPEN
-    el->handle = dlopen(el->name, RTLD_NOW);
-    if( !el->handle ) {
-       log_error("%s: error loading extension: %s\n", el->name, dlerror() );
-       goto failure;
-    }
-    name = (char**)dlsym(el->handle, SYMBOL_VERSION);
-    if( (err=dlerror()) ) {
-       log_error("%s: not a gnupg extension: %s\n", el->name, err );
-       goto failure;
-    }
-  #else /* have dld */
-    if( !did_dld_init ) {
-       did_dld_init = 1;
-       if( !mainpgm_path )
-           log_error("DLD is not correctly initialized\n");
-       else {
-           rc = dld_init( dld_find_executable(mainpgm_path) );
-           if( rc )
-               log_error("DLD init failed: %s\n", dld_strerror(rc) );
-           else
-               dld_available = 1;
-       }
-    }
-    if( !dld_available ) {
-       log_error("%s: DLD not available\n", el->name );
-       goto failure;
-    }
-
-    rc = dld_link( el->name );
-    if( rc ) {
-       log_error("%s: error loading extension: %s\n",
-                                   el->name, dld_strerror(rc) );
-       goto failure;
-    }
-    addr = dld_get_symbol(SYMBOL_VERSION);
-    if( !addr ) {
-       log_error("%s: not a gnupg extension: %s\n",
-                               el->name, dld_strerror(dld_errno) );
-       goto failure;
-    }
-    name = (char**)addr;
-  #endif
-
-    if( _gcry_log_verbosity( 2 ) )
-       log_info("%s: %s%s%s%s\n", el->name, *name,
-                 el->hintstr? " (":"",
-                 el->hintstr? el->hintstr:"",
-                 el->hintstr? ")":"");
-
-  #ifdef HAVE_DL_DLOPEN
-    sym = dlsym(el->handle, SYMBOL_ENUM);
-    if( (err=dlerror()) ) {
-       log_error("%s: invalid gnupg extension: %s\n", el->name, err );
-       goto failure;
-    }
-    el->enumfunc = (void *(*)(int,int*,int*,int*))sym;
-  #else /* dld */
-    addr = dld_get_func(SYMBOL_ENUM);
-    if( !addr ) {
-       log_error("%s: invalid gnupg extension: %s\n",
-                               el->name, dld_strerror(dld_errno) );
-       goto failure;
-    }
-    rc = dld_function_executable_p(SYMBOL_ENUM);
-    if( rc ) {
-       log_error("%s: extension function is not executable: %s\n",
-                                       el->name, dld_strerror(rc) );
-       goto failure;
-    }
-    el->enumfunc = (void *(*)(int,int*,int*,int*))addr;
-    el->handle = 1; /* mark as usable */
-  #endif
-
-  #ifdef HAVE_DL_DLOPEN
-    if( _gcry_log_verbosity( 3 ) ) {
-       /* list the contents of the module */
-       while( (sym = (*el->enumfunc)(0, &seq, &class, &vers)) ) {
-           if( vers != 1 ) {
-               log_info("%s: ignoring func with version %d\n",el->name,vers);
-               continue;
-           }
-           switch( class ) {
-             case 11:
-             case 21:
-             case 31:
-               log_info("%s: provides %s algorithm %d\n", el->name,
-                               class == 11? "md"     :
-                               class == 21? "cipher" : "pubkey",
-                                                      *(int*)sym);
-               break;
-             default:
-               /*log_debug("%s: skipping class %d\n", el->name, class);*/
-               break;
-           }
-       }
-    }
-  #endif
-    return 0;
-
-  failure:
-  #ifdef HAVE_DL_DLOPEN
-    if( el->handle ) {
-       dlclose(el->handle);
-       el->handle = NULL;
-    }
-  #endif
-    el->failed = 1;
-  #endif /*USE_DYNAMIC_LINKING*/
     return -1;
 }
 
index 176e73d..8dd705d 100644 (file)
@@ -62,7 +62,7 @@ my_make_filename( const char *first_part, ... )
                           && (home = getenv("HOME")) && *home )
        n += strlen(home);
 
-    name = m_alloc(n);
+    name = gcry_malloc(n);
     p = home ? stpcpy(stpcpy(name,home), first_part+1)
             : stpcpy(name, first_part);
     va_start( arg_ptr, first_part ) ;
@@ -145,7 +145,9 @@ gather_random( void (*add)(const void*, size_t, int), int requester,
        }
     }
     if( fd == -1 ) {
+#if __GNUC__ >= 2
        #warning Fixme: make the filename configurable
+#endif
        char *name = my_make_filename( "~/.gnupg-test", "entropy", NULL );
        struct sockaddr_un addr;
        int addr_len;
@@ -259,10 +261,20 @@ gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
 
 #ifndef IS_MODULE
 void
-rndegd_constructor(void)
+_gcry_rndegd_constructor(void)
 {
-    register_internal_cipher_extension( gnupgext_version,
-                                       gnupgext_enum_func );
+  _gcry_register_internal_cipher_extension (gnupgext_version,
+                                            gnupgext_enum_func);
 }
 #endif
 
+
+
+
+
+
+
+
+
+
+
index 028797f..4cc4009 100644 (file)
@@ -177,7 +177,7 @@ load_and_init_winseed( void )
     /*log_info("fast buffer size=%u\n", n2);*/
 
     entropy_buffer_size =  n1 > n2? n1: n2;
-    entropy_buffer = m_alloc( entropy_buffer_size );
+    entropy_buffer = gcry_xmalloc( entropy_buffer_size );
     /*log_info("using a buffer of size=%u\n", entropy_buffer_size );*/
 
     return;
@@ -676,7 +676,7 @@ slow_gatherer_windowsNT( void (*add)(const void*, size_t, int), int requester )
      * worst-case estimate which is usually nowhere near the actual amount
      * required.  For example it may report that 128K of memory is required,
      * but only return 64K of data */
-    {  pPerfData =  m_alloc (cbPerfData);
+    {  pPerfData =  gcry_xmalloc (cbPerfData);
        for (;;) {
            dwSize = cbPerfData;
            if ( debug_me )
@@ -942,10 +942,10 @@ gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
 
 #ifndef IS_MODULE
 void
-rndw32_constructor(void)
+_gcry_rndw32_constructor(void)
 {
-    register_internal_cipher_extension( gnupgext_version,
-                                       gnupgext_enum_func );
+  _gcry_register_internal_cipher_extension( gnupgext_version,
+                                            gnupgext_enum_func );
 }
 #endif
 
index 4392d9a..e179c35 100644 (file)
@@ -949,10 +949,10 @@ gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
 
 #ifndef IS_MODULE
 void
-tiger_constructor(void)
+_gcry_tiger_constructor(void)
 {
-    register_internal_cipher_extension( gnupgext_version,
-                                       gnupgext_enum_func );
+  _gcry_register_internal_cipher_extension( gnupgext_version,
+                                            gnupgext_enum_func );
 }
 #endif
 
index 9369e31..c857be7 100644 (file)
@@ -60,9 +60,6 @@
 #define is_ELGAMAL(a) ((a)==PUBKEY_ALGO_ELGAMAL || (a)==PUBKEY_ALGO_ELGAMAL_E)
 
 
-/*-- dynload.c --*/
-void _gcry_register_cipher_extension( const char *mainpgm, const char *fname );
-
 /*-- rmd160.c --*/
 void _gcry_rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length );
 
index f9c5df1..9978903 100644 (file)
@@ -114,7 +114,7 @@ strcasecmp( const char *a, const char *b )
 #ifdef __MINGW32__
 /* 
  * Like vsprintf but provides a pointer to malloc'd storage, which
- * must be freed by the caller (m_free).  Taken from libiberty as
+ * must be freed by the caller (gcry_free).  Taken from libiberty as
  * found in gcc-2.95.2 and a little bit modernized.
  * FIXME: Write a new CRT for W32.
  */
@@ -198,7 +198,7 @@ vasprintf ( char **result, const char *format, va_list args)
            }
        }
     }
-  *result = m_alloc (total_width);
+  *result = gcry_malloc (total_width);
   if (*result != NULL)
     return vsprintf (*result, format, args);
   else