Use `foreach_principal'. Add long, short, and terse (equivalent to
`list') output formats. Short is the default. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4503 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		
							
								
								
									
										176
									
								
								kadmin/get.c
									
									
									
									
									
								
							
							
						
						
									
										176
									
								
								kadmin/get.c
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * Copyright (c) 1997 Kungliga Tekniska H<>gskolan | ||||
|  * Copyright (c) 1997, 1998 Kungliga Tekniska H<>gskolan | ||||
|  * (Royal Institute of Technology, Stockholm, Sweden).  | ||||
|  * All rights reserved.  | ||||
|  * | ||||
| @@ -41,20 +41,86 @@ | ||||
|  | ||||
| RCSID("$Id$"); | ||||
|  | ||||
| struct get_entry_data { | ||||
|     void (*header)(void); | ||||
|     void (*format)(kadm5_principal_ent_t); | ||||
| }; | ||||
|  | ||||
| static void | ||||
| print_entry(kadm5_principal_ent_t princ) | ||||
| print_entry_terse(kadm5_principal_ent_t princ) | ||||
| { | ||||
|     char *p; | ||||
|     krb5_unparse_name(context, princ->principal, &p); | ||||
|     printf("  %s\n", p); | ||||
|     free(p); | ||||
| } | ||||
|  | ||||
| static void | ||||
| print_header_short(void) | ||||
| { | ||||
|     printf("%-20s ", "Principal"); | ||||
|      | ||||
|     printf("%-10s ", "Expires"); | ||||
| 	     | ||||
|     printf("%-10s ", "PW-exp"); | ||||
| 	     | ||||
|     printf("%-10s ", "PW-change"); | ||||
| 	 | ||||
|     printf("%-9s ", "Max life"); | ||||
|  | ||||
|     printf("%-9s ", "Max renew"); | ||||
|      | ||||
|     printf("\n"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| print_entry_short(kadm5_principal_ent_t princ) | ||||
| { | ||||
|     char buf[1024]; | ||||
|      | ||||
|     krb5_unparse_name_fixed_short(context, princ->principal, buf, sizeof(buf)); | ||||
|     printf("%-20s ", buf); | ||||
|      | ||||
|     timeval2str(princ->princ_expire_time, buf, sizeof(buf), 0); | ||||
|     printf("%-10s ", buf); | ||||
| 	     | ||||
|     timeval2str(princ->pw_expiration, buf, sizeof(buf), 0); | ||||
|     printf("%-10s ", buf); | ||||
| 	     | ||||
|     timeval2str(princ->last_pwd_change, buf, sizeof(buf), 0); | ||||
|     printf("%-10s ", buf); | ||||
| 	 | ||||
|     deltat2str(princ->max_life, buf, sizeof(buf)); | ||||
|     printf("%-9s ", buf); | ||||
|  | ||||
|     deltat2str(princ->max_renewable_life, buf, sizeof(buf)); | ||||
|     printf("%-9s ", buf); | ||||
|  | ||||
| #if 0 | ||||
|     timeval2str(princ->mod_date, buf, sizeof(buf), 0); | ||||
|     printf("%-10s ", buf); | ||||
|  | ||||
|     krb5_unparse_name_fixed(context, princ->mod_name, buf, sizeof(buf)); | ||||
|     printf("%-24s", buf); | ||||
| #endif | ||||
|      | ||||
|     printf("\n"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| print_entry_long(kadm5_principal_ent_t princ) | ||||
| { | ||||
|     char buf[1024]; | ||||
|      | ||||
|     krb5_unparse_name_fixed(context, princ->principal, buf, sizeof(buf)); | ||||
|     printf("%24s: %s\n", "Principal", buf); | ||||
|     timeval2str(princ->princ_expire_time, buf, sizeof(buf)); | ||||
|     timeval2str(princ->princ_expire_time, buf, sizeof(buf), 1); | ||||
|     printf("%24s: %s\n", "Principal expires", buf); | ||||
| 	     | ||||
|     timeval2str(princ->pw_expiration, buf, sizeof(buf)); | ||||
|     timeval2str(princ->pw_expiration, buf, sizeof(buf), 1); | ||||
|     printf("%24s: %s\n", "Password expires", buf); | ||||
| 	     | ||||
|     timeval2str(princ->last_pwd_change, buf, sizeof(buf)); | ||||
|     timeval2str(princ->last_pwd_change, buf, sizeof(buf), 1); | ||||
|     printf("%24s: %s\n", "Last password change", buf); | ||||
| 	 | ||||
|     deltat2str(princ->max_life, buf, sizeof(buf)); | ||||
| @@ -65,12 +131,12 @@ print_entry(kadm5_principal_ent_t princ) | ||||
|     printf("%24s: %d\n", "Kvno", princ->kvno); | ||||
|     printf("%24s: %d\n", "Mkvno", princ->mkvno); | ||||
|     printf("%24s: %s\n", "Policy", princ->policy ? princ->policy : "none"); | ||||
|     timeval2str(princ->last_success, buf, sizeof(buf)); | ||||
|     timeval2str(princ->last_success, buf, sizeof(buf), 1); | ||||
|     printf("%24s: %s\n", "Last successful login", buf); | ||||
|     timeval2str(princ->last_failed, buf, sizeof(buf)); | ||||
|     timeval2str(princ->last_failed, buf, sizeof(buf), 1); | ||||
|     printf("%24s: %s\n", "Last failed login", buf); | ||||
|     printf("%24s: %d\n", "Failed login count", princ->fail_auth_count); | ||||
|     timeval2str(princ->mod_date, buf, sizeof(buf)); | ||||
|     timeval2str(princ->mod_date, buf, sizeof(buf), 1); | ||||
|     printf("%24s: %s\n", "Last modified", buf); | ||||
|     krb5_unparse_name_fixed(context, princ->mod_name, buf, sizeof(buf)); | ||||
|     printf("%24s: %s\n", "Modifier", buf); | ||||
| @@ -79,31 +145,85 @@ print_entry(kadm5_principal_ent_t princ) | ||||
|     printf("\n"); | ||||
| } | ||||
|  | ||||
| int | ||||
| get_entry(int argc, char **argv) | ||||
|  | ||||
| static int | ||||
| do_get_entry(krb5_principal principal, void *data) | ||||
| { | ||||
|     kadm5_principal_ent_rec princ; | ||||
|     krb5_error_code ret; | ||||
|     krb5_principal princ_ent; | ||||
|     int i; | ||||
|  | ||||
|     for(i = 1; i < argc; i++){ | ||||
| 	memset(&princ, 0, sizeof(princ)); | ||||
| 	ret = krb5_parse_name(context, argv[i], &princ_ent); | ||||
| 	if(ret){ | ||||
| 	    krb5_warn(context, ret, "krb5_parse_name(%s)", argv[i]); | ||||
| 	    continue; | ||||
| 	} | ||||
| 	ret = kadm5_get_principal(kadm_handle, princ_ent,  | ||||
| 				  &princ, KADM5_PRINCIPAL_NORMAL_MASK); | ||||
| 	krb5_free_principal(context, princ_ent); | ||||
| 	if(ret) | ||||
| 	    krb5_warn(context, ret, "%s", argv[i]); | ||||
| 	else { | ||||
| 	    print_entry(&princ); | ||||
| 	    kadm5_free_principal_ent(kadm_handle, &princ); | ||||
|     struct get_entry_data *e = data; | ||||
|      | ||||
|     memset(&princ, 0, sizeof(princ)); | ||||
|     ret = kadm5_get_principal(kadm_handle, principal,  | ||||
| 			      &princ, KADM5_PRINCIPAL_NORMAL_MASK); | ||||
|     if(ret) | ||||
| 	return ret; | ||||
|     else { | ||||
| 	if(e->header) { | ||||
| 	    (*e->header)(); | ||||
| 	    e->header = NULL; /* XXX only once */ | ||||
| 	} | ||||
| 	(e->format)(&princ); | ||||
| 	kadm5_free_principal_ent(kadm_handle, &princ); | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int | ||||
| get_entry(int argc, char **argv) | ||||
| { | ||||
|     int i; | ||||
|     krb5_error_code ret; | ||||
|     struct get_entry_data data; | ||||
|     struct getargs args[] = { | ||||
| 	{ "long",	'l',	arg_flag,	NULL, "long format" }, | ||||
| 	{ "terse",	't',	arg_flag,	NULL, "terse format" }, | ||||
|     }; | ||||
|     int num_args = sizeof(args) / sizeof(args[0]); | ||||
|     int optind = 0; | ||||
|     int long_flag = 0; | ||||
|     int terse_flag = 0; | ||||
|      | ||||
|     args[0].value = &long_flag; | ||||
|     args[1].value = &terse_flag; | ||||
|     if(getarg(args, num_args, argc, argv, &optind)) | ||||
| 	goto usage; | ||||
|     if(optind == argc) | ||||
| 	goto usage; | ||||
|  | ||||
|     if(long_flag) { | ||||
| 	data.format = print_entry_long; | ||||
| 	data.header = NULL; | ||||
|     } else if(terse_flag) { | ||||
| 	data.format = print_entry_terse; | ||||
| 	data.header = NULL; | ||||
|     } else { | ||||
| 	data.format = print_entry_short; | ||||
| 	data.header = print_header_short; | ||||
|     } | ||||
|  | ||||
|     argc -= optind; | ||||
|     argv += optind; | ||||
|  | ||||
|     for(i = 0; i < argc; i++) | ||||
| 	ret = foreach_principal(argv[i], do_get_entry, &data); | ||||
|     return 0; | ||||
| usage: | ||||
|     arg_printusage (args, num_args, "principal..."); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int | ||||
| list_princs(int argc, char **argv) | ||||
| { | ||||
|     int i; | ||||
|     krb5_error_code ret; | ||||
|     struct get_entry_data data; | ||||
|  | ||||
|     data.format = print_entry_terse; | ||||
|     data.header = NULL; | ||||
|      | ||||
|     for(i = 1; i < argc; i++) | ||||
| 	ret = foreach_principal(argv[i], do_get_entry, &data); | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Johan Danielsson
					Johan Danielsson