egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

eggdrop core dump on Solaris 2.7 and 2.9 (solution included)

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Modules & Programming
View previous topic :: View next topic  
Author Message
dioid
Voice


Joined: 30 Jan 2005
Posts: 2
Location: Sweden

PostPosted: Sun Jan 30, 2005 8:00 am    Post subject: eggdrop core dump on Solaris 2.7 and 2.9 (solution included) Reply with quote

Hi!

I have downloaded eggdrop 1.6.17 from ftp.eggheads.org and compiled it under Solaris 2.7 as well as 2.9. The problem is that the bot dumps core when trying to share user files shortly after trying to link to the hub bot.

By running gdb on the core file I found that the segmentation violation occurs in make_rand_str() which gets an erroneous string length (way too large). I think this happens when the bot generates a random password for the first time when it's linking to hub. It all boils down to randint() not working properly.

I have verified that you get results out of range from randint() by using the tcl command rand.

The problem is that RAND_MAX is 32767 which is max value that rand() returns, but random() is used and on Solaris random() will return an integer in the range 0 to 2**31 - 1.

By modifying the definition of randint() macro in main.h, changing RAND_MAX to 2147483647 (=2**31 - 1) it works as intended and I get no core dumps. Specifically the change is to change the row

#define randint(n) (unsigned long) (random() / (RAND_MAX + 1.0) * ((n) < 0 ? (-(n)) : (n)))

into

#define randint(n) (unsigned long) (random() / (2147483647 + 1.0) * ((n) < 0 ? (-(n)) : (n)))

This problem can be solved by either including a check for Solaris when using random() and not use RAND_MAX or by simply using rand() all the time.

Please let me know if I misunderstood anything.

Thanks,
dioid@EFNet
Back to top
View user's profile Send private message
Galadhrim
Op


Joined: 11 Apr 2003
Posts: 123
Location: Netherlands, Enschede

PostPosted: Tue Feb 01, 2005 9:41 am    Post subject: Reply with quote

As far as I know it is the only way to get things fixed. Solaris has alot of different settings and function definitions than other Unix variant.

If the eggdrop's ./configure sets a define for the operating system you can use that define in any of your eggdrop's source files and recompile. That way if you would ever move the eggdrop to another Unix variant you won't have to edit the sources again.

There is a define for SunOS 4 in the config.h file
Code:

/* Define if running on SunOS 4.0. */
/* #undef DLOPEN_1 */


Maybe you can make a check yourself in the aclocal.m4 file. Something like this:
Code:

