[1397] in Moira

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

Re: zephyr.gen shouldn't coredump

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Tue Mar 7 18:22:30 2000

Date: Tue, 7 Mar 2000 18:22:24 -0500 (EST)
Message-Id: <200003072322.SAA14188@sweet-transvestite.mit.edu>
From: Garry Zacheiss <zacheiss@MIT.EDU>
To: Jonathon Weiss <jweiss@MIT.EDU>
Cc: Garry Zacheiss <zacheiss@MIT.EDU>, moiradev@MIT.EDU
In-Reply-To: "[1395] in Moira"

>> I think that this is a fairly serious error condition and the dcm
>> should fail (gracefully, not core-dumpily) rather than blithely
>> creating acls wiht missing entries.  Certainly, the losing the
>> particular string above would make a serious mess out of the acl's
>> installed on the zephyr servers.

   Fine.  Here's your diff.  It likes pumpernickel.

Index: genacl.pc
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/gen/genacl.pc,v
retrieving revision 1.2
diff -c -r1.2 genacl.pc
*** genacl.pc	2000/03/06 21:32:28	1.2
--- genacl.pc	2000/03/07 23:15:29
***************
*** 38,52 ****
    krb_get_lrealm(defaultrealm, 1);
  }
  
! void dump_krb_acl(FILE *out, char *type, int id, int vers)
  {
    struct save_queue *sq;
    struct imember *m;
    char kbuf[MAX_K_NAME_SZ];
  
    sq = get_acl(type, id, NULL);
    while (sq_remove_data(sq, &m))
      {
        if (m->type != 'S' && m->name != NULL)
  	{
  	  canon_krb(m, vers, kbuf, sizeof(kbuf));
--- 38,55 ----
    krb_get_lrealm(defaultrealm, 1);
  }
  
! int dump_krb_acl(FILE *out, char *type, int id, int vers)
  {
    struct save_queue *sq;
    struct imember *m;
    char kbuf[MAX_K_NAME_SZ];
+   int retval = MR_SUCCESS;
  
    sq = get_acl(type, id, NULL);
    while (sq_remove_data(sq, &m))
      {
+       if (m->name == NULL)
+ 	retval = MR_DBMS_ERR;
        if (m->type != 'S' && m->name != NULL)
  	{
  	  canon_krb(m, vers, kbuf, sizeof(kbuf));
***************
*** 55,60 ****
--- 58,64 ----
        freeimember(m);
      }
    sq_destroy(sq);
+   return retval;
  }
  
  void canon_krb(struct imember *m, int vers, char *buf, int len)
Index: util.h
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/gen/util.h,v
retrieving revision 1.4
diff -c -r1.4 util.h
*** util.h	2000/01/06 21:13:51	1.4
--- util.h	2000/03/07 22:58:25
***************
*** 57,63 ****
  void canon_krb(struct imember *m, int vers, char *buf, int len);
  struct save_queue *get_acl(char *type, int id,
  			   char *(merge_func)(char *, char *));
! void dump_krb_acl(FILE *out, char *type, int id, int vers);
  void dump_user_list(FILE *out, char *type, int id);
  char *user_lookup(int users_id);
  char *string_lookup(int string_id);
--- 57,63 ----
  void canon_krb(struct imember *m, int vers, char *buf, int len);
  struct save_queue *get_acl(char *type, int id,
  			   char *(merge_func)(char *, char *));
! int dump_krb_acl(FILE *out, char *type, int id, int vers);
  void dump_user_list(FILE *out, char *type, int id);
  char *user_lookup(int users_id);
  char *string_lookup(int string_id);
Index: zephyr.pc
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/gen/zephyr.pc,v
retrieving revision 1.2
diff -c -r1.2 zephyr.pc
*** zephyr.pc	2000/01/10 23:09:15	1.2
--- zephyr.pc	2000/03/07 23:16:53
***************
*** 23,30 ****
  
  RCSID("$Header: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/gen/zephyr.pc,v 1.2 2000/01/10 23:09:15 danw Exp $");
  
! void do_class(TARFILE *tf, char *class);
! void dump_zacl(FILE *out, char *type, int id);
  void sqlerr(void);
  
  char *whoami = "zephyr.gen";
--- 23,30 ----
  
  RCSID("$Header: /afs/athena.mit.edu/astaff/project/moiradev/repository//moira/gen/zephyr.pc,v 1.2 2000/01/10 23:09:15 danw Exp $");
  
! int do_class(TARFILE *tf, char *class);
! int dump_zacl(FILE *out, char *type, int id);
  void sqlerr(void);
  
  char *whoami = "zephyr.gen";
***************
*** 41,46 ****
--- 41,47 ----
    FILE *out;
    struct save_queue *sq;
    char *class;
+   int retval = MR_SUCCESS;
   
    if (argc != 2)
      {
***************
*** 75,81 ****
    tarfile_end(tf);
  
    while (sq_remove_data(sq, &class))
!     do_class(tf, class);
  
    sq_destroy(sq);
    EXEC SQL COMMIT RELEASE;
--- 76,86 ----
    tarfile_end(tf);
  
    while (sq_remove_data(sq, &class))
!     {
!       retval = do_class(tf, class);
!       if (retval != MR_SUCCESS)
! 	return retval;
!     }
  
    sq_destroy(sq);
    EXEC SQL COMMIT RELEASE;
***************
*** 83,89 ****
    exit(MR_SUCCESS);
  }
  
! void do_class(TARFILE *tf, char *class)
  {
    FILE *out;
    char filename[ZEPHYR_CLASS_SIZE + 9];
--- 88,94 ----
    exit(MR_SUCCESS);
  }
  
! int do_class(TARFILE *tf, char *class)
  {
    FILE *out;
    char filename[ZEPHYR_CLASS_SIZE + 9];
***************
*** 93,98 ****
--- 98,104 ----
    char zutype[ZEPHYR_IUI_TYPE_SIZE];
    int zxid, zsid, zwid, zuid;
    EXEC SQL END DECLARE SECTION;
+   int retval = MR_SUCCESS;
  
    EXEC SQL SELECT xmt_type, xmt_id, sub_type, sub_id,
      iws_type, iws_id, iui_type, iui_id
***************
*** 101,135 ****
      FROM zephyr
      WHERE class = :zclass;
    if (sqlca.sqlcode)
!     return;
  
    sprintf(filename, "xmt-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   dump_zacl(out, strtrim(zxtype), zxid);
    tarfile_end(tf);
  
    sprintf(filename, "sub-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   dump_zacl(out, strtrim(zstype), zsid);
    tarfile_end(tf);
  
    sprintf(filename, "iws-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   dump_zacl(out, strtrim(zwtype), zwid);
    tarfile_end(tf);
  
    sprintf(filename, "iui-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   dump_zacl(out, strtrim(zutype), zuid);
    tarfile_end(tf);
  }
  
! void dump_zacl(FILE *out, char *type, int id)
  {
    if (!strcmp(type, "ALL"))
      fprintf(out, "*.*@*\n");
    else if (strcmp(type, "NONE") != 0)
!     dump_krb_acl(out, type, id, 4);
  }
  
  void sqlerr(void)
--- 107,154 ----
      FROM zephyr
      WHERE class = :zclass;
    if (sqlca.sqlcode)
!     return MR_DBMS_ERR;
  
    sprintf(filename, "xmt-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   retval = dump_zacl(out, strtrim(zxtype), zxid);
!   if (retval != MR_SUCCESS)
!     return retval;
    tarfile_end(tf);
  
    sprintf(filename, "sub-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   retval = dump_zacl(out, strtrim(zstype), zsid);
!   if (retval != MR_SUCCESS)
!     return retval;
    tarfile_end(tf);
  
    sprintf(filename, "iws-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   retval = dump_zacl(out, strtrim(zwtype), zwid);
!   if (retval != MR_SUCCESS)
!     return retval;
    tarfile_end(tf);
  
    sprintf(filename, "iui-%s.acl", class);
    out = tarfile_start(tf, filename, 0644, 0, 0, "root", "root", now);
!   retval = dump_zacl(out, strtrim(zutype), zuid);
!   if (retval != MR_SUCCESS)
!     return retval;
    tarfile_end(tf);
+ 
+   return retval;
  }
  
! int dump_zacl(FILE *out, char *type, int id)
  {
+   int retval = MR_SUCCESS;
+ 
    if (!strcmp(type, "ALL"))
      fprintf(out, "*.*@*\n");
    else if (strcmp(type, "NONE") != 0)
!     retval = dump_krb_acl(out, type, id, 4);
!   return retval;
  }
  
  void sqlerr(void)

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