Esempio n. 1
0
int AddPrintSrv(int argc, char **argv)
{
  char *info[MAX_ARGS_SIZE], **args, *name;
  int stat;

  name = canonicalize_hostname(strdup(argv[1]));

  if (!(stat = do_mr_query("get_print_server", 1, &name, NULL, NULL)))
    {
      Put_message ("A print server record for that host already exists.");
      free(name);
      return DM_NORMAL;
    }
  else if (stat != MR_NO_MATCH)
    {
      com_err(program_name, stat, " in AddPrintSrv");
      free(name);
      return DM_NORMAL;
    }

  args = AskPrintSrvInfo(SetPrintSrvDefaults(info, name));
  free(name);
  if (!args)
    {
      Put_message("Aborted.");
      return DM_NORMAL;
    }

  if ((stat = do_mr_query("add_print_server", CountArgs(args),
			  args, NULL, NULL)))
    com_err(program_name, stat, " in AddPrintSrv");

  FreeInfo(info);
  return DM_NORMAL;
}
Esempio n. 2
0
node 
*PRTdoPrint( node *syntaxtree)
{
  info *info;
  
  DBUG_ENTER("PRTdoPrint");

  DBUG_ASSERT( (syntaxtree!= NULL), "PRTdoPrint called with empty syntaxtree");

  printf( "\n\n------------------------------\n\n");

  info = MakeInfo();
  
  TRAVpush( TR_prt);

  syntaxtree = TRAVdo( syntaxtree, info);

  TRAVpop();

  info = FreeInfo(info);

  printf( "\n\n------------------------------\n\n");

  DBUG_RETURN( syntaxtree);
}
Esempio n. 3
0
int GetMemberInfo(char *action, char **ret_argv)
{
  char temp_buf[BUFSIZ];

  ret_argv[LM_LIST] = strdup(current_list);

  ret_argv[LM_TYPE] = strdup("user");
  if (GetTypeFromUser("Type of member", "member", &ret_argv[LM_TYPE]) ==
      SUB_ERROR)
    return SUB_ERROR;

  sprintf(temp_buf, "Name of %s to %s", ret_argv[LM_TYPE], action);
  ret_argv[LM_MEMBER] = strdup(user);
  if (GetValueFromUser(temp_buf, &ret_argv[LM_MEMBER]) == SUB_ERROR)
    return SUB_ERROR;
  ret_argv[LM_END] = NULL;		/* NULL terminate this list. */

  if (strcasecmp(ret_argv[LM_TYPE], "string") &&
      !ValidName(ret_argv[LM_MEMBER]))
    {
      FreeInfo(ret_argv);
      return SUB_ERROR;
    }
  return SUB_NORMAL;
}
Esempio n. 4
0
int AddACL(int argc, char **argv)
{
  char *info[MAX_ARGS_SIZE], **args;
  int stat;

  argv[1] = canonicalize_hostname(strdup(argv[1]));
  if (!(stat = do_mr_query("get_acl", 2, argv + 1, NULL, NULL)))
    {
      Put_message ("An ACL for that host and target already exists.");
      free(argv[1]);
      return DM_NORMAL;
    }
  else if (stat != MR_NO_MATCH)
    {
      com_err(program_name, stat, " in AddACL");
      free(argv[1]);
      return DM_NORMAL;
    }

  args = AskACLInfo(SetDefaults(info, argv[1], argv[2]));
  free(argv[1]);
  if (!args)
    {
      Put_message("Aborted.");
      return DM_NORMAL;
    }

  if ((stat = do_mr_query("add_acl", CountArgs(args), args, NULL, NULL)))
    com_err(program_name, stat, " in AddACL");

  FreeInfo(info);
  return DM_NORMAL;
}
Esempio n. 5
0
EXPORT_C void RMBufPacketBase::Free()
/**
Delete info and data
*/
	{
	FreeInfo();
	RMBufChain::Free();
	}
