handle stash file names with missing keytab type spec and colon in path
authorKen Raeburn <raeburn@mit.edu>
Wed, 15 Oct 2008 17:37:21 +0000 (17:37 +0000)
committerKen Raeburn <raeburn@mit.edu>
Wed, 15 Oct 2008 17:37:21 +0000 (17:37 +0000)
Currently the keytab name resolution code will pass off any name with
no colon to the default keytab type handler, which is the FILE
handler.  It will also check for Windows file names consisting of one
letter followed by a colon, and treat them as FILE specs also.

If a UNIX pathname contains a colon, however, and no type was
explicitly specified, the leading part of the pathname gets treated as
a type name and fails to match anything.  It should instead treat
type-less names starting with "/" as FILE specs also.

Tweak the test suite to use such a name.

Report and patch from Apple.  rdar://problem/6179239

ticket: new

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20872 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/keytab/ktbase.c
src/tests/dejagnu/config/default.exp

index b68b351c6a0ae2ac930578121bee6a13582718f7..9d51745402adf20804b809a5c57fe54488bca1a0 100644 (file)
@@ -181,6 +181,11 @@ krb5_kt_resolve (krb5_context context, const char *name, krb5_keytab *ktid)
             return ENOMEM;
 
         resid = name;
+    } else if (name[0] == '/') {
+       pfx = strdup("FILE");
+       if (!pfx)
+           return ENOMEM;
+       resid = name;
     } else {
         resid = name + pfxlen + 1;
        
index 8e5d28e220edd2b292ed9c428d014592932ffa29..0c7b9b09287385e4639936cf03feb5ce56ef636c 100644 (file)
@@ -829,7 +829,9 @@ proc setup_kerberos_files { } {
 #      puts $conffile "                database_name = $tmppwd/db"
        puts $conffile "                admin_database_name = $tmppwd/adb"
        puts $conffile "                admin_database_lockfile = $tmppwd/adb.lock"
-       puts $conffile "                key_stash_file = $tmppwd/stash"
+       # Testing with a colon in the name exercises default handling
+       # for pathnames.
+       puts $conffile "                key_stash_file = $tmppwd/stash:foo"
        puts $conffile "                acl_file = $tmppwd/acl"
        puts $conffile "                kadmind_port = [expr 4 + $portbase]"
        puts $conffile "                kpasswd_port = [expr 5 + $portbase]"