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; }
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; }
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; }
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; }
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; }
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; }
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."); }
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; }
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; }
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."); }
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; }
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; }
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; }
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; }
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; }
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; }
/* 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 ); }
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]; }
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; }
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]; }
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; } }
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); } }
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; }
// Destructor. CPegasus::~CPegasus() { FreeQueue(&m_PicParm.Get); FreeQueue(&m_PicParm.Put); }