[2473] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

krb5-admin/205: patches for kadmin forprinc and forpol commands

daemon@ATHENA.MIT.EDU (bjaspan@MIT.EDU)
Tue Nov 19 13:26:03 1996

Resent-From: gnats@rt-11.MIT.EDU (GNATS Management)
Resent-To: bjaspan@MIT.EDU
Resent-Reply-To: krb5-bugs@MIT.EDU, bjaspan@MIT.EDU
Date: Tue, 19 Nov 1996 18:24:00 GMT
From: bjaspan@MIT.EDU
Reply-To: bjaspan@MIT.EDU
To: krb5-bugs@MIT.EDU


>Number:         205
>Category:       krb5-admin
>Synopsis:       patches for kadmin forprinc and forpol commands
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bjaspan
>State:          open
>Class:          change-request
>Submitter-Id:   unknown
>Arrival-Date:   Tue Nov 19 13:25:01 EST 1996
>Last-Modified:
>Originator:     Barry Jaspan
>Organization:
mit
>Release:        1.0-development
>Environment:
	
System: IRIX beeblebrox 5.3 11091812 IP22 mips


>Description:

Here are patches to implement a "for_principal" and "for_policy"
command in kadmin.  This is clearly a feature and so will go in
post-1.0, possibly after some more design discussion.  I'm saving the
patches here so that I can remove them from my working directory.

Index: kadmin.c
===================================================================
RCS file: /mit/krbdev/.cvsroot/src/kadmin/cli/kadmin.c,v
retrieving revision 1.38
diff -c -r1.38 kadmin.c
*** kadmin.c	1996/11/13 21:04:44	1.38
--- kadmin.c	1996/11/14 17:01:56
***************
*** 446,451 ****
--- 446,580 ----
       return 0;
  }
  
+ void kadmin_foreach_princ(argc, argv)
+    int argc;
+    char *argv[];
+ {
+      char *glob, **princs, **argv0;
+      int i, num, max, code;
+      extern int sci_idx;
+ 
+ #undef USAGE
+ #define USAGE { \
+      fprintf(stderr, "Usage: foreach_principal [-max max] glob command\n");\
+      return; }
+      
+      if (argc < 3)  USAGE;
+ 
+      max = 20;
+      argv0 = argv;
+      
+      argv++; argc--;
+      while (*argv) {
+ 	  if (strcmp(*argv, "-max") == 0) {
+ 	       argv++; argc--;
+ 	       if (!argc) USAGE;
+ 	       max = atoi(*argv);
+ 	  } else
+ 	       break;
+ 	  argv++; argc--;
+      }
+      
+      glob = argv[0];
+      argv++; argc--;
+      
+      if (code = kadm5_get_principals(handle, glob, &princs, &num)) {
+ 	  com_err(whoami, code,
+ 		  "while listing principals matching expression \"%s\".",
+ 		  *argv);
+ 	  return;
+      }
+ 
+      if (num > max) {
+ 	  fprintf(stderr, "Expression \"%s\" matches "
+ 		  "%d principals, maximum is %d (use -max to override).\n",
+ 		   glob, num, max);
+ 	  goto done;
+      }
+ 
+      for (i = 0; i < argc; i++)
+ 	  argv0[i] = argv[i];
+      argv0[argc+1] = NULL;
+      
+      for (i = 0; i < num; i++) {
+ 	  argv0[argc] = princs[i];
+ 	  
+ 	  code = ss_execute_command(sci_idx, argv0);
+ 	  if (code != 0) {
+ 	       ss_perror(sci_idx, code, argv0[0]);
+ 	       goto done;
+ 	  }
+      }
+ 
+ done:
+      kadm5_free_name_list(handle, princs, num);
+ }
+ 
+ void kadmin_foreach_pol(argc, argv)
+    int argc;
+    char *argv[];
+ {
+      char *glob, **pols, **argv0;
+      int i, num, max, code;
+      extern int sci_idx;
+ 
+ #undef USAGE
+ #define USAGE { \
+      fprintf(stderr, "Usage: foreach_policy [-max max] glob command\n");\
+      return; }
+      
+      if (argc < 3)  USAGE;
+ 
+      max = 20;
+      argv0 = argv;
+      
+      argv++; argc--;
+      while (*argv) {
+ 	  if (strcmp(*argv, "-max") == 0) {
+ 	       argv++; argc--;
+ 	       if (!argc) USAGE;
+ 	       max = atoi(*argv);
+ 	  } else
+ 	       break;
+ 	  argv++; argc--;
+      }
+      
+      glob = argv[0];
+      argv++; argc--;
+      
+      if (code = kadm5_get_policies(handle, glob, &pols, &num)) {
+ 	  com_err(whoami, code,
+ 		  "while listing policies matching expression \"%s\".",
+ 		  *argv);
+ 	  return;
+      }
+ 
+      if (num > max) {
+ 	  fprintf(stderr, "Expression \"%s\" matches "
+ 		  "%d policies, maximum is %d (use -max to override).\n",
+ 		   glob, num, max);
+ 	  goto done;
+      }
+ 
+      for (i = 0; i < argc; i++)
+ 	  argv0[i] = argv[i];
+      argv0[argc+1] = NULL;
+      
+      for (i = 0; i < num; i++) {
+ 	  argv0[argc] = pols[i];
+ 	  
+ 	  code = ss_execute_command(sci_idx, argv0);
+ 	  if (code != 0) {
+ 	       ss_perror(sci_idx, code, argv0[0]);
+ 	       goto done;
+ 	  }
+      }
+ 
+ done:
+      kadm5_free_name_list(handle, pols, num);
+ }
+ 
+ 
  void kadmin_delprinc(argc, argv)
      int argc;
      char *argv[];
