From sancho at topcog.com Tue Mar 6 18:13:48 2012 From: sancho at topcog.com (Bruce A. Johnson) Date: Tue, 06 Mar 2012 12:13:48 -0500 Subject: Link error building with gcrypt Message-ID: <4F5645CC.1050505@topcog.com> I apologize for asking such a basic question, but I'm trying to compile a program that uses the gcrypt library, and I can't get to square one. The linker seems to be unable to find gcry_check_version, even though I have gcrypt-dev installed. > [bjohnson at brn-601 ~/fubar/src]% make > gcc -g -O2 -L/lib/i386-linux-gnu -lgcrypt -o fubar fubar.o > fubar.o: In function `main': > /home/bjohnson/fubar/src/fubar.c:13: undefined reference to `gcry_check_version' > collect2: ld returned 1 exit status > make: *** [fubar] Error 1 > [bjohnson at brn-601 ~/fubar/src]% ls -l /lib/i386-linux-gnu/*gcrypt* > -rw-r--r-- 1 root root 817420 2011-07-11 08:19 /lib/i386-linux-gnu/libgcrypt.a > lrwxrwxrwx 1 root root 19 2011-07-11 08:19 /lib/i386-linux-gnu/libgcrypt.so -> libgcrypt.so.11.7.0 > lrwxrwxrwx 1 root root 19 2012-01-03 12:54 /lib/i386-linux-gnu/libgcrypt.so.11 -> libgcrypt.so.11.7.0 > -rw-r--r-- 1 root root 541100 2011-07-11 08:19 /lib/i386-linux-gnu/libgcrypt.so.11.7.0 > [bjohnson at brn-601 ~/fubar/src]% nm /lib/i386-linux-gnu/libgcrypt.a | grep gcry_check_version > U _gcry_check_version > 00000060 T gcry_check_version > 00000250 T _gcry_check_version This is on a Linux Mint 12 system. Can anyone suggest what I'm missing here? Thanks! -- Bruce A. Johnson Herndon, Virginia From komh78 at gmail.com Fri Mar 9 14:08:05 2012 From: komh78 at gmail.com (KO Myung-Hun) Date: Fri, 9 Mar 2012 22:08:05 +0900 Subject: [PATCH] Add OS/2 entropy gatherer Message-ID: <1331298485-37379-1-git-send-email-komh@chollian.net> --- configure.ac | 20 ++++ doc/Makefile.am | 6 +- random/rand-internal.h | 6 + random/random-csprng.c | 5 + random/rndos2.c | 252 ++++++++++++++++++++++++++++++++++++++++++++++++ src/hmac256.c | 9 +- tests/fipsdrv.c | 4 + 7 files changed, 296 insertions(+), 6 deletions(-) create mode 100644 random/rndos2.c diff --git a/configure.ac b/configure.ac index cf4a082..1f0c27a 100644 --- a/configure.ac +++ b/configure.ac @@ -197,6 +197,7 @@ LIBGCRYPT_THREAD_MODULES="" print_egd_notice=no have_w32_system=no have_w32ce_system=no +have_os2_system=no have_pthread=no @@ -227,8 +228,10 @@ case "${host}" in i?86-emx-os2 | i?86-*-os2*emx) # OS/2 with the EMX environment ac_cv_have_dev_random=no + have_os2_system=yes AC_DEFINE(HAVE_DRIVE_LETTERS) AC_DEFINE(HAVE_DOSISH_SYSTEM) + LDFLAGS="$LDFLAGS -no-undefined -Zbin-files" ;; i?86-*-msdosdjgpp*) @@ -271,6 +274,11 @@ fi AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes) AM_CONDITIONAL(HAVE_W32CE_SYSTEM, test "$have_w32ce_system" = yes) +if test "$have_os2_system" = yes; then + AC_DEFINE(HAVE_OS2_SYSTEM,1, [Defined if we run on an OS/2 API based system]) +fi +AM_CONDITIONAL(HAVE_OS2_SYSTEM, test "$have_os2_system" = yes) + # A printable OS Name is sometimes useful. @@ -882,6 +890,11 @@ if test "$random" = "default"; then # Windows random device. random_modules="w32" ;; + + *-emx-os2 | *-*-os2*emx) + # OS/2 random device. + random_modules="os2" + ;; *) # Build everything, allow to select at runtime. random_modules="$auto_random_modules" @@ -1190,6 +1203,13 @@ if test "$found" = "1" ; then [Defined if the WindowsCE specific RNG should be used.]) fi +LIST_MEMBER(os2, $random_modules) +if test "$found" = "1" ; then + GCRYPT_RANDOM="$GCRYPT_RANDOM rndos2.lo" + AC_DEFINE(USE_RNDOS2, 1, + [Defined if the OS/2 specific RNG should be used.]) +fi + AC_SUBST([GCRYPT_CIPHERS]) AC_SUBST([GCRYPT_PUBKEY_CIPHERS]) AC_SUBST([GCRYPT_DIGESTS]) diff --git a/doc/Makefile.am b/doc/Makefile.am index a6bd2ae..451d42f 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -24,7 +24,7 @@ EXTRA_DIST = README.apichanges HACKING \ yat2m.c DISTCLEANFILES = gcrypt.cps yat2m-stamp.tmp yat2m-stamp $(myman_pages) -CLEANFILES = yat2m +CLEANFILES = yat2m$(EXEEXT) BUILT_SOURCES = libgcrypt-modules.eps fips-fsm.eps \ libgcrypt-modules.png fips-fsm.png \ @@ -41,7 +41,7 @@ myman_pages = hmac256.1 man_MANS = $(myman_pages) -yat2m: yat2m.c +yat2m$(EXEEXT): yat2m.c $(CC_FOR_BUILD) -o $@ $(srcdir)/yat2m.c .fig.png: @@ -64,7 +64,7 @@ yat2m-stamp: $(myman_sources) `test -f '$$file' || echo '$(srcdir)/'`$$file ; done @mv -f yat2m-stamp.tmp $@ -yat2m-stamp: yat2m +yat2m-stamp: yat2m$(EXEEXT) $(myman_pages) : yat2m-stamp @if test -f $@; then :; else \ diff --git a/random/rand-internal.h b/random/rand-internal.h index a04a2d4..5b2b3be 100644 --- a/random/rand-internal.h +++ b/random/rand-internal.h @@ -132,6 +132,12 @@ void _gcry_rndw32ce_gather_random_fast (void (*add)(const void*, size_t, enum random_origins), enum random_origins origin ); +/*-- rndos2.c --*/ +int _gcry_rndos2_gather_random (void (*add) (const void *, size_t, + enum random_origins), + enum random_origins origin, + size_t length, int level); + /*-- rndhw.c --*/ int _gcry_rndhw_failed_p (void); void _gcry_rndhw_poll_fast (void (*add)(const void*, size_t, diff --git a/random/random-csprng.c b/random/random-csprng.c index 50357d1..e22d873 100644 --- a/random/random-csprng.c +++ b/random/random-csprng.c @@ -1151,6 +1151,11 @@ getfnc_gather_random (void))(void (*)(const void*, size_t, return fnc; #endif +#if USE_RNDOS2 + fnc = _gcry_rndos2_gather_random; + return fnc; +#endif + log_fatal (_("no entropy gathering module detected\n")); return NULL; /*NOTREACHED*/ diff --git a/random/rndos2.c b/random/rndos2.c new file mode 100644 index 0000000..4e1589f --- /dev/null +++ b/random/rndos2.c @@ -0,0 +1,252 @@ +/* rndos2.c - OS/2 entropy gatherer + * Copyright (C) 2012 KO Myung-Hun + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +#include + +#define INCL_DOS +#define INCL_DOSERRORS +#include + +#include +#include + +#include +#include + +#include "types.h" +#include "g10lib.h" +#include "rand-internal.h" + +#define ADD( buf, bufsize, origin, remain ) \ + do { \ + int n = ( bufsize ) < ( remain ) ? ( bufsize ) : ( remain ); \ + add( buf, n, origin ); \ + ( remain ) -= n; \ + } while( 0 ) + +#define BUF_SIZE_REQUESTER ( sizeof( unsigned long ) * 30 ) +#define BUF_SIZE_SERVER ( sizeof( unsigned long ) * 17 ) +#define BUF_SIZE_IFMIB ( sizeof( struct ifmib )) +#define BUF_SIZE_CPUUTIL ( sizeof( ULONG ) * 8 ) +#define BUF_SIZE_SYS_STATE ( 64 * 1024 ) +#define BUF_SIZE_SYS_STATE_DELTA 4096 +#define BUF_SIZE_SYS_STATE_MARGIN 1024 + +static HMODULE hmodNetApi32; +static HMODULE hmodTcpIp32; +static HMODULE hmodDosCalls; + +static unsigned APIENTRY ( *pfnNet32StatisticsGet2 )( + const unsigned char *, const unsigned char *, + unsigned long, unsigned long, unsigned long, + unsigned char *, unsigned long, + unsigned long * ); + +static int _System ( *pfnsocket )( int, int, int ); +static int _System ( *pfnos2_ioctl )( int, unsigned long, char *, int ); +static int _System ( *pfnsoclose )( int ); + +static APIRET APIENTRY ( *pfnDosPerfSysCall )( ULONG, ULONG, ULONG, ULONG ); +static APIRET APIENTRY ( *pfnDosQuerySysState )( ULONG, ULONG, PID, TID, PVOID, + ULONG ); + +int +_gcry_rndos2_gather_random( void ( *add )( const void *, size_t, + enum random_origins ), + enum random_origins origin, size_t length, + int level ) +{ + static BOOL fInit = FALSE; + static ULONG ulCpuCount = 1; + + unsigned char *buf; + ULONG rc; + + if( !level ) + return 0; + + /* We never block, assume level 2. */ + + if( !fInit ) + { + CHAR szFail[ 260 ]; + + hmodNetApi32 = NULLHANDLE; + if( !DosLoadModule( szFail, sizeof( szFail ), "netapi32", + &hmodNetApi32 )) + { + if( DosQueryProcAddr( hmodNetApi32, 125, NULL, + ( PFN * )&pfnNet32StatisticsGet2 )) + { + DosFreeModule( hmodNetApi32 ); + + hmodNetApi32 = NULLHANDLE; + } + } + + hmodTcpIp32 = NULLHANDLE; + if( !DosLoadModule( szFail, sizeof( szFail ), "tcpip32", + &hmodTcpIp32 )) + { + rc = DosQueryProcAddr( hmodTcpIp32, 16, NULL, + ( PFN * )&pfnsocket ); + + if( !rc ) + rc = DosQueryProcAddr( hmodTcpIp32, 17, NULL, + ( PFN * )&pfnsoclose ); + + if( !rc ) + rc = DosQueryProcAddr( hmodTcpIp32, 200, NULL, + ( PFN * )&pfnos2_ioctl ); + + if( rc ) + { + DosFreeModule( hmodTcpIp32 ); + + hmodTcpIp32 = NULLHANDLE; + } + } + + hmodDosCalls = NULLHANDLE; + if( !DosLoadModule( szFail, sizeof( szFail ), "doscalls", + &hmodDosCalls )) + { + if( DosQueryProcAddr( hmodDosCalls, 976, NULL, + ( PFN * )&pfnDosPerfSysCall )) + pfnDosPerfSysCall = NULL; + else + /* Query CPU count */ + pfnDosPerfSysCall( 0x41, 0, ( ULONG )&ulCpuCount, 0 ); + + if( DosQueryProcAddr( hmodDosCalls, 368, NULL, + ( PFN * )&pfnDosQuerySysState )) + pfnDosQuerySysState = NULL; + + if( !pfnDosPerfSysCall && !pfnDosQuerySysState ) + { + DosFreeModule( hmodDosCalls ); + + hmodDosCalls = NULLHANDLE; + } + } + + fInit = TRUE; + } + + while( length ) + { + if( hmodNetApi32 ) + { + ULONG ulAvail; + + buf = gcry_xmalloc( BUF_SIZE_REQUESTER ); + + if( !pfnNet32StatisticsGet2( NULL, "REQUESTER", 0, 0, 1, buf, + BUF_SIZE_REQUESTER, &ulAvail )) + ADD( buf, BUF_SIZE_REQUESTER, origin, length ); + + gcry_free( buf ); + + buf = gcry_xmalloc( BUF_SIZE_SERVER ); + + if( !pfnNet32StatisticsGet2( NULL, "SERVER", 0, 0, 1, buf, + BUF_SIZE_SERVER, &ulAvail )) + ADD( buf, BUF_SIZE_SERVER, origin, length ); + + gcry_free( buf ); + } + + if( hmodTcpIp32 ) + { + int s; + + s = pfnsocket( PF_INET, SOCK_RAW, 0 ); + + if( s != -1 ) + { + buf = gcry_xmalloc( BUF_SIZE_IFMIB ); + + if( !pfnos2_ioctl( s, SIOSTATIF, ( caddr_t )buf, + BUF_SIZE_IFMIB )) + ADD( buf, BUF_SIZE_IFMIB, origin, length ); + + gcry_free( buf ); + + pfnsoclose( s ); + } + } + + if( hmodDosCalls ) + { + if( pfnDosPerfSysCall ) + { + buf = gcry_xcalloc( ulCpuCount, BUF_SIZE_CPUUTIL ); + + /* Query CPU utilization snapshot */ + if( !pfnDosPerfSysCall( 0x63, ( ULONG )buf, 0, 0 )) + ADD( buf, BUF_SIZE_CPUUTIL * ulCpuCount, origin, length ); + + gcry_free( buf ); + } + + if( pfnDosQuerySysState ) + { + size_t bufSize = BUF_SIZE_SYS_STATE; + + /* Allocate additional memory because DosQuerySysState() + sometimes seems to overwrite to a memory boundary. */ + buf = gcry_xmalloc( bufSize + BUF_SIZE_SYS_STATE_MARGIN ); + + do + { + /* Query all the system information supported by OS */ + rc = DosQuerySysState( QS_SUPPORTED, 0, 0, 0, ( PCHAR )buf, + bufSize ); + if( rc == ERROR_BUFFER_OVERFLOW ) + { + bufSize += BUF_SIZE_SYS_STATE_DELTA; + gcry_free( buf ); + buf = gcry_xmalloc( bufSize + + BUF_SIZE_SYS_STATE_MARGIN ); + } + } while( rc == ERROR_BUFFER_OVERFLOW ); + + if( !rc ) + ADD( buf, bufSize, origin, length ); + + gcry_free( buf ); + } + } + +#define ADD_QSV( ord ) \ + do { \ + ULONG ulSV; \ + DosQuerySysInfo( ord, ord, &ulSV, sizeof( ulSV )); \ + ADD( &ulSV, sizeof( ulSV ), origin, length ); \ + } while( 0 ) + + /* Fail safe */ + ADD_QSV( QSV_MS_COUNT ); + ADD_QSV( QSV_TIME_LOW ); + ADD_QSV( QSV_TIME_HIGH ); + ADD_QSV( QSV_TOTAVAILMEM ); + ADD_QSV( QSV_FOREGROUND_FS_SESSION ); + ADD_QSV( QSV_FOREGROUND_PROCESS ); + } + + return 0; +} diff --git a/src/hmac256.c b/src/hmac256.c index 34def76..a887e99 100644 --- a/src/hmac256.c +++ b/src/hmac256.c @@ -52,7 +52,10 @@ #include #include #include -#if defined(__WIN32) && defined(STANDALONE) +#if (defined(__WIN32) || defined(__OS2__)) && defined(STANDALONE) +# ifdef __OS2__ +# include +# endif # include /* We need setmode(). */ #endif @@ -658,7 +661,7 @@ main (int argc, char **argv) int use_binary = 0; assert (sizeof (u32) == 4); -#ifdef __WIN32 +#if defined(__WIN32) || defined(__OS2__) setmode (fileno (stdin), O_BINARY); #endif @@ -707,7 +710,7 @@ main (int argc, char **argv) exit (1); } -#ifdef __WIN32 +#if defined(__WIN32) || defined(__OS2__) if (use_binary) setmode (fileno (stdout), O_BINARY); #endif diff --git a/tests/fipsdrv.c b/tests/fipsdrv.c index 2d4c362..d1be32d 100644 --- a/tests/fipsdrv.c +++ b/tests/fipsdrv.c @@ -29,6 +29,10 @@ #ifdef HAVE_W32_SYSTEM # include /* We need setmode(). */ #else +# ifdef HAVE_DOSISH_SYSTEM +# include /* We need setmode(). */ +# include /* We need O_BINARY */ +# endif # include #endif #include -- 1.7.3.2 From wk at gnupg.org Thu Mar 22 16:29:46 2012 From: wk at gnupg.org (Werner Koch) Date: Thu, 22 Mar 2012 16:29:46 +0100 Subject: [PATCH] Add OS/2 entropy gatherer In-Reply-To: <1331298485-37379-1-git-send-email-komh@chollian.net> (KO Myung-Hun's message of "Fri, 9 Mar 2012 22:08:05 +0900") References: <1331298485-37379-1-git-send-email-komh@chollian.net> Message-ID: <87vclwy7oq.fsf@vigenere.g10code.de> Hi, although I used OS/2 a lot in the past, my last experience was in 1999 and that was helping out with a legacy project. I don't think that we should have support for OS/2 in Libgcrypt, proper. However, if you want to maintain an unofficial branch for OS/2 in our repo, we can do that. That would also not require any copyright assignments. Salam-Shalom, Werner -- Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz. From komh78 at gmail.com Fri Mar 23 05:40:55 2012 From: komh78 at gmail.com (KO Myung-Hun) Date: Fri, 23 Mar 2012 13:40:55 +0900 Subject: [PATCH] Add OS/2 entropy gatherer In-Reply-To: <87vclwy7oq.fsf@vigenere.g10code.de> References: <1331298485-37379-1-git-send-email-komh@chollian.net> <87vclwy7oq.fsf@vigenere.g10code.de> Message-ID: <4F6BFED7.4020400@gmail.com> Hi/2. Werner Koch wrote: > Hi, > > although I used OS/2 a lot in the past, my last experience was in 1999 > and that was helping out with a legacy project. I don't think that we > should have support for OS/2 in Libgcrypt, proper. However, if you want > to maintain an unofficial branch for OS/2 in our repo, we can do that. Do you mean 'fork' ? Or 'merge' OS/2 codes to the official source tree, but the binaries for OS/2 are not distributed ? Anyway, I willing to maintain OS/2 codes. > That would also not require any copyright assignments. > Good. And I attach the updated patches. -- KO Myung-Hun Using Mozilla SeaMonkey 2.0.14 Under OS/2 Warp 4 for Korean with FixPak #15 On AMD ThunderBird 1GHz with 512 MB RAM Korean OS/2 User Community : http://www.ecomstation.co.kr -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: 0001-Add-OS-2-entropy-gatherer.patch URL: From wk at gnupg.org Fri Mar 23 09:42:32 2012 From: wk at gnupg.org (Werner Koch) Date: Fri, 23 Mar 2012 09:42:32 +0100 Subject: [PATCH] Add OS/2 entropy gatherer In-Reply-To: <4F6BFED7.4020400@gmail.com> (KO Myung-Hun's message of "Fri, 23 Mar 2012 13:40:55 +0900") References: <1331298485-37379-1-git-send-email-komh@chollian.net> <87vclwy7oq.fsf@vigenere.g10code.de> <4F6BFED7.4020400@gmail.com> Message-ID: <87r4wjyah3.fsf@vigenere.g10code.de> On Fri, 23 Mar 2012 05:40, komh78 at gmail.com said: > Or 'merge' OS/2 codes to the official source tree, but the binaries for > OS/2 are not distributed ? I mean that we can out a separate OS/2 ranch into our GIT repo and you take care of maintaining it. We won't do any releases for it; that would be your task. The advantage of having it in the official repro is that it gives your project a better visibility. > Anyway, I willing to maintain OS/2 codes. What about this: I create an OS2-BRANCH from 1.6 (master) and you send me patches for that one. I suggest to use master and not 1.5. Shalom-Salam, Werner -- Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz. From komh78 at gmail.com Fri Mar 23 10:50:01 2012 From: komh78 at gmail.com (KO Myung-Hun) Date: Fri, 23 Mar 2012 18:50:01 +0900 Subject: [PATCH] Add OS/2 entropy gatherer In-Reply-To: <87r4wjyah3.fsf@vigenere.g10code.de> References: <1331298485-37379-1-git-send-email-komh@chollian.net> <87vclwy7oq.fsf@vigenere.g10code.de> <4F6BFED7.4020400@gmail.com> <87r4wjyah3.fsf@vigenere.g10code.de> Message-ID: <4F6C4749.2050605@gmail.com> Hi/2. Werner Koch wrote: > On Fri, 23 Mar 2012 05:40, komh78 at gmail.com said: > >> Or 'merge' OS/2 codes to the official source tree, but the binaries for >> OS/2 are not distributed ? > > I mean that we can out a separate OS/2 ranch into our GIT repo and you > take care of maintaining it. We won't do any releases for it; that > would be your task. The advantage of having it in the official repro is > that it gives your project a better visibility. > Ok. >> Anyway, I willing to maintain OS/2 codes. > > What about this: I create an OS2-BRANCH from 1.6 (master) and you send > me patches for that one. I suggest to use master and not 1.5. > No problem. And I'm using master. Am I wrong ? -- KO Myung-Hun Using Mozilla SeaMonkey 2.0.14 Under OS/2 Warp 4 for Korean with FixPak #15 On AMD ThunderBird 1GHz with 512 MB RAM Korean OS/2 User Community : http://www.ecomstation.co.kr From wk at gnupg.org Tue Mar 27 07:21:30 2012 From: wk at gnupg.org (Werner Koch) Date: Tue, 27 Mar 2012 07:21:30 +0200 Subject: [PATCH] Add OS/2 entropy gatherer In-Reply-To: <4F6C4749.2050605@gmail.com> (KO Myung-Hun's message of "Fri, 23 Mar 2012 18:50:01 +0900") References: <1331298485-37379-1-git-send-email-komh@chollian.net> <87vclwy7oq.fsf@vigenere.g10code.de> <4F6BFED7.4020400@gmail.com> <87r4wjyah3.fsf@vigenere.g10code.de> <4F6C4749.2050605@gmail.com> Message-ID: <878vimvcth.fsf@vigenere.g10code.de> On Fri, 23 Mar 2012 10:50, komh78 at gmail.com said: > And I'm using master. Am I wrong ? Fine. I applied your patch to the OS2-BRANCH. I also added a note to the README file telling that this is an unofficial port. If you have further patches, please send them to the list (if they are small <40KB or so) or larger ones directly to me. Despite that the unofficial state, I suggest to follow the suggestion on how to write commit log messages from doc/HACKING. Salam-Shalom, Werner -- Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz. From komh78 at gmail.com Sat Mar 31 14:30:32 2012 From: komh78 at gmail.com (KO Myung-Hun) Date: Sat, 31 Mar 2012 21:30:32 +0900 Subject: [PATCH] Add OS/2 entropy gatherer In-Reply-To: <878vimvcth.fsf@vigenere.g10code.de> References: <1331298485-37379-1-git-send-email-komh@chollian.net> <87vclwy7oq.fsf@vigenere.g10code.de> <4F6BFED7.4020400@gmail.com> <87r4wjyah3.fsf@vigenere.g10code.de> <4F6C4749.2050605@gmail.com> <878vimvcth.fsf@vigenere.g10code.de> Message-ID: <4F76F8E8.8080406@chollian.net> Werner Koch wrote: > On Fri, 23 Mar 2012 10:50, komh78 at gmail.com said: > >> And I'm using master. Am I wrong ? > > Fine. I applied your patch to the OS2-BRANCH. I also added a note to > the README file telling that this is an unofficial port. If you have > further patches, please send them to the list (if they are small <40KB > or so) or larger ones directly to me. > Thanks for your work. BTW, I cannot find the log for a my patch and the modified README. 'git log origin/OS2-BRANCH' say nothing about them. What's wrong ? > Despite that the unofficial state, I suggest to follow the suggestion on > how to write commit log messages from doc/HACKING. > Ok. -- KO Myung-Hun Using Mozilla SeaMonkey 2.0.14 Under OS/2 Warp 4 for Korean with FixPak #15 On AMD ThunderBird 1GHz with 512 MB RAM Korean OS/2 User Community : http://www.ecomstation.co.kr