void mod_rmmod (flux_t h, opt_t opt) { char *modname = NULL; if (opt.argc != 1) usage (); modname = opt.argv[0]; if (opt.direct) { char *service = getservice (modname); char *topic = xasprintf ("%s.rmmod", service); char *json_str = flux_rmmod_json_encode (modname); assert (json_str != NULL); flux_rpc_t *r = flux_rpc_multi (h, topic, json_str, opt.nodeset, 0); if (!r) err_exit ("%s", topic); while (!flux_rpc_completed (r)) { uint32_t nodeid = FLUX_NODEID_ANY; if (flux_rpc_get (r, &nodeid, NULL) < 0) err ("%s[%d]", topic, nodeid == FLUX_NODEID_ANY ? -1 : nodeid); } flux_rpc_destroy (r); free (topic); free (service); free (json_str); } else { if (flux_modctl_unload (h, opt.nodeset, modname) < 0) err_exit ("%s", modname); } }
int service_doc(FILE *fp, FILE *toc, int page) { char temp[PATH_MAX]; FILE *wp, *no; int j; snprintf(temp, PATH_MAX, "%s/etc/service.data", getenv("FTND_ROOT")); if ((no = fopen(temp, "r")) == NULL) return page; page = newpage(fp, page); addtoc(fp, toc, 16, 0, page, (char *)"Service manager"); j = 0; fprintf(fp, "\n"); fprintf(fp, " Service Action Active\n"); fprintf(fp, " --------------- -------- ------\n"); fread(&servhdr, sizeof(servhdr), 1, no); wp = open_webdoc((char *)"service.html", (char *)"Mail Service Manager", NULL); fprintf(wp, "<A HREF=\"index.html\">Main</A>\n"); fprintf(wp, "<UL>\n"); fprintf(wp, "<TABLE width='400' border='0' cellspacing='0' cellpadding='2'>\n"); fprintf(wp, "<TBODY>\n"); fprintf(wp, "<TR><TH align='left'>Service</TH><TH align='left'>Action</TH><TH align='left'>Active</TH></TR>\n"); while ((fread(&servrec, servhdr.recsize, 1, no)) == 1) { if (j == 50) { page = newpage(fp, page); fprintf(fp, "\n"); fprintf(fp, " Service Action Active\n"); fprintf(fp, " --------------- -------- ------\n"); j = 0; } fprintf(wp, "<TR><TD>%s</TD><TD>%s</TD><TD>%s</TD></TR>\n", servrec.Service, getservice(servrec.Action), getboolean(servrec.Active)); fprintf(fp, " %-15s %-8s %s\n", servrec.Service, getservice(servrec.Action), getboolean(servrec.Active)); j++; } fclose(no); return page; }
void mod_insmod (flux_t h, opt_t opt) { char *modpath = NULL; char *modname = NULL; if (opt.argc < 1) usage (); if (strchr (opt.argv[0], '/')) { if (!(modpath = realpath (opt.argv[0], NULL))) oom (); if (!(modname = flux_modname (modpath))) msg_exit ("%s", dlerror ()); } else { char *searchpath = getenv ("FLUX_MODULE_PATH"); if (!searchpath) searchpath = MODULE_PATH; modname = xstrdup (opt.argv[0]); if (!(modpath = flux_modfind (searchpath, modname))) msg_exit ("%s: not found in module search path", modname); } opt.argv++; opt.argc--; if (opt.direct) { char *service = getservice (modname); char *topic = xasprintf ("%s.insmod", service); char *json_str = flux_insmod_json_encode (modpath, opt.argc, opt.argv); assert (json_str != NULL); flux_rpc_t *r = flux_rpc_multi (h, topic, json_str, opt.nodeset, 0); if (!r) err_exit ("%s", topic); while (!flux_rpc_completed (r)) { uint32_t nodeid = FLUX_NODEID_ANY; if (flux_rpc_get (r, NULL, NULL) < 0) err_exit ("%s[%d]", topic, nodeid == FLUX_NODEID_ANY ? -1 : nodeid); } flux_rpc_destroy (r); free (topic); free (service); free (json_str); } else { if (flux_modctl_load (h, opt.nodeset, modpath, opt.argc, opt.argv) < 0) err_exit ("%s", modname); } if (modpath) free (modpath); if (modname) free (modname); }
int main(int argc, char *argv[]) { int sockfd; unsigned int port; struct hostent *he; if (argc != 2) { fprintf(stderr,"usage: client hostname\n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) // get the host info { perror("gethostbyname"); exit(1); } for(port=0; port<=65000; port++) { struct sockaddr_in their_addr; // connector's address information if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; // host byte order their_addr.sin_port = htons(port); // short, network byte order their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { close(sockfd); } else { printf("%d",port); getservice( port ); close(sockfd); } } }
/* * ------------------------------------------------------------ */ int main(int argc, char **argv) { /* In general, suffix "l" is low channel, "h" is high channel, "g" * is gdb channel, "c" is control channel and "o" is output channel. */ struct sockaddr_in from; int infd = 0, outfd; unsigned short portl, porth, portg, portc, porto; int on = 1, c; char *outname, *outservice; int fromlen; int lish, lisg, lisc; #if 0 FILE *newerr; #endif /* 0 */ prog_name = argv[0]; if (isatty(infd)) usage(); /* Here, then not just a simple idiot. */ signal(SIGPIPE, SIG_IGN); openlog(prog_name, LOG_PID, LOG_DAEMON); fromlen = sizeof(from); if (getsockname(infd, &from, &fromlen) < 0) fault("getsockname: %s", strerror(errno)); if ((fromlen != sizeof(from)) || (from.sin_family != AF_INET)) fault("not an inet socket (family=%d)\n", from.sin_family); portl = ntohs(from.sin_port); porth = portl+1; portg = porth+1; portc = portg+1; fromlen = sizeof(from); if (getpeername(infd, &from, &fromlen) < 0) fault("getpeername: %s", strerror(errno)); if ((fromlen != sizeof(from)) || (from.sin_family != AF_INET)) fault("not an inet socket (family=%d)\n", from.sin_family); syslog(LOG_INFO, "on port %u peer is %s:%u\n", portl, inet_ntoa(from.sin_addr), ntohs(from.sin_port)); if (setsockopt(infd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0) syslog(LOG_WARNING, "setsockopt (SO_KEEPALIVE): %m"); /* from here on, we map stderr to output on the connection so we can * report errors to the remote user. */ #if 0 if (!(newerr = fdopen(infd, "w"))) syslog(LOG_WARNING, "fdopen: %m"); else *stderr = *newerr; #endif while((c = getopt(argc, argv, "d8h:g:c:")) != EOF) { switch(c) { case 'd': debug++; break; case 'h': /* high bit port */ if (getservice(optarg, &porth) < 0) fault("getservice failed (high port '%s')\n", optarg); break; case 'g': /* gdb port */ if (getservice(optarg, &portg) < 0) fault("getservice failed (gdb port '%s')\n", optarg); break; case 'c': /* control port */ if (getservice(optarg, &portc) < 0) fault("getservice failed (control port '%s')\n", optarg); break; case '8': /* 8-bit clean; no high port */ porth=0; break; default: fault("bad argument list!\n"); } } if (argc != optind + 1) fault("unparsed arguments (%d!=%d)\n", argc, optind+1); outname = argv[optind]; if (!(outservice = strchr(outname, ':'))) fault("output arg '%s' doesn't contain ':'\n", outname); *outservice++ = 0; if (getservice(outservice, &porto) < 0) fault("getservice failed (output port '%s')\n", outservice); /* Time to start the sockets */ if (porth) { lish = startlistening(porth); } else { lish = -1; } lisg = startlistening(portg); lisc = startlistening(portc); outfd = connect_host(outname, porto); doit(infd, outfd, lish, lisg, lisc); syslog(LOG_INFO, "terminating normally\n"); fclose(stderr); closelog(); exit(0); }
void EditService(void) { int records, i, o, x, y; char pick[12]; FILE *fil; char temp[PATH_MAX]; int offset; clr_index(); working(1, 0, 0); IsDoing("Browsing Menu"); if (config_read() == -1) { working(2, 0, 0); return; } records = CountService(); if (records == -1) { working(2, 0, 0); return; } if (OpenService() == -1) { working(2, 0, 0); return; } o = 0; for (;;) { clr_index(); set_color(WHITE, BLACK); ftnd_mvprintw( 5, 4, "16. SERVICE MANAGER"); set_color(CYAN, BLACK); if (records != 0) { snprintf(temp, PATH_MAX, "%s/etc/service.temp", getenv("FTND_ROOT")); working(1, 0, 0); if ((fil = fopen(temp, "r")) != NULL) { fread(&servhdr, sizeof(servhdr), 1, fil); x = 2; y = 7; set_color(CYAN, BLACK); for (i = 1; i <= 20; i++) { if (i == 11) { x = 42; y = 7; } if ((o + i) <= records) { offset = sizeof(servhdr) + (((o + i) - 1) * servhdr.recsize); fseek(fil, offset, 0); fread(&servrec, servhdr.recsize, 1, fil); if (servrec.Active) set_color(CYAN, BLACK); else set_color(LIGHTBLUE, BLACK); snprintf(temp, 81, "%3d. %-15s %s", o+i, servrec.Service, getservice(servrec.Action)); temp[37] = 0; ftnd_mvprintw(y, x, temp); y++; } } fclose(fil); } } strcpy(pick, select_record(records, 20)); if (strncmp(pick, "-", 1) == 0) { CloseService(FALSE); return; } if (strncmp(pick, "A", 1) == 0) { working(1, 0, 0); if (AppendService() == 0) { records++; working(1, 0, 0); } else working(2, 0, 0); } if (strncmp(pick, "N", 1) == 0) if ((o + 20) < records) o = o + 20; if (strncmp(pick, "P", 1) == 0) if ((o - 20) >= 0) o = o - 20; if ((atoi(pick) >= 1) && (atoi(pick) <= records)) { EditServiceRec(atoi(pick)); o = ((atoi(pick) - 1) / 20) * 20; } } }