kadmin: improve warnings in ext_keytab
This commit is contained in:
		
							
								
								
									
										34
									
								
								kadmin/ext.c
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								kadmin/ext.c
									
									
									
									
									
								
							@@ -70,6 +70,24 @@ do_ext_keytab(krb5_principal principal, void *data)
 | 
			
		||||
                       "get-keys privilege for %s", unparsed);
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
        /*
 | 
			
		||||
         * kadmin clients and servers from master between 1.5 and 1.6
 | 
			
		||||
         * can have corrupted a principal's keys in the HDB.  If some
 | 
			
		||||
         * are bogus but not all are, then that must have happened.
 | 
			
		||||
         *
 | 
			
		||||
         * If all keys are bogus then the server may be a pre-1.6,
 | 
			
		||||
         * post-1.5 server and the client lacks get-keys privilege, or
 | 
			
		||||
         * the keys are corrupted.  We can't tell here.
 | 
			
		||||
         */
 | 
			
		||||
        if (kadm5_all_keys_are_bogus(princ.n_key_data, princ.key_data)) {
 | 
			
		||||
            krb5_warnx(context, "user lacks get-keys privilege for %s",
 | 
			
		||||
                       unparsed);
 | 
			
		||||
            goto out;
 | 
			
		||||
        }
 | 
			
		||||
        if (kadm5_some_keys_are_bogus(princ.n_key_data, princ.key_data)) {
 | 
			
		||||
            krb5_warnx(context, "some keys for %s are corrupted in the HDB",
 | 
			
		||||
                       unparsed);
 | 
			
		||||
        }
 | 
			
		||||
	keys = calloc(sizeof(*keys), princ.n_key_data);
 | 
			
		||||
	if (keys == NULL) {
 | 
			
		||||
	    ret = krb5_enomem(context);
 | 
			
		||||
@@ -77,21 +95,10 @@ do_ext_keytab(krb5_principal principal, void *data)
 | 
			
		||||
	}
 | 
			
		||||
	for (i = 0; i < princ.n_key_data; i++) {
 | 
			
		||||
	    krb5_key_data *kd = &princ.key_data[i];
 | 
			
		||||
	    int warned = 0;
 | 
			
		||||
 | 
			
		||||
            /*
 | 
			
		||||
             * If the kadm5 client princ lacks get-keys then it may get
 | 
			
		||||
             * bogus keys.  This should only happen with kadmind servers
 | 
			
		||||
             * running master code from somewhere between 1.5 and 1.6.
 | 
			
		||||
             */
 | 
			
		||||
            if (kadm5_some_keys_are_bogus(1, kd)) {
 | 
			
		||||
		if (!warned) {
 | 
			
		||||
		    krb5_warnx(context, "user lacks get-keys privilege for %s",
 | 
			
		||||
			       unparsed);
 | 
			
		||||
		    warned = 1;
 | 
			
		||||
		}
 | 
			
		||||
            /* Don't extract bogus keys */
 | 
			
		||||
            if (kadm5_all_keys_are_bogus(1, kd))
 | 
			
		||||
                continue;
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	    keys[i].principal = princ.principal;
 | 
			
		||||
	    keys[i].vno = kd->key_data_kvno;
 | 
			
		||||
@@ -102,7 +109,6 @@ do_ext_keytab(krb5_principal principal, void *data)
 | 
			
		||||
            n_k++;
 | 
			
		||||
	}
 | 
			
		||||
    } else if (e->random_key_flag) {
 | 
			
		||||
        /* Probably lack get-keys privilege, but we may be able to set keys */
 | 
			
		||||
	ret = kadm5_randkey_principal(kadm_handle, principal, &k, &n_k);
 | 
			
		||||
	if (ret)
 | 
			
		||||
	    goto out;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user