Sfoglia il codice sorgente

* Trying to figure out this pesky bug ;/

svn: 721
Bryan Drewery 22 anni fa
parent
commit
d0cbc25f26
4 ha cambiato i file con 53 aggiunte e 66 eliminazioni
  1. 4 26
      src/debug.c
  2. 49 4
      src/main.c
  3. 0 35
      src/misc.c
  4. 0 1
      src/misc.h

+ 4 - 26
src/debug.c

@@ -209,28 +209,23 @@ void write_debug()
 
 static void got_bus(int z)
 {
+  signal(SIGBUS, SIG_DFL);
 #ifdef DEBUG_CONTEXT
   write_debug();
 #endif
   fatal(STR("BUS ERROR -- CRASHING!"), 1);
-#ifdef SA_RESETHAND
   kill(getpid(), SIGBUS);
-#else
-  exit(1);
-#endif
 }
 
+
 static void got_segv(int z)
 {
+  signal(SIGSEGV, SIG_DFL);
 #ifdef DEBUG_CONTEXT
   write_debug();
 #endif
   fatal(STR("SEGMENT VIOLATION -- CRASHING!"), 1);
-#ifdef SA_RESETHAND
   kill(getpid(), SIGSEGV);
-#else
-  exit(1);
-#endif
 }
 
 static void got_fpe(int z)
@@ -251,15 +246,12 @@ static void got_term(int z)
 
 static void got_abort(int z)
 {
+  signal(SIGABRT, SIG_DFL);
 #ifdef DEBUG_CONTEXT
   write_debug();
 #endif
   fatal(STR("GOT SIGABRT -- CRASHING!"), 1);
-#ifdef SA_RESETHAND
   kill(getpid(), SIGSEGV);
-#else
-  exit(1);
-#endif
 }
 
 #ifdef S_HIJACKCHECK
@@ -291,22 +283,8 @@ static void got_ill(int z)
 
 void init_signals() 
 {
-#ifdef SA_RESETHAND
-  struct sigaction sv;
-
-  /* Set up error traps: */
-  sv.sa_handler = got_bus;
-  sigemptyset(&sv.sa_mask);
-  sv.sa_flags = SA_RESETHAND;
-  sigaction(SIGBUS, &sv, NULL);
-
-  sv.sa_handler = got_segv;
-  sigaction(SIGSEGV, &sv, NULL);
-#else /* !SA_RESETHAND */
   signal(SIGBUS, got_bus);
   signal(SIGSEGV, got_segv);
-#endif /* SA_RESETHAND */
-
   signal(SIGFPE, got_fpe);
   signal(SIGTERM, got_term);
 #ifdef S_HIJACKCHECK

+ 49 - 4
src/main.c

@@ -105,6 +105,46 @@ extern struct cfg_entry CFG_FORKINTERVAL;
 #define fork_interval atoi( CFG_FORKINTERVAL.ldata ? CFG_FORKINTERVAL.ldata : CFG_FORKINTERVAL.gdata ? CFG_FORKINTERVAL.gdata : "0")
 
 
+static char *getfullbinname(const char *argv_zero)
+{
+  char *cwd = NULL, *bin = NULL, *p = NULL, *p2 = NULL;
+
+  bin = strdup(argv_zero);
+
+  if (bin[0] == '/')
+    return bin;
+
+  if (!getcwd(cwd, DIRMAX))
+    fatal("BABY JESUS IS CRYING", 0);
+
+  cwd[DIRMAX] = 0;
+  if (cwd[strlen(cwd) - 1] == '/')
+    cwd[strlen(cwd) - 1] = 0;
+
+  p = bin;
+  p2 = strchr(p, '/');
+  while (p) {
+    if (p2)
+      *p2++ = 0;
+    if (!strcmp(p, "..")) {
+      p = strrchr(cwd, '/');
+      if (p)
+        *p = 0;
+    } else if (strcmp(p, ".")) {
+      strcat(cwd, "/");
+      strcat(cwd, p);
+    }
+    p = p2;
+    if (p)
+      p2 = strchr(p, '/');
+  }
+  str_redup(&bin, cwd);
+  free(cwd);
+printf("bin: %s\n", bin);
+  return bin;
+}
+
+
 /* Traffic stats
  */
 egg_traffic_t traffic;
@@ -231,14 +271,14 @@ static void show_help()
 #define FLAGS_CHECKPASS "CdDeEgGhkntv"
 static void dtx_arg(int argc, char *argv[])
 {
-  int i;
+  int i = 0;
 #ifdef LEAF
   int localhub_pid = 0;
 #endif /* LEAF */
   char *p = NULL;
-
-  opterr = 0;
+printf("PARSE_FLAGS: %s\n", PARSE_FLAGS);
   while ((i = getopt(argc, argv, PARSE_FLAGS)) != EOF) {
+printf("i: %c\n", i);
     if (strchr(FLAGS_CHECKPASS, i))
       checkpass();
     switch (i) {
@@ -541,7 +581,12 @@ int main(int argc, char **argv)
   lastmin = nowtm.tm_min;
   srandom(now % (getpid() + getppid()));
   myuid = geteuid();
+
+printf("%d: argc: %d %d\n", getpid(), argc, __LINE__);
+printf("argv[0]: %s\n", argv[0]);
   binname = getfullbinname(argv[0]);
+printf("argv[0]: %s :: binname: %s\n", argv[0], binname);
+printf("%d: argc: %d %d\n", getpid(), argc, __LINE__);
 #ifdef HUB
   egg_snprintf(userfile, 121, "%s/.u", confdir());
   egg_snprintf(tempdir, sizeof tempdir, "%s/tmp/", confdir());
@@ -730,7 +775,7 @@ int main(int argc, char **argv)
   }
 #endif /* LEAF */
 
-#if defined(LEAF) && defined(S_PSCLOAK)
+#if defined(LEAF) && defined(S_PSCLOAK) && defined(__linux__)
   if (conf.pscloak) {
     int on = 0;
     char *p = progname();

+ 0 - 35
src/misc.c

@@ -1145,41 +1145,6 @@ char *replace (char *string, char *oldie, char *newbie)
   return (newstring);
 }
 
-char *getfullbinname(char *argv0)
-{
-  char cwd[DIRMAX] = "", *bin = NULL, *p = NULL, *p2 = NULL;
-
-  bin = strdup(argv0);
-  if (bin[0] == '/') {
-    return bin;
-  }
-  getcwd(cwd, DIRMAX);
-  cwd[DIRMAX] = 0;
-  if (cwd[strlen(cwd) - 1] == '/')
-    cwd[strlen(cwd) - 1] = 0;
-
-  p = bin;
-  p2 = strchr(p, '/');
-  while (p) {
-    if (p2)
-      *p2++ = 0;
-    if (!strcmp(p, "..")) {
-      p = strrchr(cwd, '/');
-      if (p)
-        *p = 0;
-    } else if (strcmp(p, ".")) {
-      strcat(cwd, "/");
-      strcat(cwd, p);
-    }
-    p = p2;
-    if (p)
-      p2 = strchr(p, '/');
-  }
-  free(bin);
-  bin = strdup(cwd);
-  return bin;
-}
-
 void local_check_should_lock()
 {
   module_entry *me = NULL;

+ 0 - 1
src/misc.h

@@ -37,7 +37,6 @@ void showhelp(int, struct flag_record *, char *);
 char *btoh(const unsigned char *, int);
 void local_check_should_lock();
 int listen_all(int, int);
-char *getfullbinname(char *);
 char *replace(char *, char *, char *);
 int goodpass(char *, int, char *);
 void makeplaincookie(char *, char *, char *);