[1620] in Moira

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

part 2: "moira" curses client changes

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Sun Aug 6 05:10:28 2000

Message-Id: <200008060910.FAA06129@alice-whacker.mit.edu>
To: moiradev@MIT.EDU
Date: Sun, 06 Aug 2000 05:10:26 -0400
From: Garry Zacheiss <zacheiss@MIT.EDU>

	Changes to "moira" to use the STRING and KERBEROS entry
validation.

Garry

Index: lists.c
===================================================================
RCS file: /afs/athena.mit.edu/astaff/project/moiradev/repository/moira/clients/moira/lists.c,v
retrieving revision 1.40
diff -c -r1.40 lists.c
*** lists.c	2000/04/19 23:15:35	1.40
--- lists.c	2000/08/06 06:20:34
***************
*** 14,19 ****
--- 14,20 ----
  
  #include <mit-copyright.h>
  #include <moira.h>
+ #include <mrclient.h>
  #include <moira_site.h>
  #include "defs.h"
  #include "f_defs.h"
***************
*** 652,686 ****
  
    if (!strcmp(args[LM_TYPE], "STRING"))
      {
!       if ((p = strchr(args[LM_MEMBER], '@')))
  	{
! 	  char *host = canonicalize_hostname(strdup(++p));
! 	  mailhubs = GetTypeValues("mailhub");
! 	  for (elem = mailhubs; elem; elem = elem->q_forw)
! 	    {
! 	      if (!strcasecmp(host, elem->q_data))
! 		{
! 		  free(host);
! 		  host = strdup(args[LM_MEMBER]);
! 		  *(--p) = 0;
! 		  sprintf(temp_buf, "String \"%s\" should be USER or LIST "
! 			  "\"%s\" because it is a local name.", host,
! 			  args[LM_MEMBER]);
! 		  Put_message(temp_buf);
! 		  free(args[LM_TYPE]);
! 		  free(host);
! 		  return DM_NORMAL;
! 		}
! 	    }
! 	  free(host);
! 	}
!       else if (!strchr(args[LM_MEMBER], '!'))
! 	{
! 	  Put_message("Member which is not a foreign mail address "
! 		      "should not be type STRING.");
  	  return DM_NORMAL;
  	}
      }
  
    if ((status = do_mr_query("add_member_to_list", CountArgs(args), args,
  			    NULL, NULL)) != MR_SUCCESS)
--- 653,674 ----
  
    if (!strcmp(args[LM_TYPE], "STRING"))
      {
!       if (mrcl_validate_string_member(args[LM_MEMBER]) != MRCL_SUCCESS)
  	{
! 	  Put_message(mrcl_get_message());
  	  return DM_NORMAL;
  	}
      }
+   else if (!strcmp(args[LM_TYPE], "KERBEROS"))
+     {
+       char *canon;
+ 
+       mrcl_validate_kerberos_member(args[LM_MEMBER], &canon);
+       if (mrcl_get_message())
+ 	Put_message(mrcl_get_message());
+       free(args[LM_MEMBER]);
+       args[LM_MEMBER] = canon;
+     }
  
    if ((status = do_mr_query("add_member_to_list", CountArgs(args), args,
  			    NULL, NULL)) != MR_SUCCESS)
***************
*** 717,722 ****
--- 705,730 ----
      {
        if ((status = do_mr_query("delete_member_from_list", CountArgs(args),
  				args, NULL, NULL)))
+ 	{
+ 	  if ((status == MR_STRING || status == MR_NO_MATCH) &&
+ 	      !strcmp(args[LM_TYPE], "KERBEROS"))
+ 	    {
+ 	      char *canon;
+ 	      mrcl_validate_kerberos_member(args[LM_MEMBER], &canon);
+ 	      if (mrcl_get_message())
+ 		{
+ 		  free(args[LM_MEMBER]);
+ 		  args[LM_MEMBER] = canon;
+ 		  if (do_mr_query("delete_member_from_list", CountArgs(args),
+ 				  args, NULL, NULL) == MR_SUCCESS)
+ 		    {
+ 		      Put_message(mrcl_get_message());
+ 		      status = MR_SUCCESS;
+ 		    }
+ 		}
+ 	    }
+ 	}
+       if (status)
  	com_err(program_name, status, " in DeleteMember");
        else
  	Put_message("Deletion Completed.");

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