[1625] in Moira

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

blanche changes, membership acls

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Mon Aug 7 04:57:33 2000

Message-Id: <200008070857.EAA16791@alice-whacker.mit.edu>
To: moiradev@MIT.EDU
Date: Mon, 07 Aug 2000 04:57:30 -0400
From: Garry Zacheiss <zacheiss@MIT.EDU>

	Part 3 of 4, this time implementing client support for
membership acls in blanche.

Garry

Index: blanche.c
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/clients/blanche/blanche.c,v
retrieving revision 1.47
diff -c -r1.47 blanche.c
*** blanche.c	2000/07/16 23:02:31	1.47
--- blanche.c	2000/08/07 08:31:56
***************
*** 34,39 ****
--- 34,41 ----
  #define M_STRING	3
  #define M_KERBEROS	4
  
+ char *typename[] = { "ANY", "USER", "LIST", "STRING", "KERBEROS" };
+ 
  /* argument parsing macro */
  #define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
  
***************
*** 42,48 ****
  int showusers, showstrings, showkerberos, showlists, showtags;
  int createflag, setinfo, active, public, hidden, maillist, grouplist;
  int nfsgroup;
! struct member *owner;
  char *desc, *newname;
  
  /* various member lists */
--- 44,50 ----
  int showusers, showstrings, showkerberos, showlists, showtags;
  int createflag, setinfo, active, public, hidden, maillist, grouplist;
  int nfsgroup;
! struct member *owner, *memacl;
  char *desc, *newname;
  
  /* various member lists */
***************
*** 80,85 ****
--- 82,88 ----
    active = public = hidden = maillist = grouplist = nfsgroup = -1;
    listname = newname = desc = NULL;
    owner = NULL;
+   memacl = NULL;
    addlist = sq_create();
    dellist = sq_create();
    memberlist = sq_create();
***************
*** 285,290 ****
--- 288,304 ----
  	      else
  		usage(argv);
  	    }