Index: kadmin_ct.ct
===================================================================
RCS file: /mit/krbdev/.cvsroot/src/kadmin/cli/kadmin_ct.ct,v
retrieving revision 1.7
diff -c -r1.7 kadmin_ct.ct
*** kadmin_ct.ct	1996/08/12 15:48:12	1.7
--- kadmin_ct.ct	1996/11/07 20:35:50
***************
*** 65,70 ****
--- 65,76 ----
  request kadmin_keytab_remove, "Remove entry(s) from a keytab",
  	ktremove, ktrem;
  
+ request kadmin_foreach_princ, "Iterate any command over multiple principals",
+ 	foreach_principal, forprinc;
+ 
+ request kadmin_foreach_pol, "Iterate any command over multiple policies",
+ 	foreach_policy, forpol;
+ 
  # list_requests is generic -- unrelated to Kerberos
  request	ss_list_requests, "List available requests.",
  	list_requests, lr, "?";
Index: ss_wrapper.c
===================================================================
RCS file: /mit/krbdev/.cvsroot/src/kadmin/cli/ss_wrapper.c,v
retrieving revision 1.6
diff -c -r1.6 ss_wrapper.c
*** ss_wrapper.c	1996/07/22 20:23:18	1.6
--- ss_wrapper.c	1996/11/07 21:04:24
***************
*** 32,44 ****
  extern char *kadmin_startup();
  extern char *whoami;
  
  int main(argc, argv)
      int argc;
      char *argv[];
  {
      char *request;
      krb5_error_code retval;
!     int sci_idx, code = 0;
  
      whoami = ((whoami = strrchr(argv[0], '/')) ? whoami+1 : argv[0]);
  
--- 32,46 ----
  extern char *kadmin_startup();
  extern char *whoami;
  
+ int sci_idx; /* need by kadmin.c */
+ 
  int main(argc, argv)
      int argc;
      char *argv[];
  {
      char *request;
      krb5_error_code retval;
!     int code = 0;
  
      whoami = ((whoami = strrchr(argv[0], '/')) ? whoami+1 : argv[0]);
  


>How-To-Repeat:
	
>Fix:
	
>Audit-Trail:
>Unformatted:

home help back first fref pref prev next nref lref last post