dnl EGG_CHECK_OS()
dnl
dnl Various operating system tests.
dnl
AC_DEFUN([EGG_CHECK_OS],
[
  MOD_CC="$CC"
  MOD_LD="$CC"
  MOD_STRIP="$STRIP"
  SHLIB_CC="$CC"
  SHLIB_LD="$CC"
  SHLIB_STRIP="$STRIP"
  LINUX="no"
  IRIX="no"
  SUNOS="no"
  HPUX="no"
  EGG_CYGWIN="no"

  case "$egg_cv_var_system_type" in
    BSD/OS)
      case "`echo $egg_cv_var_system_release | cut -d . -f 1`" in
        2)
          # Fallthrough.
        ;;
        3)
          MOD_CC="shlicc"
          MOD_LD="shlicc"
          if test ! "$STRIP" = "touch"; then
            MOD_STRIP="$STRIP -d"
          fi
          SHLIB_LD="shlicc -r"
          SHLIB_STRIP="touch"
        ;;
        *)
          if test ! "$STRIP" = "touch"; then
            MOD_STRIP="$STRIP -d"
          fi
          SHLIB_CC="$CC -export-dynamic -fPIC"
          SHLIB_LD="$CC -shared -nostartfiles"
        ;;
      esac
    ;;
    CYGWI*)
      AC_PROG_CC_WIN32
      SHLIB_LD="$CC -shared"
      CC="$CC $WIN32FLAGS"
      MOD_CC="$CC"
      MOD_LD="$CC"
      EGG_CYGWIN="yes"
      EGG_CYGWIN_BINMODE
      AC_DEFINE(CYGWIN_HACKS, 1, [Define if running under Cygwin.])
    ;;
    HP-UX)
      HPUX="yes"
      if test "$CC" = "cc"; then
        # HP-UX ANSI C Compiler.
        MOD_LD="$CC +z"
        SHLIB_CC="$CC +z"
      else
        # GCC
        MOD_LD="$CC -fPIC -shared"
        SHLIB_CC="$CC -fPIC"
      fi
      SHLIB_LD="ld -b"
    ;;
    dell)
      SHLIB_STRIP="touch"
      MOD_LD="$CC -lelf -lucb"
    ;;
    IRIX)
      SHLIB_LD="ld -n32 -shared -rdata_shared"
      IRIX="yes"
      SHLIB_STRIP="touch"
    ;;
    Ultrix)
      SHLIB_STRIP="touch"
      DEFAULT_MAKE="static"
      SHELL="/bin/sh5"
    ;;
    SINIX*)
      SHLIB_STRIP="touch"
      SHLIB_CC="cc -G"
    ;;
    BeOS)
      # Fallthrough.
    ;;
    Linux)
      LINUX="yes"
      MOD_LD="$CC"
      SHLIB_CC="$CC -fPIC"
      SHLIB_LD="$CC -shared -nostartfiles"
    ;;
    Lynx)
      # Fallthrough.
    ;;
    QNX)
      SHLIB_LD="ld -shared"
    ;;
    OSF1)
      case "`echo $egg_cv_var_system_release | cut -d . -f 1`" in
        V*)
          # Digital OSF uses an ancient version of gawk
          if test "$AWK" = "gawk"; then
            AWK="awk"
          fi
          SHLIB_LD="ld -shared -expect_unresolved \"'*'\""
          SHLIB_STRIP="touch"
        ;;
        1.0|1.1|1.2)
          SHLIB_LD="ld -R -export $@:"
        ;;
        1.*)
          SHLIB_CC="$CC -fpic"
          SHLIB_LD="ld -shared"
        ;;
      esac
      AC_DEFINE(BROKEN_SNPRINTF, 1, [Define to use Eggdrop's snprintf functions regardless of HAVE_SNPRINTF.])
      AC_DEFINE(STOP_UAC, 1, [Define if running on OSF/1 platform.])
    ;;
    SunOS)
      if test "`echo $egg_cv_var_system_release | cut -d . -f 1`" = "5"; then
        # Solaris
        if test -n "$GCC"; then
          SHLIB_CC="$CC -fPIC"
          SHLIB_LD="$CC -shared"
        else
          SHLIB_CC="$CC -KPIC"
          SHLIB_LD="$CC -G -z text"
        fi
      else
        # SunOS 4
        SUNOS="yes"
        SHLIB_LD="ld"
        SHLIB_CC="$CC -PIC"
      fi
    ;;
    *BSD)
      # FreeBSD/OpenBSD/NetBSD
      SHLIB_CC="$CC -fPIC"
      SHLIB_LD="ld -Bshareable -x"
    ;;
    Darwin)
      # Mac OS X
      SHLIB_CC="$CC -fPIC"
      SHLIB_LD="ld -bundle -undefined error"
    ;;
    *)
      if test -r /mach; then
        # At this point, we're guessing this is NeXT Step.
        AC_DEFINE(BORGCUBES, 1, [Define if running on NeXT Step.])
      else
        if test -r /cmds; then
          # Probably QNX.
          SHLIB_LD="ld -shared"
          SHLIB_STRIP="touch"
        fi
      fi
    ;;
  esac

  AC_SUBST(MOD_LD)
  AC_SUBST(MOD_CC)
  AC_SUBST(MOD_STRIP)
  AC_SUBST(SHLIB_LD)
  AC_SUBST(SHLIB_CC)
  AC_SUBST(SHLIB_STRIP)
])

That way you only have to say ./configure and it's all fixed for your current Unix variant. If it works well try suggesting it to the eggheads and maybe they like the approach and theyll add it to the next version.

Imo it's good to to make a sort of check during ./configure that allows developers to use defines everywhere to make the eggdrop platform independant. Thus far it ok-ish, but problems like these will scare off people with less knowledge of C...

Sorry for the long post, I hoped it would make nice scrolling code boxes Rolling Eyes
Back to top
View user's profile Send private message
mike503
Voice


Joined: 15 Jun 2005
Posts: 1

PostPosted: Wed Jun 15, 2005 10:11 pm    Post subject: Reply with quote

i've been suffering from this problem for the past many eggdrop versions.

in fact, i couldn't even run a bot on that machine. but thanks to this info, i can. i tried a while ago to google for help but got nowhere.

this should be part of the next release of the eggdrop code!

works like a charm now.
Back to top
View user's profile Send private message
demond
Revered One


Joined: 12 Jun 2004
Posts: 3073
Location: San Francisco, CA

PostPosted: Thu Jun 16, 2005 12:19 am    Post subject: Reply with quote

mike503 wrote:

this should be part of the next release of the eggdrop code!


make sure it would, let the development team know about this, they don't follow these forums
Back to top
View user's profile Send private message Visit poster's website
dioid
Voice


Joined: 30 Jan 2005
Posts: 2
Location: Sweden

PostPosted: Tue Jun 21, 2005 4:10 am    Post subject: Reply with quote

I posted this to eggheads mailing list. Got a reply that a fix has been included in CVS build. So I downloaded lastest v1.6 nightly CVS snapshot and compiled, and it works fine. So I'm pretty sure it will be included in next release.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Modules & Programming All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber