pull up r22403 from trunk
authorTom Yu <tlyu@mit.edu>
Mon, 28 Sep 2009 20:34:52 +0000 (20:34 +0000)
committerTom Yu <tlyu@mit.edu>
Mon, 28 Sep 2009 20:34:52 +0000 (20:34 +0000)
 ------------------------------------------------------------------------
 r22403 | epeisach | 2009-06-06 09:46:06 -0400 (Sat, 06 Jun 2009) | 9 lines

 ticket: 6509
 subject: kadmind is parsing acls good deref NULL pointer on error

 In kadm5int_acl_parse_line, if you setup an acl w/ restrictions
 (i.e. the four argument acl format) - but have an error parsing the
 first few fields, acle is NULLed out, and is then derefed.

 This adds a conditional and indents according to the krb5 c-style...

ticket: 6509
version_fixed: 1.7.1
status: resolved

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-7@22797 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/kadm5/srv/server_acl.c

index ec6fd9dd3939837800da0ce5ca43954b5fdaf554..af42fba89ad9a5bfe9d3aa67fb178bc46d38f0a4 100644 (file)
@@ -238,20 +238,24 @@ kadm5int_acl_parse_line(lp)
                free(acle);
                acle = (aent_t *) NULL;
            }
-           if ( nmatch >= 4 ) {
-               char    *trailing;
-
-               trailing = &acle_restrictions[strlen(acle_restrictions)-1];
-               while ( isspace((int) *trailing) )
-                   trailing--;
-               trailing[1] = '\0';
-               acle->ae_restriction_string = strdup(acle_restrictions);
-           }
-           else {
-               acle->ae_restriction_string = (char *) NULL;
+
+           if (acle) {
+                   if ( nmatch >= 4 ) {
+                           char        *trailing;
+
+                           trailing = &acle_restrictions[strlen(acle_restrictions)-1];
+                           while ( isspace((int) *trailing) )
+                                   trailing--;
+                           trailing[1] = '\0';
+                           acle->ae_restriction_string =
+                                   strdup(acle_restrictions);
+                   }
+                   else {
+                           acle->ae_restriction_string = (char *) NULL;
+                   }
+                   acle->ae_restriction_bad = 0;
+                   acle->ae_restrictions = (restriction_t *) NULL;
            }
-           acle->ae_restriction_bad = 0;
-           acle->ae_restrictions = (restriction_t *) NULL;
        }
     }
     DPRINT(DEBUG_CALLS, acl_debug_level,