Ejemplo n.º 1
0
int CheckListForDeletion(char *name, Bool verbose)
{
  struct mqelem *elem = NULL;
  int status;
  char *args[2], buf[BUFSIZ], **info;

  if ((status = do_mr_query("count_members_of_list", 1, &name, StoreInfo,
			    &elem)))
    {
      com_err(program_name, status, " in DeleteList (count_members_of_list).");
      return SUB_NORMAL;
    }
  info = elem->q_data;
  if (!strcmp(info[NAME], "0"))
    {
      if (verbose)
	{
	  sprintf(buf, "Delete the empty list %s? ", name);
	  switch (YesNoQuestion(buf, FALSE))
	    {
	    case TRUE:
	      break;
	    case FALSE:
	      Put_message("Not deleting this list.");
	      FreeQueue(elem);
	      return SUB_NORMAL;
	    default:
	      Put_message("Aborting Deletion!");
	      FreeQueue(elem);
	      return SUB_ERROR;
	    }
	}
      args[0] = "foo";		/* not used. */
      args[1] = name;
      DeleteList(2, args);
    }
  FreeQueue(elem);
  return SUB_NORMAL;
}
Ejemplo n.º 2
0
Archivo: misc.c Proyecto: jdreed/moira
int ShowValue(int argc, char **argv)
{
  int status;
  struct mqelem *elem = NULL;

  if ((status = do_mr_query("get_value", 1, &argv[1], StoreInfo, &elem)))
    {
      com_err(program_name, status, " in ShowValue");
      return DM_NORMAL;
    }
  Loop(elem, PrintValue);
  FreeQueue(elem);
  return DM_NORMAL;
}
Ejemplo n.º 3
0
Archivo: misc.c Proyecto: jdreed/moira
int TableStats(int argc, char **argv)
{
  int status;
  struct mqelem *elem = NULL;

  if ((status = do_mr_query("get_all_table_stats", 0, NULL, StoreInfo, &elem)))
    {
      com_err(program_name, status, " in TableStats");
      return DM_NORMAL;
    }
  Loop(QueueTop(elem), PrintStats);
  FreeQueue(elem);
  return DM_NORMAL;
}
Ejemplo n.º 4
0
Archivo: misc.c Proyecto: jdreed/moira
int ShowClients(int argc, char **argv)
{
  int status;
  struct mqelem *elem = NULL;

  if ((status = do_mr_query("_list_users", 0, NULL, StoreInfo, &elem)))
    {
      com_err(program_name, status, " in ShowClients");
      return DM_NORMAL;
    }
  Loop(QueueTop(elem), PrintClients);
  FreeQueue(elem);
  return DM_NORMAL;
}
Ejemplo n.º 5
0
int ShowListInfo(int argc, char **argv)
{
  struct mqelem *top, *list;

  top = list = GetListInfo(LIST, argv[1], NULL);
  while (list)
    {
      PrintListInfo(list->q_data);
      list = list->q_forw;
    }

  FreeQueue(top);
  return DM_NORMAL;
}
Ejemplo n.º 6
0
int AddFSToGroup(int argc, char **argv)
{
  int stat, count;
  struct mqelem *elem = NULL;
  char buf[BUFSIZ], *args[5], *bufp;

  if ((stat = do_mr_query("get_fsgroup_members", 1, argv + 1, StoreInfo,
			  &elem)))
    {
      if (stat != MR_NO_MATCH)
	com_err(program_name, stat, " in AddFSToGroup");
    }
  if (elem == NULL)
    {
      args[0] = argv[1];
      args[1] = argv[2];
      args[2] = "M";
      stat = do_mr_query("add_filesys_to_fsgroup", 3, args, NULL, NULL);
      if (stat)
	com_err(program_name, stat, " in AddFSToGroup");
      return DM_NORMAL;
    }
  elem = QueueTop(elem);
  fsgCount = 1;
  Loop(elem, PrintFSGMembers);
  sprintf(buf, "%d", QueueCount(elem));
  bufp = strdup(buf);
  if (GetValueFromUser("Enter number of filesystem it should follow "
		       "(0 to make it first):", &bufp) == SUB_ERROR)
    return DM_NORMAL;
  count = atoi(bufp);
  free(bufp);
  args[2] = SortAfter(elem, count);

  FreeQueue(QueueTop(elem));
  args[0] = argv[1];
  args[1] = argv[2];
  stat = do_mr_query("add_filesys_to_fsgroup", 3, args, NULL, NULL);
  if (stat == MR_EXISTS)
    {
      Put_message("That filesystem is already a member of the group.");
      Put_message("Use the order command if you want to change the "
		  "sorting order.");
    }
  else if (stat)
    com_err(program_name, stat, " in AddFSToGroup");
  return DM_NORMAL;
}
Ejemplo n.º 7
0
static void RealDeleteNFSService(char **info, Bool one_item)
{
  char temp_buf[BUFSIZ], *args[10];
  struct mqelem *elem = NULL;
  int stat;

  sprintf(temp_buf,
	  "Are you sure that you want to delete the %s directory on %s",
	  info[NFS_DIR], info[NFS_NAME]);

  /*
   * Check to be sure that it is not used by any of the nfs packs.
   */

  if (!one_item || Confirm(temp_buf))
    {
      args[0] = info[NFS_NAME];
      args[1] = info[NFS_DIR];
      args[2] = NULL;
      switch ((stat = do_mr_query("get_filesys_by_nfsphys", CountArgs(args),
				  args, StoreInfo, &elem)))
	{
	case MR_NO_MATCH:	/* it is unused, delete it. */
	  if ((stat = do_mr_query("delete_nfsphys", 2, info, NULL, NULL)))
	    com_err(program_name, stat, " in DeleteNFSService");
	  else
	    Put_message("Physical Filesystem Deleted.");
	  break;
	case MR_SUCCESS:	/* it is used, print filesys's that use it. */
	  elem = QueueTop(elem);
	  Put_message("The following fileystems are using this partition,");
	  Put_message("and must be removed before it can be deleted.");
	  Put_message("");
	  Loop(elem, FSPartPrint);

	  FreeQueue(elem);
	  Put_message("");
	  break;
	default:
	  com_err(program_name, stat, " while checking usage of partition");
	}
    }
  else
    Put_message("Physical filesystem not deleted.");
}
Ejemplo n.º 8
0
Archivo: misc.c Proyecto: jdreed/moira
int ShowAlias(int argc, char **argv)
{
  int status;
  char *info[4];
  struct mqelem *elem = NULL;

  info[0] = argv[1];
  info[1] = argv[2];
  info[2] = "*";
  if ((status = do_mr_query("get_alias", 3, info, StoreInfo, &elem)))
    {
      com_err(program_name, status, " in ShowAlias");
      return DM_NORMAL;
    }
  Loop(QueueTop(elem), PrintAlias);
  FreeQueue(elem);
  return DM_NORMAL;
}
Ejemplo n.º 9
0
int GetFS(int argc, char **argv)
{
  struct mqelem *top;
  char *fs_label;

  fs_label = argv[1];

  top = GetFSInfo(ALIAS_CHECK, argv[1]);
  if (top != NULL) {
    Loop(top, (void (*)(char **))GetFSLabel);
    fs_label = labelbuf;
  }

  top = GetFSInfo(LABEL, fs_label); /* get info. */
  Loop(top, (void (*)(char **))PrintFSInfo);
  FreeQueue(top);		/* clean the queue. */
  return DM_NORMAL;
}
Ejemplo n.º 10
0
static void RealUpdateList(char **info, Bool junk)
{
  int stat;
  char **args;
  struct mqelem *elem = NULL;

  if (!(args = AskListInfo(info, TRUE)))
    {
      Put_message("Aborted.");
      return;
    }

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

      sprintf(buf, "\nA user by the name `%s' already exists in the database.",
	      args[1]);
      Put_message(buf);
      Loop(QueueTop(elem), FreeInfo);
      FreeQueue(elem);
      if (YesNoQuestion("Do you still want to rename this list to that name",
			FALSE) != TRUE)
	{
	  Put_message("List ** NOT ** Updated.");
	  return;
	}
    }

  if ((stat = do_mr_query("update_list", CountArgs(args), args,
			  NULL, NULL)) != MR_SUCCESS)
    {
      com_err(program_name, stat, " in UpdateList.");
      Put_message("List ** NOT ** Updated.");
    }
  else
    Put_message("List successfully updated.");
}
Ejemplo n.º 11
0
int GetPrintSrv(int argc, char **argv)
{
  int stat;
  struct mqelem *elem = NULL, *top;
  char *name;

  name = canonicalize_hostname(strdup(argv[1]));
  stat = do_mr_query("get_print_server", 1, &name, StoreInfo, &elem);
  if (stat)
    {
      com_err(program_name, stat, " in GetPrintSrv");
      return DM_NORMAL;
    }

  top = QueueTop(elem);
  Loop(top, (void (*)(char **)) PrintPrintSrvInfo);
  FreeQueue(top);		/* clean the queue. */
  return DM_NORMAL;
}
Ejemplo n.º 12
0
int ChangePrintSrv(int argc, char **argv)
{
  char *name;
  struct mqelem *elem = NULL;
  int stat;

  name = canonicalize_hostname(strdup(argv[1]));
  if ((stat = do_mr_query("get_print_server", 1, &name, StoreInfo, &elem)))
    {
      free(name);
      com_err(program_name, stat, " in ChangePrintSrv");
      return DM_NORMAL;
    }
  free(name);

  QueryLoop(elem, NullPrint, ChangePrintSrvLoop, "Change the print server");
  FreeQueue(elem);
  return DM_NORMAL;
}
Ejemplo n.º 13
0
Server* NewServer(AddressType type, char* host, aio4c_port_t port, int bufferSize, int nbPipes, void (*handler)(Event,Connection*,void*), void* handlerArg, void* (*dataFactory)(Connection*,void*)) {
    Server* server = NULL;
    ErrorCode code = AIO4C_ERROR_CODE_INITIALIZER;

    if ((server = aio4c_malloc(sizeof(Server))) == NULL) {
#ifndef AIO4C_WIN32
        code.error = errno;
#else /* AIO4C_WIN32 */
        code.source = AIO4C_ERRNO_SOURCE_SYS;
#endif /* AIO4C_WIN32 */
        code.size = sizeof(Server);
        code.type = "Server";
        Raise(AIO4C_LOG_LEVEL_ERROR, AIO4C_ALLOC_ERROR_TYPE, AIO4C_ALLOC_ERROR, &code);
        return NULL;
    }

    server->address    = NewAddress(type, host, port);
    server->pool       = NewBufferPool(bufferSize);
    server->factory    = NewConnectionFactory(server->pool, dataFactory, handlerArg);
    server->acceptor   = NULL;
    server->thread     = NULL;
    server->handler    = handler;
    server->queue      = NewQueue();
    server->nbPipes    = nbPipes;
    server->thread     = NewThread(
            "server",
            _serverInit,
            _serverRun,
            _serverExit,
            (ThreadData)server);

    if (server->thread == NULL) {
        FreeAddress(&server->address);
        FreeBufferPool(&server->pool);
        FreeConnection(&server->factory);
        FreeQueue(&server->queue);
        aio4c_free(server);
        return NULL;
    }

    return server;
}
Ejemplo n.º 14
0
static	void
TermThread(
	TermNode	*term)
{
	PacketClass klass;

ENTER_FUNC;
	klass = RecvPacketClass(term->fp);
	switch (klass) {
	case WFC_TERM_INIT:
		TermInit(term);
		break;
	case WFC_TERM:
		TermSession(term);
		break;
	case WFC_API:
		APISession(term);
		break;
	}
	FreeQueue(term->que);
	xfree(term);
LEAVE_FUNC;
}
Ejemplo n.º 15
0
int RemoveItemFromLists(char *name, char *type, struct mqelem **elem,
			int verbose)
{
  struct mqelem *local;
  char *args[10], temp_buf[BUFSIZ];
  int lists;
  int status;

  args[0] = type;
  args[1] = name;
  *elem = NULL;

  /*
   * Get all list of which this item is a member, and store them in a queue.
   */

  status = do_mr_query("get_lists_of_member", 2, args, StoreInfo, elem);

  if (status == MR_NO_MATCH)
    return SUB_NORMAL;

  if (status != MR_SUCCESS)
    {
      com_err(program_name, status, " in DeleteList (get_lists_of_member).");
      return SUB_ERROR;
    }

  /*
   * If verbose mode, ask user of we should remove our list from
   * all these lists.
   */

  local = *elem = QueueTop(*elem);
  lists = QueueCount(*elem);
  if (lists == 0)
    return SUB_NORMAL;
  if (verbose)
    {
      sprintf(temp_buf, "%s %s is a member of %d other list%s.\n", type,
	      name, lists, ((lists == 1) ? "" : "s"));
      Put_message(temp_buf);
      while (local)
	{
	  char **info = local->q_data;
	  Print(1, &info[GLOM_NAME], (char *) NULL);
	    local = local->q_forw;
	}
	Put_message(" ");	/* Blank Line. */
	sprintf(temp_buf, "Remove %s %s from these lists? ", type, name);
	if (YesNoQuestion(temp_buf, FALSE) != TRUE)
	  {
	    Put_message("Aborting...");
	    FreeQueue(*elem);
	    *elem = NULL;
	    return SUB_ERROR;
	  }
    }

  /*
   * Remove this list from all lists that it is a member of.
   */

  local = *elem;
  args[DM_MEMBER] = name;
  args[DM_TYPE] = type;
  while (local)
    {
      char **info = local->q_data;
      args[DM_LIST] = info[GLOM_NAME];
      if ((status = do_mr_query("delete_member_from_list",
				3, args, NULL, NULL)))
	{
	  com_err(program_name, status, " in delete_member\nAborting\n");
	  FreeQueue(*elem);
	  return SUB_ERROR;
	}
      local = local->q_forw;
    }
  return SUB_NORMAL;
}
Ejemplo n.º 16
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;
}
Ejemplo n.º 17
0
/* init board, route traces*/
void PCB_EDIT_FRAME::Autoroute( wxDC* DC, int mode )
{
    int      start, stop;
    MODULE*  Module = NULL;
    D_PAD*   Pad    = NULL;
    int      autoroute_net_code = -1;
    wxString msg;

    if( GetBoard()->GetCopperLayerCount() > 1 )
    {
        g_Route_Layer_TOP    = GetScreen()->m_Route_Layer_TOP;
        g_Route_Layer_BOTTOM = GetScreen()->m_Route_Layer_BOTTOM;
    }
    else
    {
        g_Route_Layer_TOP = g_Route_Layer_BOTTOM = LAYER_N_BACK;
    }

    switch( mode )
    {
    case ROUTE_NET:
        if( GetScreen()->GetCurItem() )
        {
            switch( GetScreen()->GetCurItem()->Type() )
            {
            case PCB_PAD_T:
                Pad = (D_PAD*) GetScreen()->GetCurItem();
                autoroute_net_code = Pad->GetNetCode();
                break;

            default:
                break;
            }
        }
        if( autoroute_net_code <= 0 )
        {
            wxMessageBox( _( "Net not selected" ) ); return;
        }
        break;

    case ROUTE_MODULE:
        Module = (MODULE*) GetScreen()->GetCurItem();
        if( (Module == NULL) || (Module->Type() != PCB_MODULE_T) )
        {
            wxMessageBox( _( "Module not selected" ) );
            return;
        }
        break;

    case ROUTE_PAD:
        Pad = (D_PAD*) GetScreen()->GetCurItem();

        if( (Pad == NULL)  || (Pad->Type() != PCB_PAD_T) )
        {
            wxMessageBox( _( "Pad not selected" ) );
            return;
        }

        break;
    }

    if( (GetBoard()->m_Status_Pcb & LISTE_RATSNEST_ITEM_OK ) == 0 )
        Compile_Ratsnest( DC, true );

    /* Set the flag on the ratsnest to CH_ROUTE_REQ. */
    for( unsigned ii = 0; ii < GetBoard()->GetRatsnestsCount(); ii++ )
    {
        RATSNEST_ITEM* ptmp = &GetBoard()->m_FullRatsnest[ii];
        ptmp->m_Status &= ~CH_ROUTE_REQ;

        switch( mode )
        {
        case ROUTE_ALL:
            ptmp->m_Status |= CH_ROUTE_REQ;
            break;

        case ROUTE_NET:
            if( autoroute_net_code == ptmp->GetNet() )
                ptmp->m_Status |= CH_ROUTE_REQ;
            break;

        case ROUTE_MODULE:
        {
            D_PAD* pt_pad = (D_PAD*) Module->Pads();
            for( ; pt_pad != NULL; pt_pad = pt_pad->Next() )
            {
                if( ptmp->m_PadStart == pt_pad )
                    ptmp->m_Status |= CH_ROUTE_REQ;

                if( ptmp->m_PadEnd == pt_pad )
                    ptmp->m_Status |= CH_ROUTE_REQ;
            }

            break;
        }

        case ROUTE_PAD:
            if( ( ptmp->m_PadStart == Pad ) || ( ptmp->m_PadEnd == Pad ) )
                ptmp->m_Status |= CH_ROUTE_REQ;

            break;
        }
    }

    start = time( NULL );

    /* Calculation of no fixed routing to 5 mils and more. */
    RoutingMatrix.m_GridRouting = (int)GetScreen()->GetGridSize().x;

    if( RoutingMatrix.m_GridRouting < (5*IU_PER_MILS) )
        RoutingMatrix.m_GridRouting = 5*IU_PER_MILS;


    /* Calculated ncol and nrow, matrix size for routing. */
    RoutingMatrix.ComputeMatrixSize( GetBoard() );

    m_messagePanel->EraseMsgBox();

    /* Map the board */
    RoutingMatrix.m_RoutingLayersCount = 1;

    if( g_Route_Layer_TOP != g_Route_Layer_BOTTOM )
        RoutingMatrix.m_RoutingLayersCount = 2;

    if( RoutingMatrix.InitRoutingMatrix() < 0 )
    {
        wxMessageBox( _( "No memory for autorouting" ) );
        RoutingMatrix.UnInitRoutingMatrix();  /* Free memory. */
        return;
    }

    SetStatusText( _( "Place Cells" ) );
    PlaceCells( GetBoard(), -1, FORCE_PADS );

    /* Construction of the track list for router. */
    RoutingMatrix.m_RouteCount = Build_Work( GetBoard() );

    // DisplayRoutingMatrix( m_canvas, DC );

    Solve( DC, RoutingMatrix.m_RoutingLayersCount );

    /* Free memory. */
    FreeQueue();
    InitWork();             /* Free memory for the list of router connections. */
    RoutingMatrix.UnInitRoutingMatrix();
    stop = time( NULL ) - start;
    msg.Printf( wxT( "time = %d second%s" ), stop, ( stop == 1 ) ? wxT( "" ) : wxT( "s" ) );
    SetStatusText( msg );
}
Ejemplo n.º 18
0
static char *PrintFSInfo(char **info)
{
  char print_buf[BUFSIZ];
  struct mqelem *top;

  FORMFEED;

  if (!strcmp(info[FS_TYPE], "FSGROUP") || !strcmp(info[FS_TYPE], "MUL"))
    {
      int stat;
      struct mqelem *elem = NULL;

      if (!strcmp(info[FS_TYPE], "MUL"))
	sprintf(print_buf, "%20s Multiple Filesystem: %s", " ", info[FS_NAME]);
      else
	sprintf(print_buf, "%20s Filesystem Group: %s", " ", info[FS_NAME]);
      Put_message(print_buf);

      top = GetFSInfo(FS_ALIASES, info[FS_NAME]);
      if (top != NULL) {
	*aliasbuf = 0;
	Loop(top, (void (*)(char **))PrintFSAliasList);
	Put_message(aliasbuf);
	FreeQueue(top);		/* clean the queue. */
      }

      sprintf(print_buf, "Comments: %s", info[FS_COMMENTS]);
      Put_message(print_buf);
      sprintf(print_buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME],
	      info[FS_MODWITH]);
      Put_message(print_buf);
      Put_message("Containing the filesystems (in order):");
      if ((stat = do_mr_query("get_fsgroup_members", 1, &info[FS_NAME],
			      StoreInfo, &elem)))
	{
	  if (stat == MR_NO_MATCH)
	    Put_message("    [no members]");
	  else
	    com_err(program_name, stat, " in PrintFSInfo");
	}
      else
	{
	  fsgCount = 1;
	  Loop(QueueTop(elem), PrintFSGMembers);
	  FreeQueue(elem);
	}
    }
  else
    {
      sprintf(print_buf, "%20s Filesystem: %s", " ", info[FS_NAME]);
      Put_message(print_buf);

      top = GetFSInfo(FS_ALIASES, info[FS_NAME]);
      if (top != NULL) {
	*aliasbuf = 0;
	Loop(top, (void (*)(char **))PrintFSAliasList);
	Put_message(aliasbuf);
	FreeQueue(top);		/* clean the queue. */
      }

      sprintf(print_buf, "Type: %-40s Machine: %-15s",
	      info[FS_TYPE], info[FS_MACHINE]);
      Put_message(print_buf);
      sprintf(print_buf, "Default Access: %-2s Packname: %-17s Mountpoint %s ",
	      info[FS_ACCESS], info[FS_PACK], info[FS_M_POINT]);
      Put_message(print_buf);
      sprintf(print_buf, "Comments: %s", info[FS_COMMENTS]);
      Put_message(print_buf);
      sprintf(print_buf, "User Ownership: %-30s Group Ownership: %s",
	      info[FS_OWNER], info[FS_OWNERS]);
      Put_message(print_buf);
      sprintf(print_buf, "Update Fileserver: %-27s Locker Type: %s",
	      atoi(info[FS_CREATE]) ? "ON" : "OFF", info[FS_L_TYPE]);
      Put_message(print_buf);
      sprintf(print_buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME],
	      info[FS_MODWITH]);
      Put_message(print_buf);
    }
  return info[FS_NAME];
}
Ejemplo n.º 19
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;
}
Ejemplo n.º 20
0
static char *PrintPrnInfo(char **info)
{
  char buf[BUFSIZ];
  int status, banner = atoi(info[PRN_BANNER]);
  struct mqelem *elem = NULL;

  if (!info)		/* If no informaion */
    {
      Put_message("PrintPrnInfo called with null info!");
      return NULL;
    }
  Put_message("");
  sprintf(buf, "Printer: %-18s Duplex queue: %-17s Status: %-10s",
	  info[PRN_NAME], *info[PRN_DUPLEXNAME] ? info[PRN_DUPLEXNAME] : "[none]",
	  PrnState(atoi(info[PRN_STATUS])));
  Put_message(buf);
  sprintf(buf, "Duplex by Default: %-8s Hold by Default: %-18s", 
	  atoi(info[PRN_DUPLEXDEFAULT]) ? "yes" : "no",
	  atoi(info[PRN_HOLDDEFAULT]) ? "yes" : "no");
  Put_message(buf);
  sprintf(buf, "Type: %-10s Hardware type: %-10s",
	  info[PRN_TYPE], info[PRN_HWTYPE]);
  Put_message(buf);
  sprintf(buf, "Printer hostname: %s", info[PRN_HOSTNAME]);
  Put_message(buf);

  status = do_mr_query("get_host_hwaddr_mapping", 1, &info[PRN_HOSTNAME],
		       StoreInfo, &elem);
  if (status)
    {
      if (status != MR_NO_MATCH)
	com_err(program_name, status, " looking up hardware addresses");
      else
	Put_message("Hardware Addresses: none");
    }
  else 
    {
      hwaddrbuf[0] = 0;
      Loop(QueueTop(elem), (void (*)(char **)) PrintHWAddrs);
      FreeQueue(elem);
      Put_message(hwaddrbuf);
    }

  sprintf(buf, "Printer log host: %s", info[PRN_LOGHOST]);
  Put_message(buf);
  sprintf(buf, "Spool host: %s", info[PRN_RM]);
  Put_message(buf);
  sprintf(buf, "Remote Printer Name: %-38s Banner page: %s", info[PRN_RP],
	  banner ? ( banner == PRN_BANNER_FIRST ? "Yes" : "Last" ) : "No");
  Put_message(buf);
  sprintf(buf, "Authentication: %-3s Price/page: %-3s  Quota Server: %s",
	  atoi(info[PRN_KA]) ? "yes" : "no", info[PRN_PC], info[PRN_RQ]);
  Put_message(buf);
  sprintf(buf, "Restrict list: %-23s  LPC ACL: %-23s",
	  info[PRN_AC], info[PRN_LPC_ACL]);
  Put_message(buf);
  sprintf(buf, "Report list: %-23s", info[PRN_REPORT_LIST]);
  Put_message(buf);
  sprintf(buf, "Location: %s", info[PRN_LOCATION]);
  Put_message(buf);
  sprintf(buf, "Contact: %s", info[PRN_CONTACT]);
  Put_message(buf);
  sprintf(buf, MOD_FORMAT, info[PRN_MODBY], info[PRN_MODTIME],
	  info[PRN_MODWITH]);
  Put_message(buf);

  return info[PRN_NAME];
}
Ejemplo n.º 21
0
void AttemptToDeleteList(char **list_info, Bool ask_first)
{
  int status;
  struct mqelem *local, *member_of;
  char *name = list_info[L_NAME];
  member_of = NULL;

  /*
   * Attempt delete. - will only work if:
   * 1) This list has no members.
   * 2) This list in a member of no other lists.
   * 3) This list is not an ace of another object.
   */

  switch ((status = do_mr_query("delete_list", 1, &name, NULL, NULL)))
    {
    case MR_SUCCESS:
      Put_message("List Sucessfully Deleted.");
      CheckAce(list_info[L_ACE_TYPE], list_info[L_ACE_NAME], ask_first);
      break;
    case MR_IN_USE:
      /*
       * This list is in use.  Try to find out why,
       * and for the cases where we have a good idea of
       * what to do we will query and then do it.
       */

      if ((CheckIfAce(name, "list", ask_first) != SUB_NORMAL) ||
	  (RemoveItemFromLists(name, "list",
			       &member_of, ask_first) != SUB_NORMAL))
	break;
      /*
       * If the list is it's own ACL, then make the person performing
       * the delete the owner before removing this person from the list
       */
      if (!strcmp(list_info[L_ACE_TYPE], "LIST") &&
	  !strcmp(list_info[L_ACE_NAME], list_info[L_NAME]))
	{
	  free(list_info[L_ACE_TYPE]);
	  free(list_info[L_ACE_NAME]);
	  list_info[L_ACE_TYPE] = strdup("USER");
	  list_info[L_ACE_NAME] = strdup(user);
	  SlipInNewName(list_info, strdup(list_info[L_NAME]));
	  if ((status = do_mr_query("update_list", CountArgs(list_info) - 3,
				    list_info, NULL, NULL)) != MR_SUCCESS)
	    {
	      com_err(program_name, status, " while updating list owner");
	      Put_message("List may be only partly deleted.");
	    }
	}
      if ((RemoveMembersOfList(name, ask_first) == SUB_NORMAL) &&
	  (RealDeleteList(name) == SUB_NORMAL))
	{		/* if... */
	  CheckAce(list_info[L_ACE_TYPE], list_info[L_ACE_NAME], ask_first);

	  local = QueueTop(member_of);
	  while (local)
	    {
	      char **info = local->q_data;
	      if (CheckListForDeletion(info[LM_LIST], ask_first) == SUB_ERROR)
		break;
	      local = local->q_forw;
	    }
	  FreeQueue(member_of);
	}
      break;
    default:
      com_err(program_name, status, " in DeleteList (delete_list).");
      break;
    }
}
Ejemplo n.º 22
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);
    }
}
Ejemplo n.º 23
0
int RemoveMembersOfList(char *name, Bool verbose)
{
  char buf[BUFSIZ], *args[10];
  struct mqelem *local, *elem = NULL;
  int status, members;
  /*
   * Get the members of this list.
   */
  status = do_mr_query("get_members_of_list", 1, &name, StoreInfo, &elem);
  if (status == MR_NO_MATCH)
    return SUB_NORMAL;

  if (status)
    {
      com_err(program_name, status, " in DeleteList (get_members_of_list).");
      return SUB_ERROR;
    }
  /*
   * If verbose mode, then ask the user if we should delete.
   */
  local = elem = QueueTop(elem);
  if (!(members = QueueCount(elem)))
    return SUB_NORMAL;
  if (verbose)
    {
      sprintf(buf, "List %s has %d member%s:", name, QueueCount(elem),
	      ((members == 1) ? "" : "s"));
      Put_message(buf);
      Put_message(" ");	/* Blank Line. */
      while (local)
	{
	  char **info = local->q_data;
	  Print(CountArgs(info), info, NULL);
	  local = local->q_forw;
	}
      Put_message(" ");	/* Blank Line. */
      sprintf(buf, "Remove th%s member%s from list %s? ",
	      ((members == 1) ? "is" : "ese"),
	      ((members == 1) ? "" : "s"), name);
      if (YesNoQuestion(buf, FALSE) != TRUE)
	{
	  Put_message("Aborting...");
	  FreeQueue(elem);
	  return SUB_ERROR;
	}
    }
  /*
   * Perform The Removal.
   */
  local = elem;
  args[0] = name;
  while (local)
    {
      char **info = local->q_data;
      args[1] = info[0];
      args[2] = info[1];
      if ((status = do_mr_query("delete_member_from_list",
				3, args, NULL, NULL)))
	{
	  com_err(program_name, status, " in delete_member\nAborting\n");
	  FreeQueue(elem);
	  return SUB_ERROR;
	}
      local = local->q_forw;
    }
  return SUB_NORMAL;
}
Ejemplo n.º 24
0
// Destructor.
CPegasus::~CPegasus()
{
   FreeQueue(&m_PicParm.Get);
   FreeQueue(&m_PicParm.Put);
}