+ 	  else if (argis("MA", "memacl"))
+ 	    {
+ 	      if (arg - argv < argc -1)
+ 		{
+ 		  setinfo++;
+ 		  ++arg;
+ 		  memacl = parse_member(*arg);
+ 		}
+ 	      else
+ 		usage(argv);
+ 	    }
  	  else if (argis("R", "rename"))
  	    {
  	      if (arg - argv < argc - 1)
***************
*** 318,324 ****
      showusers = showstrings = showlists = showkerberos = 1;
  
    /* fire up Moira */
!   status = mrcl_connect(server, "blanche", 3, !noauth);
    if (status == MRCL_AUTH_ERROR)
      {
        com_err(whoami, 0, "Try the -noauth flag if you don't "
--- 332,338 ----
      showusers = showstrings = showlists = showkerberos = 1;
  
    /* fire up Moira */
!   status = mrcl_connect(server, "blanche", 4, !noauth);
    if (status == MRCL_AUTH_ERROR)
      {
        com_err(whoami, 0, "Try the -noauth flag if you don't "
***************
*** 340,346 ****
    /* create if needed */
    if (createflag)
      {
!       char *argv[11];
  
        argv[L_NAME] = listname;
        argv[L_ACTIVE] = (active == 0) ? "0" : "1";
--- 354,360 ----
    /* create if needed */
    if (createflag)
      {
!       char *argv[13];
  
        argv[L_NAME] = listname;
        argv[L_ACTIVE] = (active == 0) ? "0" : "1";
***************
*** 352,357 ****
--- 366,388 ----
        argv[L_NFSGROUP] = (nfsgroup == 1) ? "1" : "0";
        argv[L_DESC] = desc ? desc : "none";
  
+       if (memacl)
+ 	{
+ 	  if (memacl->type == M_ANY)
+ 	    {
+ 	      status = mr_query("get_user_account_by_login", 1,
+ 				&memacl->name, NULL, NULL);
+ 	      if (status == MR_NO_MATCH)
+ 		memacl->type = M_LIST;
+ 	      else
+ 		memacl->type = M_USER;
+ 	    }
+ 	  argv[L_MEMACE_TYPE] = typename[memacl->type];
+ 	  argv[L_MEMACE_NAME] = memacl->name;
+ 	}
+       else 
+ 	argv[L_MEMACE_TYPE] = argv[L_MEMACE_NAME] = "NONE";
+ 
        if (owner)
  	{
  	  argv[L_ACE_NAME] = owner->name;
***************
*** 360,377 ****
  	    case M_ANY:
  	    case M_USER:
  	      argv[L_ACE_TYPE] = "USER";
! 	      status = mr_query("add_list", 11, argv, NULL, NULL);
  	      if (owner->type != M_ANY || status != MR_USER)
  		break;
  
  	    case M_LIST:
  	      argv[L_ACE_TYPE] = "LIST";
! 	      status = mr_query("add_list", 11, argv, NULL, NULL);
  	      break;
  
  	    case M_KERBEROS:
  	      argv[L_ACE_TYPE] = "KERBEROS";
! 	      status = mr_query("add_list", 11, argv, NULL, NULL);
  	      break;
  	    }
  	}
--- 391,408 ----
  	    case M_ANY:
  	    case M_USER:
  	      argv[L_ACE_TYPE] = "USER";
! 	      status = mr_query("add_list", 13, argv, NULL, NULL);
  	      if (owner->type != M_ANY || status != MR_USER)
  		break;
  
  	    case M_LIST:
  	      argv[L_ACE_TYPE] = "LIST";
! 	      status = mr_query("add_list", 13, argv, NULL, NULL);
  	      break;
  
  	    case M_KERBEROS:
  	      argv[L_ACE_TYPE] = "KERBEROS";
! 	      status = mr_query("add_list", 13, argv, NULL, NULL);
  	      break;
  	    }
  	}
***************
*** 380,386 ****
  	  argv[L_ACE_TYPE] = "USER";
  	  argv[L_ACE_NAME] = get_username();
  
! 	  status = mr_query("add_list", 11, argv, NULL, NULL);
  	}
  
        if (status)
--- 411,417 ----
  	  argv[L_ACE_TYPE] = "USER";
  	  argv[L_ACE_NAME] = get_username();
  
! 	  status = mr_query("add_list", 13, argv, NULL, NULL);
  	}
  
        if (status)
***************
*** 391,397 ****
      }
    else if (setinfo)
      {
!       char *argv[12];
  
        status = mr_query("get_list_info", 1, &listname,
  			save_list_info, argv);
--- 422,428 ----
      }
    else if (setinfo)
      {
!       char *argv[14];
  
        status = mr_query("get_list_info", 1, &listname,
  			save_list_info, argv);
***************
*** 419,424 ****
--- 450,472 ----
        if (desc)
  	argv[L_DESC + 1] = desc;
  
+       if (memacl)
+ 	{
+ 	  if (memacl->type == M_ANY)
+ 	    {
+ 	      status = mr_query("get_user_account_by_login", 1,
+ 				&memacl->name, NULL, NULL);
+ 	      if (status == MR_NO_MATCH)
+ 		memacl->type = M_LIST;
+ 	      else
+ 		memacl->type = M_USER;
+ 	    }
+ 	  argv[L_MEMACE_TYPE + 1] = typename[memacl->type];
+ 	  argv[L_MEMACE_NAME + 1] = memacl->name;
+ 	}
+       else
+ 	argv[L_MEMACE_TYPE + 1] = argv[L_MEMACE_NAME + 1] = "NONE";
+ 
        if (owner)
  	{
  	  argv[L_ACE_NAME + 1] = owner->name;
***************
*** 427,449 ****
  	    case M_ANY:
  	    case M_USER:
  	      argv[L_ACE_TYPE + 1] = "USER";
! 	      status = mr_query("update_list", 12, argv, NULL, NULL);
  	      if (owner->type != M_ANY || status != MR_USER)
  		break;
  
  	    case M_LIST:
  	      argv[L_ACE_TYPE + 1] = "LIST";
! 	      status = mr_query("update_list", 12, argv, NULL, NULL);
  	      break;
  
  	    case M_KERBEROS:
  	      argv[L_ACE_TYPE + 1] = "KERBEROS";
! 	      status = mr_query("update_list", 12, argv, NULL, NULL);
  	      break;
  	    }
  	}
        else
! 	status = mr_query("update_list", 12, argv, NULL, NULL);
  
        if (status)
  	{
--- 475,497 ----
  	    case M_ANY:
  	    case M_USER:
  	      argv[L_ACE_TYPE + 1] = "USER";
! 	      status = mr_query("update_list", 14, argv, NULL, NULL);
  	      if (owner->type != M_ANY || status != MR_USER)
  		break;
  
  	    case M_LIST:
  	      argv[L_ACE_TYPE + 1] = "LIST";
! 	      status = mr_query("update_list", 14, argv, NULL, NULL);
  	      break;
  
  	    case M_KERBEROS:
  	      argv[L_ACE_TYPE + 1] = "KERBEROS";
! 	      status = mr_query("update_list", 14, argv, NULL, NULL);
  	      break;
  	    }
  	}
        else
! 	status = mr_query("update_list", 14, argv, NULL, NULL);
  
        if (status)
  	{
--- 903,908 ----
***************
*** 877,883 ****
    fprintf(stderr, USAGE_OPTIONS_FORMAT, "-t  | -tags",
  	  "-O  | -owner owner");
    fprintf(stderr, USAGE_OPTIONS_FORMAT, "-n  | -noauth",
! 	  "-db | -database host[:port]");
    exit(1);
  }
  
--- 964,972 ----
    fprintf(stderr, USAGE_OPTIONS_FORMAT, "-t  | -tags",
  	  "-O  | -owner owner");
    fprintf(stderr, USAGE_OPTIONS_FORMAT, "-n  | -noauth",
! 	  "-MA | -memacl membership_acl");
!   fprintf(stderr, USAGE_OPTIONS_FORMAT, "-db | -database host[:port]",
! 	  "");
    exit(1);
  }
  
***************
*** 958,963 ****
--- 1047,1055 ----
    else
      printf("\n");
    printf("Owner: %s %s\n", argv[L_ACE_TYPE], argv[L_ACE_NAME]);
+   if (strcmp(argv[L_MEMACE_TYPE], "NONE"))
+     printf("Membership ACL: %s %s\n", argv[L_MEMACE_TYPE], 
+ 	   argv[L_MEMACE_NAME]);
    printf("Last modified by %s with %s on %s\n", 
  	 argv[L_MODBY], argv[L_MODWITH], argv[L_MODTIME]);
    return MR_CONT;

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