Re: old user rules are not cleared in nessusd

Thomas Arendsen Hein <[email protected]> Fri, 26 Nov 2004 15:46:27 +0100
Newsgroups gmane.comp.security.nessus.devel
Message-ID <[email protected]>
* Thomas Arendsen Hein <[email protected]> [20041126 10:40]:
> It seems there is a problem with my patch which causes a segfault in
> the server thread responsible for the connection sending rules.

My patch was ok, but rules_dup was broken (as documented in the
nessusd log).

Attached is a patch which fixes it, since the patch isn't very
readable, here the complete rules_dup function:


struct nessus_rules *
rules_dup(struct nessus_rules *source)
{
  struct nessus_rules *target = NULL;

  if(source)
  {
    target = memcpy(emalloc(sizeof(struct nessus_rules)),
		    source, sizeof(struct nessus_rules));
    target->next = rules_dup(source->next);
  }
  return target;
}


Renaud, do I have the permission to commit both patches?

Thomas

-- 
Email: [email protected]
http://intevation.de/~thomas/

_______________________________________________
Nessus-devel mailing list
[email protected]
http://mail.nessus.org/mailman/listinfo/nessus-devel
nessusd-rules_dup.patch (text/plain, 1.1 KB)
Index: nessusd/rules.c
===================================================================
RCS file: /usr/local/cvs/nessus-core/nessusd/rules.c,v
retrieving revision 1.26
diff -u -r1.26 rules.c
--- nessusd/rules.c	27 Oct 2004 13:00:39 -0000	1.26
+++ nessusd/rules.c	26 Nov 2004 14:41:26 -0000
@@ -179,28 +179,19 @@
  fclose(f);
 }
 
+
 struct nessus_rules *
-rules_dup_aux(s, r)
-  struct nessus_rules * s, *r;
+rules_dup(struct nessus_rules *source)
 {
-  printf("rules_dup called - does not work\n");
-  if(!s->next)return r;
-  else
+  struct nessus_rules *target = NULL;
+
+  if(source)
   {
-    r->ip.s_addr = s->ip.s_addr;
-    r->mask = s->mask;
-    r->rule = s->rule;
-    r->not = s->not;
-    r->def  = s->def;
-    r->next = emalloc(sizeof(*r));
-    return rules_dup_aux(s->next,r->next);
+    target = memcpy(emalloc(sizeof(struct nessus_rules)),
+		    source, sizeof(struct nessus_rules));
+    target->next = rules_dup(source->next);
   }
-}
-struct nessus_rules *
-rules_dup(struct nessus_rules *s)
-{
-  struct nessus_rules * r = emalloc(sizeof(*r));
-  return rules_dup_aux(s, r);
+  return target;
 }
signature.asc (application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)

iD8DBQFBp0HCW7P1GVgWeRoRAv2BAJsGIYWlTinhiLfjlil5AGCLHa6rlwCfVVMe
KsqG2bCuSGWDKrjZakLQul4=
=6l/H
-----END PGP SIGNATURE-----