Esempio n. 6
0
int AddPrn(int argc, char **argv)
{
  char *info[MAX_ARGS_SIZE], **args;
  int stat;

  if (!ValidName(argv[1]))
    return DM_NORMAL;

  if (!(stat = do_mr_query("get_printer", 1, argv + 1, NULL, NULL)) ||
      !(stat = do_mr_query("get_printer_by_duplexname", 1, argv + 1,
			   NULL, NULL)))
    {
      Put_message ("A Printer by that name already exists.");
      return DM_NORMAL;
    }
  else if (stat != MR_NO_MATCH)
    {
      com_err(program_name, stat, " in AddPrn");
      return DM_NORMAL;
    }

  args = AskPrnInfo(SetDefaults(info, argv[1]), FALSE);
  if (!args)
    {
      Put_message("Aborted.");
      return DM_NORMAL;
    }

  if ((stat = do_mr_query("add_printer", CountArgs(args), args, NULL, NULL)))
    com_err(program_name, stat, " in AddPrn");

  if (stat == MR_SUCCESS && strcasecmp(info[PRN_HOSTNAME], "[NONE]"))
    {
      char *hwargv[2], *hwaddr, *s, *d;

      hwaddr = strdup("");
      if (GetValueFromUser("Hardware ethernet address", &hwaddr) == SUB_ERROR)
	return DM_NORMAL;

      s = d = hwaddr;
      do
	{
	  if (*s != ':')
	    *d++ = *s;
	}
      while (*s++);

      hwargv[0] = info[PRN_HOSTNAME];
      hwargv[1] = hwaddr;

      stat = do_mr_query("add_host_hwaddr", 2, hwargv, NULL, NULL);
      if (stat != MR_SUCCESS)
	com_err(program_name, stat, " in add_host_hwaddr");
    }
  
  FreeInfo(info);
  return DM_NORMAL;
}
Esempio n. 7
0
int AddMember(int argc, char **argv)
{
  char *args[10], temp_buf[BUFSIZ], *p;
  int status;
  struct mqelem *mailhubs, *elem;

  if (GetMemberInfo("add", args) == SUB_ERROR)
    return DM_NORMAL;

  if (!strcmp(args[LM_TYPE], "STRING"))
    {
      status = mrcl_validate_string_member(args[LM_MEMBER]);
      if (status != MRCL_SUCCESS)
	Put_message(mrcl_get_message());
      if (status == MRCL_REJECT)
	return DM_NORMAL;
    }
  else if (!strcmp(args[LM_TYPE], "KERBEROS"))
    {
      char *canon;

      status = mrcl_validate_kerberos_member(args[LM_MEMBER], &canon);
      if (mrcl_get_message())
	Put_message(mrcl_get_message());
      if (status == MRCL_REJECT)
	return DM_NORMAL;
      free(args[LM_MEMBER]);
      args[LM_MEMBER] = canon;
    }
  else if (!strcmp(args[LM_TYPE], "MACHINE"))
    {
      char *canon;
      canon = canonicalize_hostname(strdup(args[LM_MEMBER]));
      free(args[LM_MEMBER]);
      args[LM_MEMBER] = canon;
    }

  if ((status = do_mr_query("add_member_to_list", CountArgs(args), args,
			    NULL, NULL)) != MR_SUCCESS)
    {
      if (status == MR_EXISTS)
	{
	  sprintf(temp_buf, "The %s %s is already a member of LIST %s.",
		  args[LM_TYPE], args[LM_MEMBER], args[LM_LIST]);
	  Put_message(temp_buf);
	}
      else
	com_err(program_name, status, " in AddMember");
    }

  FreeInfo(args);
  return DM_NORMAL;
}
Esempio n. 8
0
// --------------------------------------------------------------------------
//
// Function
//		Name:    BackupStoreCheck::~BackupStoreCheck()
//		Purpose: Destructor
//		Created: 21/4/04
//
// --------------------------------------------------------------------------
BackupStoreCheck::~BackupStoreCheck()
{
	// Clean up
	FreeInfo();

	// Avoid an exception if we forget to discard mapNewRefs
	if (mapNewRefs.get())
	{
		mapNewRefs->Discard();
		mapNewRefs.reset();
	}
}
Esempio n. 9
0
int CreateFSAlias(int argc, char **argv)
{
  int stat;
  struct mqelem *elem, *top;
  char *args[MAX_ARGS_SIZE], buf[BUFSIZ], **info;

  elem = NULL;

  if (!ValidName(argv[1]))
    return DM_NORMAL;

  args[ALIAS_NAME] = strdup(argv[1]);
  args[ALIAS_TYPE] = strdup(FS_ALIAS_TYPE);
  args[ALIAS_TRANS] = strdup("*");

  /*
   * Check to see if this alias already exists in the database, if so then
   * print out values, free memory used and then exit.
   */

  if (!(stat = do_mr_query("get_alias", 3, args, StoreInfo, &elem)))
    {
      top = elem = QueueTop(elem);
      while (elem)
	{
	  info = elem->q_data;
	  sprintf(buf, "The alias: %s currently describes the filesystem %s",
		  info[ALIAS_NAME], info[ALIAS_TRANS]);
	  Put_message(buf);
	  elem = elem->q_forw;
	}
      FreeQueue(top);
      return DM_NORMAL;
    }
  else if (stat != MR_NO_MATCH)
    {
      com_err(program_name, stat, " in CreateFSAlias.");
      return DM_NORMAL;
    }

  args[ALIAS_TRANS] = strdup("");
  args[ALIAS_END] = NULL;
  if (GetValueFromUser("Which filesystem will this alias point to?",
		       &args[ALIAS_TRANS]) == SUB_ERROR)
    return DM_NORMAL;

  if ((stat = do_mr_query("add_alias", 3, args, NULL, NULL)))
    com_err(program_name, stat, " in CreateFSAlias.");

  FreeInfo(args);
  return DM_NORMAL;
}
Esempio n. 10
0
OBJError Mesh_Load( OBJ2 *obj, void *global, int obj_no, int flags )
{
	StoreInfo       *info;
	LWObjectFuncs   *objfunc;
	const char      *filename;

	if (global == NULL) return OBJ_PARM_ERROR;

	info = (StoreInfo *) calloc( 1, sizeof(StoreInfo) );
	if (info == NULL) return OBJ_MEM_ERROR;

	info->global   = (GlobalFunc *) global;
	info->obj      = obj;
	info->obj_no   = obj_no;
	info->flags    = flags;

	info->query    = (*info->global)( LWSTATEQUERYFUNCS_GLOBAL, GFUSE_TRANSIENT );
	info->surff    = (*info->global)( LWSURFACEFUNCS_GLOBAL   , GFUSE_TRANSIENT );
	info->txtrf    = (*info->global)( LWTEXTUREFUNCS_GLOBAL   , GFUSE_TRANSIENT );
	info->envlf    = (*info->global)( LWENVELOPEFUNCS_GLOBAL  , GFUSE_TRANSIENT );
	info->chaninfo = (*info->global)( LWCHANNELINFO_GLOBAL    , GFUSE_TRANSIENT );
	info->imglist  = (*info->global)( LWIMAGELIST_GLOBAL      , GFUSE_TRANSIENT );
	info->objfunc  = (*info->global)( LWOBJECTFUNCS_GLOBAL    , GFUSE_TRANSIENT );
	info->fileio   = (*info->global)( LWFILEIOFUNCS_GLOBAL    , GFUSE_TRANSIENT );

	if (info->surff   == NULL || 
        info->imglist == NULL || info->objfunc == NULL) return OBJ_PARM_ERROR;

	objfunc   = info->objfunc;
	obj->type = LWO2_FILE;
	filename  = (*objfunc->filename)( obj_no );
	if (filename) {
		strcpy( obj->name, filename );
	} else {
		strcpy( obj->name, (*objfunc->userName)( obj_no ) );
	}
									/*  Store Surface Info  */
	StoreSurfaces( info );
									/*  Store Image Info  */
	StoreImages( info );

	if (flags & MESH_FLAG_MERGE) {
		StorePoints  ( info );
		StorePolygons( info );
	} else {
		StoreMeshes  ( info );
	}

	FreeInfo( info );

	return OBJ_NO_ERROR;
}
Esempio n. 11
0
int DeleteMember(int argc, char **argv)
{
  char *args[10];
  int status;

  if (GetMemberInfo("delete", args) == SUB_ERROR)
    return DM_NORMAL;

  if (Confirm("Are you sure you want to delete this member?"))
    {
      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;
		    }
		}
	    }
	  else if ((status == MR_MACHINE || status == MR_NO_MATCH) &&
		   !strcmp(args[LM_TYPE], "MACHINE"))
	    {
	      char *canon;
	      canon = canonicalize_hostname(args[LM_MEMBER]);
	      args[LM_MEMBER] = canon;
	      if (do_mr_query("delete_member_from_list", CountArgs(args),
			      args, NULL, NULL) == MR_SUCCESS)
		status = MR_SUCCESS;
	    }
	}
      if (status)
	com_err(program_name, status, " in DeleteMember");
      else
	Put_message("Deletion Completed.");
    }
  else
    Put_message("Deletion has been Aborted.");

  FreeInfo(args);
  return DM_NORMAL;
}
Esempio n. 12
0
void ServiceStop(void)
{
  DWORD i;
  for(i=0;i<GetThreadCount();i++)
    if(hServerStopEvent[i])
      SetEvent(hServerStopEvent[i]);
  FreeInfo();
  WaitForMultipleObjects(GetThreadCount(),threads,TRUE,INFINITE);
  for(i=0;i<GetThreadCount();i++)
    CloseHandle(threads[i]);
  FreeNotify();
  free(pipe_sd); pipe_sd=NULL;
}
Esempio n. 13
0
//start traversal
node *CTchecktypes( node *syntaxtree){
	DBUG_ENTER("CTchecktypes");

	info *arg_info;

  TRAVpush( TR_ct);   // Push traversal "link" as defined in ast.xml
  arg_info = MakeInfo();
  syntaxtree = TRAVdo( syntaxtree, arg_info);   // Initiate ast traversal

  TRAVpop();          // Pop current traversal
  arg_info = FreeInfo(arg_info);
  
  DBUG_RETURN( syntaxtree);
}
Esempio n. 14
0
void ChangePrintSrvLoop(char **info, Bool one)
{
  int stat;

  if (!AskPrintSrvInfo(info))
    return;

  if ((stat = do_mr_query("update_print_server", CountArgs(info),
			  info, NULL, NULL)))
    com_err(program_name, stat, " in ChangePrintSrv");

  FreeInfo(info);
  return;
}
Esempio n. 15
0
node *COPdoCountOperators( node *syntaxtree)
{
  info *arg_info;

  DBUG_ENTER("COPdoCountOperators");

  arg_info = MakeInfo();

  TRAVpush( TR_cop);
  syntaxtree = TRAVdo( syntaxtree, arg_info);
  TRAVpop();

 
  arg_info = FreeInfo( arg_info);

  DBUG_RETURN( syntaxtree);
}
Esempio n. 16
0
int AddNFSService(int argc, char **argv)
{
  char **add_args, *args[10];
  char *info[MAX_ARGS_SIZE];
  int stat;

  args[0] = canonicalize_hostname(strdup(argv[1]));
  args[1] = strdup(DEFAULT_DIR);
  if (GetValueFromUser("Directory:", &args[1]) == SUB_ERROR)
    return DM_NORMAL;

  if (!ValidName(args[0]) || !ValidName(args[1]))
    return DM_NORMAL;

  if (!(stat = do_mr_query("get_nfsphys", 2, args, NULL, NULL)))
    stat = MR_EXISTS;
  if (stat != MR_NO_MATCH)
    {
      com_err(program_name, stat, " in get_nfsphys.");
      return DM_NORMAL;
    }

  info[NFS_NAME]   = strdup(args[0]);
  info[NFS_DIR]    = args[1];	/* already saved. */
  info[NFS_DEVICE] = strdup(DEFAULT_DEVICE);
  info[NFS_STATUS] = strdup(DEFAULT_STATUS);
  info[NFS_ALLOC]  = strdup(DEFAULT_ALLOC);
  info[NFS_SIZE]   = strdup(DEFAULT_SIZE);
  info[NFS_MODBY] = info[NFS_MODWITH] = info[NFS_MODTIME] = NULL;
  info[NFS_END] = NULL;

  if (!(add_args = AskNFSInfo(info)))
    {
      Put_message("Aborted.");
      return DM_NORMAL;
    }

  if ((stat = do_mr_query("add_nfsphys", CountArgs(add_args), add_args,
			  NULL, NULL)))
    com_err(program_name, stat, " in AdsNFSService");

  FreeInfo(info);
  free(args[0]);
  return DM_NORMAL;
}
Esempio n. 17
0
int AddNewUser(int argc, char **argv)
{
  int status;
  char **args, *info[MAX_ARGS_SIZE];

  if (!(args = AskUserInfo(SetUserDefaults(info), FALSE)))
    {
      Put_message("Aborted.");
      return DM_NORMAL;
    }
  if ((status = do_mr_query("add_user_account", CountArgs(args),
			    args, NULL, NULL)))
    com_err(program_name, status, " in add_user_account");
  else
    Put_message("New user added to database.");
  FreeInfo(args);
  return DM_NORMAL;
}
Esempio n. 18
0
node *COPYdoCopy( node *arg_node) 
{
  node *result = NULL;
  info *info = NULL;
  
  DBUG_ENTER("COPYdoCopy");

  if (arg_node != NULL) {
    info = MakeInfo();
    TRAVpush( TR_copy);

    result = TRAVdo( arg_node, info);

    TRAVpop();
    info = FreeInfo( info);
  }

  DBUG_RETURN( result);
}
Esempio n. 19
0
node *
FREEdoFreeTree (node * free_node)
{
  info *arg_info;

  DBUG_ENTER ("FREEfreeTree");
 // printf("it is here in Free now\n");
  arg_info = MakeInfo ();
  INFO_FREE_FLAG (arg_info) = NULL;

  TRAVpush (TR_free);

  free_node = TRAVdo (free_node, arg_info);

  TRAVpop (TR_free);

  arg_info = FreeInfo (arg_info);

  DBUG_RETURN (free_node);
}
Esempio n. 20
0
node *
FREEdoFreeNode (node * free_node)
{
  info *arg_info;

  DBUG_ENTER ("FREEfreeNode");

  arg_info = MakeInfo ();

  INFO_FREE_FLAG (arg_info) = free_node;

  TRAVpush (TR_free);

  free_node = TRAVdo (free_node, arg_info);

  TRAVpop ();

  arg_info = FreeInfo (arg_info);

  DBUG_RETURN (free_node);
}
Esempio n. 21
0
node *CTPdoLinkVar(node *syntaxtree)
{
    info *info;

    DBUG_ENTER("CTPdoLinkVar");

    DBUG_ASSERT( ( syntaxtree != NULL), "CTPdoLink called with empty syntaxtree");

    info = MakeInfo();

    TRAVpush(TR_lvar);

    syntaxtree = TRAVdo( syntaxtree, info);

    //report_unlinked_identifiers(info);

    TRAVpop();

    info = FreeInfo( info);

    DBUG_RETURN( syntaxtree);
}
Esempio n. 22
0
int TagMember(int argc, char **argv)
{
  char *args[10];
  int status;

  if (GetMemberInfo("tag", args) == SUB_ERROR)
    return DM_NORMAL;

  args[LM_TAG] = strdup("");
  if (GetValueFromUser("Tag" , &args[LM_TAG]) == SUB_ERROR)
    {
      Put_message("Aborted.");
      return DM_NORMAL;
    }
  args[LM_TAG_END] = NULL;		/* NULL terminate this list. */

  if ((status = do_mr_query("tag_member_of_list", CountArgs(args),
			    args, NULL, NULL)))
    com_err(program_name, status, " in TagMember");

  FreeInfo(args);
  return DM_NORMAL;
}
Esempio n. 23
0
static void RealDeactivateUser(char **info, Bool one_item)
{
  int status;
  char txt_buf[BUFSIZ];
  char *qargs[2], **args;
  struct mqelem *elem = NULL;

  if (one_item)
    {
      sprintf(txt_buf, "Deactivate user %s (y/n)", info[NAME]);
      if (YesNoQuestion(txt_buf, FALSE) != TRUE)
	return;
    }

  qargs[0] = info[NAME];
  qargs[1] = "3";
  if ((status = do_mr_query("update_user_status", 2, qargs, NULL, NULL)))
    {
      com_err(program_name, status, " in update_user_status");
      sprintf(txt_buf, "User %s not deactivated due to errors.", info[NAME]);
      Put_message(txt_buf);
    }
  else if (YesNoQuestion("Also deactivate matching list and filesystem (y/n)",
			 FALSE) == TRUE)
    {
      status = do_mr_query("get_list_info", 1, &(info[NAME]), StoreInfo,
			   &elem);
      if (status == MR_SUCCESS)
	{
	  args = QueueTop(elem)->q_data;
	  free(args[L_ACTIVE]);
	  args[L_ACTIVE] = strdup("0");
	  FreeAndClear(&args[L_MODTIME], TRUE);
	  FreeAndClear(&args[L_MODBY], TRUE);
	  FreeAndClear(&args[L_MODWITH], TRUE);
	  SlipInNewName(args, strdup(args[L_NAME]));
	  if ((status = do_mr_query("update_list", CountArgs(args), args,
				    NULL, NULL)))
	    {
	      com_err(program_name, status, " updating list, "
		      "not deactivating list or filesystem");
	      FreeInfo(args);
	      FreeQueue(elem);
	      return;
	    }
	  FreeInfo(args);
	  FreeQueue(elem);
	  elem = NULL;
	}
      else if (status != MR_NO_MATCH)
	{
	  com_err(program_name, status, " getting list info, "
		  "not deactivating list or filesystem");
	  return;
	}

      if ((status = do_mr_query("get_filesys_by_label", 1, &(info[NAME]),
				StoreInfo, &elem)))
	{
	  com_err(program_name, status, " getting filsys info, "
		  "not deactivating filesystem");
	  return;
	}
      args = QueueTop(elem)->q_data;
      free(args[FS_TYPE]);
      args[FS_TYPE] = strdup("ERR");
      free(args[FS_COMMENTS]);
      args[FS_COMMENTS] = strdup("Locker disabled; call 3-1325 for help");
      FreeAndClear(&args[FS_MODTIME], TRUE);
      FreeAndClear(&args[FS_MODBY], TRUE);
      FreeAndClear(&args[FS_MODWITH], TRUE);
      SlipInNewName(args, strdup(args[FS_NAME]));
      if ((status = do_mr_query("update_filesys", CountArgs(args), args,
				NULL, NULL)))
	{
	  com_err(program_name, status, " updating filesystem, "
		  "not deactivating filesystem");
	  FreeInfo(args);
	  FreeQueue(elem);
	  return;
	}
      FreeInfo(args);
      FreeQueue(elem);
    }
}
Esempio n. 24
0
CNCSThread::~CNCSThread() 
{
	if( Terminate() ) {
		FreeInfo();
	}
}
Esempio n. 25
0
int AddList(int argc, char **argv)
{
  static char *info[MAX_ARGS_SIZE], **add_args;
  int status, ret_code = SUB_NORMAL;
  struct mqelem *elem = NULL;

  if (!ValidName(argv[1]))
    return DM_NORMAL;
  status = do_mr_query("get_list_info", 1, argv + 1, NULL, NULL);
  if (status != MR_NO_MATCH)
    {
      if (status == MR_SUCCESS)
	Put_message("This list already exists.");
      else
	com_err(program_name, status, " in AddList.");
      return SUB_ERROR;
    }

  if (status = mr_access("add_list", L_MODTIME, SetDefaults(info, argv[1]))) 
    {
      com_err(program_name, status, " in AddList.");
      return SUB_ERROR;
    }

  /*
   * If the listname is less than 8 characters, make sure it doesn't
   * collide with a username.
   */
  if ((strlen(argv[1]) <= 8) &&
      do_mr_query("get_user_account_by_login", 1, argv + 1,
		  StoreInfo, &elem) != MR_NO_MATCH)
    {
      char buf[256];

      sprintf(buf, "\nA user by the name `%s' already exists in the database.",
	      argv[1]);
      Put_message(buf);
      Loop(QueueTop(elem), FreeInfo);
      FreeQueue(elem);
      if (YesNoQuestion("Create a list with the same name", FALSE) != TRUE)
	return SUB_ERROR;
    }

  if (!(add_args = AskListInfo(SetDefaults(info, argv[1]), FALSE)))
    {
      Put_message("Aborted.");
      return SUB_ERROR;
    }

  if ((status = do_mr_query("add_list", CountArgs(add_args), add_args,
			    NULL, NULL)) != MR_SUCCESS)
    {
      com_err(program_name, status, " in AddList.");
      Put_message("List Not Created.");
      ret_code = SUB_ERROR;
    }

  if (atoi(add_args[L_MAILMAN]))
    {
      char mailman_address[256], buf[1024];

      status = do_mr_query("get_list_info", 1, add_args, StoreInfo, &elem);
      if (status)
	  com_err(program_name, status, "while retrieving list information.");
      else
	{
	  strcpy(mailman_address, add_args[0]);
	  strcat(mailman_address, "@");
	  strcat(mailman_address, ((char **)elem->q_data)[L_MAILMAN_SERVER]);
	  sprintf(buf, "Add STRING %s to LIST %s", mailman_address,
		  add_args[0]);
	  if (YesNoQuestion(buf, TRUE) == TRUE)
	    {
	      char *args[3];
	      args[0] = add_args[0];
	      args[1] = "STRING";
	      args[2] = mailman_address;
	      
	      status = do_mr_query("add_member_to_list", CountArgs(args), args,
				   NULL, NULL);
	      if (status)
		com_err(program_name, status, "while adding member to list.");
	    }
	}
    }

  FreeInfo(info);
  return ret_code;
}
Esempio n. 26
0
int AddFS(int argc, char **argv)
{
  char *info[MAX_ARGS_SIZE], **args, buf[BUFSIZ];
  int stat;
  extern Menu nfsphys_menu;

  if (!ValidName(argv[1]))
    return DM_NORMAL;

  if (!(stat = do_mr_query("get_filesys_by_label", 1, argv + 1,
			      NULL, NULL)))
    {
      Put_message ("A Filesystem by that name already exists.");
      return DM_NORMAL;
    }
  else if (stat != MR_NO_MATCH)
    {
      com_err(program_name, stat, " in AddFS");
      return DM_NORMAL;
    }

  if (!(args = AskFSInfo(SetDefaults(info, argv[1]), FALSE)))
    {
      Put_message("Aborted.");
      return DM_NORMAL;
    }

  stat = do_mr_query("add_filesys", CountArgs(args), args, NULL, NULL);
  switch (stat)
    {
    case MR_NFS:
      Put_message("That NFS filesystem is not exported.");
      if (YesNoQuestion("Fix this now (Y/N)", TRUE) == TRUE)
	{
	  Do_menu(&nfsphys_menu, 0, NULL);
	  if (YesNoQuestion("Retry filesystem creation now (Y/N)", TRUE)
	      == TRUE) {
	    if ((stat = do_mr_query("add_filesys", CountArgs(args), args,
				    NULL, NULL)))
	      com_err(program_name, stat, " in AddFS");
	    else
	      Put_message("Created.");
	  }
	}
      break;
    case MR_SUCCESS:
      break;
    default:
      com_err(program_name, stat, " in AddFS");
    }

  if (stat == MR_SUCCESS && !strcasecmp(info[FS_L_TYPE], "HOMEDIR"))
    {
      static char *val[] = {"def_quota", NULL};
      static char *def_quota = NULL;
      char *argv[Q_QUOTA + 1];
      struct mqelem *top = NULL;

      if (!def_quota)
	{
	  stat = do_mr_query("get_value", CountArgs(val), val,
			     StoreInfo, &top);
	  if (stat != MR_SUCCESS)
	    com_err(program_name, stat, " getting default quota");
	  else
	    {
	      top = QueueTop(top);
	      def_quota = strdup(((char **)top->q_data)[0]);
	      FreeQueue(top);
	    }
	}
      if (def_quota)
	{
	  sprintf(buf, "Give user %s a quota of %s on filesys %s (Y/N)",
		  info[FS_NAME], def_quota, info[FS_NAME]);
	  if (YesNoQuestion(buf, 1) == TRUE)
	    {
	      argv[Q_NAME] = argv[Q_FILESYS] = info[FS_NAME];
	      if (!strcmp(info[FS_TYPE], "NFS"))
		argv[Q_TYPE] = "USER";
	      else
		argv[Q_TYPE] = "ANY";
	      argv[Q_QUOTA] = def_quota;
	      if ((stat = do_mr_query("add_quota", Q_QUOTA + 1, argv, NULL,
				      NULL)))
		com_err(program_name, stat, " while adding quota");
	    }
	}
    }
  else if (stat == MR_SUCCESS)
    {
      if (YesNoQuestion("Assign a quota on this filesystem (Y/N)", 1) == TRUE)
	{
	  parsed_argc = 1;
	  parsed_argv[0] = info[FS_NAME];
	  AddQuota(parsed_argc, parsed_argv);
	}
    }

  FreeInfo(info);
  return DM_NORMAL;
}
Esempio n. 27
0
int RegisterUser(int argc, char **argv)
{
  char *args[MAX_ARGS_SIZE];
  char *login, *potype = NULL;
  char temp_buf[BUFSIZ];
  int status, i;

  for (i = 0; i < MAX_ARGS_SIZE; i++)
    args[i] = NULL;

  Put_message("This function has NO kerberos support, so strange things");
  Put_message("may happen if you use it to register a user.");

  switch (YesNoQuestion("Do you know the users UID Number (y/n)", FALSE))
    {
    case TRUE:
      Prompt_input("What is the UID number of the user? ", temp_buf, BUFSIZ);
      args[0] = strdup(temp_buf);
      break;
    case FALSE:
      if (!(args[0] = GetUidNumberFromName()))
	return DM_NORMAL;
      break;
    default:
      return DM_NORMAL;
    }

  sprintf(temp_buf, "u%s", args[0]);
  login = strdup(temp_buf);
  if (GetValueFromUser("Login name for this user? ", &login) == SUB_ERROR)
    {
      args[1] = login;
      FreeInfo(args);	   /* This work because the NULL temination is ok. */
      return DM_NORMAL;
    }
  Put_message("KERBEROS code not added, did not reserve name with kerberos.");
  args[1] = login;
  
  sprintf(temp_buf, "EXCHANGE");
  potype = strdup(temp_buf);
  if (GetValueFromUser("P.O. Box Type for this user? ", &potype) == SUB_ERROR)
    {
      args[2] = potype;
      FreeInfo(args);
      return DM_NORMAL;
    }
  if (strcmp(potype, "POP") && strcmp(potype, "IMAP") && strcmp(potype, "EXCHANGE"))
    {
      sprintf(temp_buf, "Unknown P.O. Box type.");
      Put_message(temp_buf);
      FreeInfo(args);
      return DM_NORMAL;
    }
  args[2] = potype;
  args[3] = NULL;

  switch ((status = do_mr_query("register_user", CountArgs(args),
				args, NULL, NULL)))
    {
    case MR_SUCCESS:
      sprintf(temp_buf, "User %s successfully registered.", login);
      Put_message(temp_buf);
      SetUserPassword(login);
      break;
    case MR_IN_USE:
      GiveBackLogin(login);
      sprintf(temp_buf, "The username %s is already in use.", login);
      Put_message(temp_buf);
      break;
    default:
      com_err(program_name, status, " in register_user");
      break;
    }
  FreeInfo(args);
  return DM_NORMAL;
}