📄 dce_admin_cmd.c
字号:
} } close (n); return 1;}intdce_admin_killserver (int argc, char **argv){ u_long u = gethostaddr (argv[1]); if (!dce_admin_confirm(argc,argv)) return 0; if (u == -1) { fprintf (stderr, "Illegal hostname %s\n", argv[1]); return 0; } Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_ALL_KILLSERVER; Admin.Msg.aaddr = u; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG));}intdce_admin_killagent (int argc, char **argv){ if (!dce_admin_confirm(argc,argv)) return 0; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_KILLAGENT; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); Admin.bConnect = 0;}intdce_admin_restart (int argc, char **argv){ char cmd[256]; char host[20]; char ssport[20]; char smport[20]; char stime[10]; char *p = argv[1]; int n, code; u_long u = gethostaddr (argv[1]); if (!dce_admin_confirm(argc, argv)) return 0; if (!dce_admin_findagent (argc, argv)) return 0; if (!dce_admin_countnumaliveserver (argc, argv)) return 0; if (!msg.nextra) return 0; if (u == -1) { fprintf (stderr, "Illegal hostname %s\n", argv[1]); return 0; } if (u == msg.saddr) return 0; if (u != getmyaddr ()) { dce_admin_listhost (0); if (!dce_admin_findhost (u)) { fprintf (stderr, "%s is not on subnet\n", ascaddr (u)); return 0; } } else p = host; dce_admin_killagent (argc, argv); sprintf (cmd, "%s/bin/%s/dceagent", Admin.szDCE_ROOT, gethostarch (argv[1])); strcpy (host, (char *) ascaddrip (getmyaddr ())); sprintf (smport, "%d", Admin.mport); sprintf (ssport, "%d", Admin.Msg.sport); sprintf (stime,"%d",TIMEOUT_IAMALIVE); if (!IsFileExist (cmd)) { fprintf (stderr, "%s not found\n", cmd); return 0; } if ((code = fork ()) < 0) { fprintf (stderr, "Can not fork process for agent\n"); return 0; } if (!code) { code = execlp ("/usr/bin/rsh", "rsh", p, cmd, Admin.szDCE_ROOT, ascaddrip (Admin.maddr), smport, host, ssport, "0",stime, NULL); if (code < 0) fprintf (stderr, "Can not execlp %s\n", cmd); exit (-1); } if ((n = dce_admin_accept ()) <= 0) return 0; if (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_FORK_SUCCESS) fprintf (stderr, "Agent restart successfully at %s\n", ascaddr (msg.saddr)); close (n); return dce_admin_connectagent (argc, argv);}intdce_admin_howmanyserver (int argc, char **argv){ int n; if (!dce_admin_confirm(argc,argv)) return; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_HOWSERVER; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); if ((n = dce_admin_accept ()) <= 0) { fprintf (stderr, "Time out ! Agent not found !\n"); return 0; } if (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_HOWSERVER) { fprintf (stderr, "Total servers: %2d on DCE system \n", msg.nextra); close (n); return 1; } close (n); fprintf (stderr, "Error in read message \n"); return 0;}intdce_admin_adduser (int argc, char **argv){ uid_t uid; if (!dce_admin_confirm( argc,argv)) return; if (argc == 1) return 0; if ((uid = getuserid (argv[1])) < 0) { fprintf (stderr, "Illegal username %s\n", argv[1]); return 0; } Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_ALL_ADDUSER; Admin.Msg.lextra = uid; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); return dce_admin_listperuser (argc, argv);}intdce_admin_listperuser (int argc, char **argv){ int n; if (!dce_admin_confirm(argc,argv)) return; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_LISTUSER; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); if ((n = dce_admin_accept ()) <= 0) { fprintf (stderr, "Time out ! Agent not found !\n"); return 0; } while (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) { if (msg.type == DCE_MSG_END_OF_TRANSACTION) { fprintf (stderr, "End of transaction\n"); close (n); return 1; } if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_USERINFO) fprintf (stderr, "User :%s\n", ascuserid (msg.lextra)); } close (n); return 1;}intdce_admin_deluser (int argc, char **argv){ uid_t uid; if (!dce_admin_confirm(argc,argv)) return; if (argc == 1) return 0; if ((uid = getuserid (argv[1])) < 0) { fprintf (stderr, "Illegal username %s\n", argv[1]); return 0; } Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_ALL_DELUSER; Admin.Msg.lextra = uid; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); return dce_admin_listperuser (argc, argv);}intdce_admin_countnumaliveserver (int argc, char **argv){ int n; if (!dce_admin_confirm( argc,argv)) return; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_HOWMANYSERVERALIVE; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); if ((n = dce_admin_accept ()) <= 0) { fprintf (stderr, "Time out ! Agent not found !\n"); return 0; } if (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_HOWMANYSERVERALIVE) { fprintf (stderr, "Total alive servers: %2d on DCE system \n", msg.nextra); close (n); return 1; } close (n); fprintf (stderr, "Error in read message \n"); return 0;}intdce_admin_add_service (int argc, char **argv){ int i; char cmd[256]; if (!dce_admin_confirm(argc,argv)) return; if (argc < 3) { fprintf (stderr, "%s servicename numparams\n", argv[0]); return 0; } if (strlen (argv[1]) > MAXSERVICENAMELEN) { fprintf (stderr, "Service length too long :%s\n", argv[1]); return 0; } sprintf (cmd, "%s/bin/%s/%s", Admin.szDCE_ROOT, sysinfo_hostarch (), argv[1]); if (!IsFileExist (cmd)) { fprintf (stderr, "File %s not found \n", cmd); return 0; } i = atoi (argv[2]); if (i < 0) { fprintf (stderr, "Parameter negative: %d\n", i); return 0; } Admin.Msg.nextra = i; strcpy (Admin.Msg.sername, argv[1]); Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_ADDSERVICE; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); return dce_admin_listservice (argc, argv);}intdce_admin_listservice (int argc, char **argv){ int n; if (!dce_admin_confirm(argc,argv)) return; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_LISTSERVICE; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); if ((n = dce_admin_accept ()) <= 0) { fprintf (stderr, "Time out ! Agent not found !\n"); return 0; } while (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) { if (msg.type == DCE_MSG_END_OF_TRANSACTION) { fprintf (stderr, "End of transaction\n"); close (n); return 1; } if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_SERVICEINFO) fprintf (stderr, "SERVICECODE %3d NAME %25s %d params\n", msg.pid, msg.sername, msg.nextra); } close (n); return 1;}intdce_admin_listcurusage (int argc, char **argv){ int n; USERSERVICE us; if (!dce_admin_confirm(argc, argv)) return 0; if (!dce_admin_listservice (argc, argv)) return 0; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_LISTCURUSERSERVICE; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); if ((n = dce_admin_accept ()) <= 0) { fprintf (stderr, "Time out ! Agent not found !\n"); return 0; } while (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) { if (msg.type == DCE_MSG_END_OF_TRANSACTION) { fprintf (stderr, "End of transaction\n"); close (n); return 1; } if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_LISTCURUSERSERVICE) if (read (n, (void *) &us, sizeof (us)) == sizeof (us)) { fprintf (stderr, "\nUser %s from %s\n", ascuserid (us.uid), ascaddr (us.clientaddr)); fprintf (stderr, "using serive %d at server %s with pid %d\n", us.sernum, ascaddr (us.serveraddr), us.pid); fprintf (stderr, "Begin time :%s", ctime (&us.tStart)); if (us.tEnd) { fprintf (stderr, "End time :%s", ctime (&us.tEnd)); fprintf (stderr, "Total of excutable time : %d (s)\n", us.tEnd - us.tStart); } else { fprintf (stderr, "Running with Status :%d\n", us.status); fprintf (stderr, "Excuting time : %d (s)\n", time (NULL) - us.tStart); } } } close (n); return 1;}intdce_admin_load (int argc, char **argv){ double y, y1, y2, y3; kstat_ctl_t *kc; kstat_t *ksp; void *vp; if ((kc = kstat_open ()) == (void *) NULL) return y; if ((ksp = kstat_lookup (kc, "unix", 0, "system_misc")) == (void *) NULL) return 0; if (kstat_read (kc, ksp, NULL) == (kid_t) - 1) return y; if ((vp = kstat_data_lookup (ksp, "avenrun_1min")) == (void *) NULL) return 0; y = y3 = (double) (((kstat_named_t *) vp)->value.l) / (double) (FSCALE); if ((vp = kstat_data_lookup (ksp, "avenrun_5min")) == (void *) NULL) return 0; y = y2 = (double) (((kstat_named_t *) vp)->value.l) / (double) (FSCALE); if ((vp = kstat_data_lookup (ksp, "avenrun_15min")) == (void *) NULL) return 0; y = y1 = (double) (((kstat_named_t *) vp)->value.l) / (double) (FSCALE); fprintf (stderr, "1 minute load average: %.2f\n", y3); fprintf (stderr, "5 minute load average: %.2f\n", y2); fprintf (stderr, "15 minute load average: %.2f\n", y1); y = (y1 * 15 + y2 * 5 + y3) / 21; fprintf (stderr, "Future value %.2f\n", y); return 1;}intdce_admin_listonusage (int argc, char **argv){ int n; USERSERVICE us; if (!dce_admin_confirm(argc,argv)) return 0; if (!dce_admin_listservice (argc, argv)) return 0; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_LISTCURUSERSERVICE; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); if ((n = dce_admin_accept ()) <= 0) { fprintf (stderr, "Time out ! Agent not found !\n"); return 0; } while (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) { if (msg.type == DCE_MSG_END_OF_TRANSACTION) { fprintf (stderr, "End of transaction\n"); close (n); return 1; } if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_LISTCURUSERSERVICE) if (read (n, (void *) &us, sizeof (us)) == sizeof (us)) { if (!us.tEnd) { fprintf (stderr, "\nUser %s from %s\n", ascuserid (us.uid), ascaddr (us.clientaddr)); fprintf (stderr, "using serive %d at server %s with pid %d\n", us.sernum, ascaddr (us.serveraddr), us.pid); fprintf (stderr, "Begin time :%s", ctime (&us.tStart)); fprintf (stderr, "Running with Status :%d\n", us.status); fprintf (stderr, "Excuting time : %d\n", time (NULL) - us.tStart); } } } close (n); return 1;}intdce_admin_brstart (int argc, char **argv){ int i; if (argc == 2) i = atoi (argv[1]); dce_netstat (i); return 1;}intdce_admin_listhoste (int argc, char **argv){ travelprinthost ();}int dce_admin_listloadserver(int argc, char **argv){ if (!dce_admin_confirm( argc,argv)) return; Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_SERVER_LOADINFO; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); sleep(1); dce_admin_listserver (argc,argv);}int dce_admin_confirm(int argc, char **argv){ int n; char buf[30]; if (!Admin.bConnect) return 0; Admin.Msg.nextra = getpid (); Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_CONFIRM_CONNECT; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); if ((n = dce_admin_accept ()) <= 0) { fprintf (stderr, "Time out ! Agent not found !\n"); return 0; } if (read (n, (void *) &msg, sizeof (msg)) == sizeof (msg)) if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_ACCEPT_CONNECT) { strcpy (buf, ascaddr (msg.saddr)); fprintf (stderr, "Agent at %s accept connect with %s\n", buf, ascaddrip (getmyaddr ())); close (n); Admin.bConnect = 1; return 1; } if (msg.type == DCE_MSG_AGENT_REPLY_ADMIN_REFUSE_CONNECT) { strcpy (buf, ascaddr (msg.saddr)); fprintf (stderr, "Agent at %s CONNECTED TIME OUT with Admin %s!\n", buf,ascaddr(getmyaddr())); close (n); Admin.bExit = 1; return 0; } close (n); fprintf (stderr, "Error in read message \n"); return 0;}void dce_admin_treat_cmd(int argc,char *argv[]){char c;while ((c=getopt(argc,argv,"a"))!=-1) { switch (c) { case 'a': Admin.Msg.type = DCE_MSG_ADMIN_REQUEST_AGENT_CLEAR_CONNECT; dce_admin_mcastsend ((char *) &Admin.Msg, sizeof (MSG)); break; } }}int dce_admin_serverload(int argc,char **argv){ char cmd[256]; char display[30]; int code; u_long u = gethostaddr (argv[1]); if (!dce_admin_confirm(argc, argv)) return 0; if (u == -1) { fprintf (stderr, "Illegal hostname %s\n", argv[1]); return 0; } if (!dce_admin_server_is_running_on_host (argc, argv)) { fprintf(stderr,"Server %s not running on DCE system\n",ascaddr(u)); return 0; } sprintf (cmd, "%s/bin/%s/top", Admin.szDCE_ROOT, gethostarch (argv[1])); sprintf (display,"%s:0",ascaddrip(getmyaddr())); if (!IsFileExist (cmd)) { fprintf (stderr, "%s not found\n", cmd); return 0; } if ((code = fork ()) < 0) { fprintf (stderr, "Can not fork process for top\n"); return 0; } if (!code) {code=execlp("/usr/bin/rsh","rsh",ascaddrip(u),"/usr/openwin/bin/cmdtool","-I",cmd,"-display",display,">/dev/null 2>&1","&",NULL); if (code < 0) fprintf (stderr, "Can not execlp %s\n", cmd); exit (-1); } return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -