Add support for different login styles, and environment variable
[become] / src / class.c
index 7a7d016..990822d 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: class.c,v 1.2 1997/08/04 10:24:21 mdw Exp $
+ * $Id: class.c,v 1.5 1997/08/20 16:16:13 mdw Exp $
  *
  * Handling classes of things nicely
  *
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: class.c,v $
+ * Revision 1.5  1997/08/20 16:16:13  mdw
+ * Patch memory leak.  Don't try to trace when tracing's turned off.
+ *
+ * Revision 1.4  1997/08/07 09:56:37  mdw
+ * (Log entry for previous version is bogus.)  Minor changes to host
+ * checking code.
+ *
  * Revision 1.2  1997/08/04 10:24:21  mdw
  * Sources placed under CVS control.
  *
@@ -152,6 +159,7 @@ void class_dec(classdef *c)
 {
   if (c != class_all && !--c->ref) {
     sym_destroyTable(c->t);
+    free(c->t);
     free(c);
   }
 }
@@ -251,10 +259,9 @@ int class_hostMatch(classdef *c, struct in_addr addr)
       T( trace(TRACE_CHECK, "check: couldn't translate address (erk!)"); )
       return (0);
     }
-    if ((he = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET)) == 0) {
+
+    if ((he = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET)) == 0)
       T( trace(TRACE_CHECK, "check: couldn't resolve hostname for %s", a); )
-      return (0);
-    }
 
     /* --- Now search the list for a match --- *
      *
@@ -271,22 +278,25 @@ int class_hostMatch(classdef *c, struct in_addr addr)
        return (1);
       }
 
-      /* --- Now try the host's main name --- */
+      if (he) {
 
-      if (class__wildMatch(s->name, he->h_name)) {
-       T( trace(TRACE_CHECK, "check: host name `%s' matched by `%s'",
-                he->h_name, s->name); )
-       return (1);
-      }
-
-      /* --- Now go through all the names --- */
+       /* --- Now try the host's main name --- */
 
-      for (p = he->h_aliases; *p; p++) {
-       if (class__wildMatch(s->name, *p)) {
-         T( trace(TRACE_CHECK, "check: host alias `%s' matched by `%s'",
-                  *p, s->name); )
+       if (class__wildMatch(s->name, he->h_name)) {
+         T( trace(TRACE_CHECK, "check: host name `%s' matched by `%s'",
+                  he->h_name, s->name); )
          return (1);
        }
+
+       /* --- Now go through all the names --- */
+
+       for (p = he->h_aliases; *p; p++) {
+         if (class__wildMatch(s->name, *p)) {
+           T( trace(TRACE_CHECK, "check: host alias `%s' matched by `%s'",
+                    *p, s->name); )
+           return (1);
+         }
+       }
       }
     }
 
@@ -307,6 +317,7 @@ int class_hostMatch(classdef *c, struct in_addr addr)
 
 void class_dump(classdef *c)
 {
+#ifdef TRACING
   sym_iter i;
   sym_base *s;
 
@@ -327,6 +338,7 @@ void class_dump(classdef *c)
   }
   else
     trace(TRACE_RULE, "    ALL");
+#endif
 }
 
 /*----- That's all, folks -------------------------------------------------*/