[1563] in Moira

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

acl.gen KERBEROS support

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Thu Jun 1 19:42:54 2000

Message-Id: <200006012342.TAA28025@sweet-transvestite.mit.edu>
To: moiradev@MIT.EDU
Date: Thu, 01 Jun 2000 19:42:50 -0400
From: Garry Zacheiss <zacheiss@MIT.EDU>

	This implements support for type KERBEROS members on access
files, passwd files, and group files.  It should work equally well for
fully qualified and non-qualified KERBEROS entries, and will only output
KERBEROS entries corresponding to valid users so it won't try to produce
passwd entries for rcmd.euterpe, etc.

Index: acl.pc
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/gen/acl.pc,v
retrieving revision 1.2
diff -c -r1.2 acl.pc
*** acl.pc	2000/01/24 03:42:11	1.2
--- acl.pc	2000/06/01 23:39:07
***************
*** 132,137 ****
--- 132,139 ----
  {
    struct save_queue *sq = get_acl("LIST", lid, merge_access_bits);
    struct imember *m;
+   char *name, *lasts = NULL;
+   int i = 0;
  
    while (sq_remove_data(sq, &m))
      {
***************
*** 143,148 ****
--- 145,163 ----
  	  else
  	    fprintf(out, "%-10s rl\n", m->name);
  	}
+       else if (m->type == 'K')
+ 	{
+ 	  name = strtok_r(m->name, "@", &lasts);
+ 	  EXEC SQL SELECT count(login) INTO :i FROM users 
+ 	    WHERE login = :name;
+ 	  if (i == 1)
+ 	    {
+ 	      if (*(m->tag))
+ 		fprintf(out, "%-10s %s\n", m->name, m->tag);
+ 	      else
+ 		fprintf(out, "%-10s rl\n", m->name);
+ 	    }
+ 	}
        freeimember(m);
      }
    sq_destroy(sq);
***************
*** 250,257 ****
    char shell[USERS_SHELL_SIZE], fullname[USERS_FULLNAME_SIZE];
    char nickname[USERS_NICKNAME_SIZE], oa[USERS_OFFICE_ADDR_SIZE];
    char op[USERS_OFFICE_PHONE_SIZE], hp[USERS_HOME_PHONE_SIZE];
!   int uid;
!   char *name;
    EXEC SQL END DECLARE SECTION;
  
    while (sq_remove_data(sq, &m))
--- 265,272 ----
    char shell[USERS_SHELL_SIZE], fullname[USERS_FULLNAME_SIZE];
    char nickname[USERS_NICKNAME_SIZE], oa[USERS_OFFICE_ADDR_SIZE];
    char op[USERS_OFFICE_PHONE_SIZE], hp[USERS_HOME_PHONE_SIZE];
!   int uid, i = 0;
!   char *name, *n, *lasts = NULL;
    EXEC SQL END DECLARE SECTION;
  
    while (sq_remove_data(sq, &m))
***************
*** 279,284 ****
--- 294,326 ----
  	  fprintf(out, "%s:*:%d:101:%s,%s,%s,%s,%s:/mit/%s:%s\n",
  		  name, uid, fullname, nickname, oa, op, hp, name, shell);
  	  break;
+ 
+ 	case 'K':
+ 	  name = strtok_r(m->name, "@", &lasts);
+ 	    
+ 	  EXEC SQL SELECT count(login) INTO :i FROM users WHERE 
+ 	    login = :name;
+ 	  if (i == 1)
+ 	    {
+ 	      EXEC SQL SELECT unix_uid, shell, fullname, nickname,
+ 		office_addr, office_phone, home_phone 
+ 		INTO :uid, :shell, :fullname, :nickname, :oa, :op, :hp 
+ 		FROM users 
+ 		WHERE login = :name AND status != 3;	      
+ 	      if (sqlca.sqlcode)
+ 		continue;
+ 	      
+ 	      strtrim(shell);
+ 	      strtrim(fullname);
+ 	      strtrim(nickname);
+ 	      strtrim(op);
+ 	      strtrim(oa);
+ 	      strtrim(hp);
+ 	      
+ 	      fprintf(out, "%s:*:%d:101:%s,%s,%s,%s,%s:/mit/%s:%s\n",
+ 		      name, uid, fullname, nickname, oa, op, hp, name, shell);
+ 	    }
+ 	  break;
  	}
        freeimember(m);
      }
***************
*** 291,302 ****
  void dump_group_file(FILE *out, int id)
  {
    EXEC SQL BEGIN DECLARE SECTION;
!   int lid = id, mid, gid, grouplist;
    char mtype[IMEMBERS_MEMBER_TYPE_SIZE], name[LIST_NAME_SIZE];
    EXEC SQL END DECLARE SECTION;
    struct save_queue *sq;
    struct imember *m;
!   char *maybecomma, *s;
  
    EXEC SQL DECLARE csr_grp CURSOR FOR
      SELECT member_type, member_id FROM imembers
--- 333,344 ----
  void dump_group_file(FILE *out, int id)
  {
    EXEC SQL BEGIN DECLARE SECTION;
!   int lid = id, mid, gid, grouplist, i = 0;
    char mtype[IMEMBERS_MEMBER_TYPE_SIZE], name[LIST_NAME_SIZE];
    EXEC SQL END DECLARE SECTION;
    struct save_queue *sq;
    struct imember *m;
!   char *maybecomma, *s, *n, *lasts = NULL;
  
    EXEC SQL DECLARE csr_grp CURSOR FOR
      SELECT member_type, member_id FROM imembers
***************
*** 329,334 ****
--- 371,387 ----
  		{
  		  fprintf(out, "%s%s", maybecomma, m->name);
  		  maybecomma = ",";
+ 		}
+ 	      else if (m->type == 'K')
+ 		{
+ 		  n = strtok_r(m->name, "@", &lasts);
+ 		  EXEC SQL SELECT count(login) INTO :i FROM users
+ 		    WHERE login = :n;
+ 		  if (i == 1)
+ 		    {
+ 		      fprintf(out, "%s%s", maybecomma, n);
+ 		      maybecomma = ",";
+ 		    }
  		}
  	      freeimember(m);
  	    }

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