void psshfs_notify(struct puffs_usermount *pu, int fd, int what) { struct psshfs_ctx *pctx = puffs_getspecific(pu); int nretry, which, newfd, dummy; if (fd == pctx->sshfd) { which = PSSHFD_META; } else { assert(fd == pctx->sshfd_data); which = PSSHFD_DATA; } if (puffs_getstate(pu) != PUFFS_STATE_RUNNING) return; if (what != (PUFFS_FBIO_READ | PUFFS_FBIO_WRITE)) { puffs_framev_removefd(pu, fd, ECONNRESET); return; } close(fd); /* deal with zmobies, beware of half-eaten brain */ while (waitpid(-1, &dummy, WNOHANG) > 0) continue; for (nretry = 0;;nretry++) { if ((newfd = pssh_connect(pu, which)) == -1) goto retry2; if (puffs_framev_addfd(pu, newfd, PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) goto retry1; break; retry1: fprintf(stderr, "reconnect failed... "); close(newfd); retry2: if (nretry < RETRY_MAX) { fprintf(stderr, "retry (%d left)\n", RETRY_MAX-nretry); sleep(nretry); } else { fprintf(stderr, "retry count exceeded, going south\n"); exit(1); /* XXXXXXX */ } } }
int main(int argc, char *argv[]) { struct psshfs_ctx pctx; struct puffs_usermount *pu; struct puffs_ops *pops; struct psshfs_node *root = &pctx.psn_root; struct puffs_node *pn_root; puffs_framev_fdnotify_fn notfn; struct vattr *rva; char **sshargs; char *userhost; char *hostpath; int mntflags, pflags, ch; int detach; int exportfs, refreshival, numconnections; int nargs; setprogname(argv[0]); if (argc < 3) usage(); mntflags = pflags = exportfs = nargs = 0; numconnections = 1; detach = 1; refreshival = DEFAULTREFRESH; notfn = puffs_framev_unmountonclose; sshargs = NULL; add_ssharg(&sshargs, &nargs, SSH_PATH); add_ssharg(&sshargs, &nargs, "-axs"); add_ssharg(&sshargs, &nargs, "-oClearAllForwardings=yes"); while ((ch = getopt(argc, argv, "c:eF:o:O:pr:st:")) != -1) { switch (ch) { case 'c': numconnections = atoi(optarg); if (numconnections < 1 || numconnections > 2) { fprintf(stderr, "%s: only 1 or 2 connections " "permitted currently\n", getprogname()); usage(); /*NOTREACHED*/ } break; case 'e': exportfs = 1; break; case 'F': add_ssharg(&sshargs, &nargs, "-F"); add_ssharg(&sshargs, &nargs, optarg); break; case 'O': add_ssharg(&sshargs, &nargs, "-o"); add_ssharg(&sshargs, &nargs, optarg); break; case 'o': getmntopts(optarg, puffsmopts, &mntflags, &pflags); break; case 'p': notfn = psshfs_notify; break; case 'r': max_reads = atoi(optarg); break; case 's': detach = 0; break; case 't': refreshival = atoi(optarg); if (refreshival < 0 && refreshival != -1) errx(1, "invalid timeout %d", refreshival); break; default: usage(); /*NOTREACHED*/ } } argc -= optind; argv += optind; if (pflags & PUFFS_FLAG_OPDUMP) detach = 0; pflags |= PUFFS_FLAG_BUILDPATH; pflags |= PUFFS_KFLAG_WTCACHE | PUFFS_KFLAG_IAONDEMAND; if (argc != 2) usage(); PUFFSOP_INIT(pops); PUFFSOP_SET(pops, psshfs, fs, unmount); PUFFSOP_SETFSNOP(pops, sync); /* XXX */ PUFFSOP_SET(pops, psshfs, fs, statvfs); PUFFSOP_SET(pops, psshfs, fs, nodetofh); PUFFSOP_SET(pops, psshfs, fs, fhtonode); PUFFSOP_SET(pops, psshfs, node, lookup); PUFFSOP_SET(pops, psshfs, node, create); PUFFSOP_SET(pops, psshfs, node, open); PUFFSOP_SET(pops, psshfs, node, inactive); PUFFSOP_SET(pops, psshfs, node, readdir); PUFFSOP_SET(pops, psshfs, node, getattr); PUFFSOP_SET(pops, psshfs, node, setattr); PUFFSOP_SET(pops, psshfs, node, mkdir); PUFFSOP_SET(pops, psshfs, node, remove); PUFFSOP_SET(pops, psshfs, node, readlink); PUFFSOP_SET(pops, psshfs, node, rmdir); PUFFSOP_SET(pops, psshfs, node, symlink); PUFFSOP_SET(pops, psshfs, node, rename); PUFFSOP_SET(pops, psshfs, node, read); PUFFSOP_SET(pops, psshfs, node, write); PUFFSOP_SET(pops, psshfs, node, reclaim); pu = puffs_init(pops, argv[0], "psshfs", &pctx, pflags); if (pu == NULL) err(1, "puffs_init"); memset(&pctx, 0, sizeof(pctx)); pctx.mounttime = time(NULL); pctx.refreshival = refreshival; pctx.numconnections = numconnections; userhost = argv[0]; hostpath = strchr(userhost, ':'); if (hostpath) { *hostpath++ = '\0'; pctx.mountpath = hostpath; } else pctx.mountpath = "."; add_ssharg(&sshargs, &nargs, argv[0]); add_ssharg(&sshargs, &nargs, "sftp"); pctx.sshargs = sshargs; pctx.nextino = 2; memset(root, 0, sizeof(struct psshfs_node)); pn_root = puffs_pn_new(pu, root); if (pn_root == NULL) return errno; puffs_setroot(pu, pn_root); puffs_framev_init(pu, psbuf_read, psbuf_write, psbuf_cmp, NULL, notfn); signal(SIGHUP, takehup); puffs_ml_setloopfn(pu, psshfs_loopfn); if (pssh_connect(pu, PSSHFD_META) == -1) err(1, "can't connect meta"); if (puffs_framev_addfd(pu, pctx.sshfd, PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) err(1, "framebuf addfd meta"); if (numconnections == 2) { if (pssh_connect(pu, PSSHFD_DATA) == -1) err(1, "can't connect data"); if (puffs_framev_addfd(pu, pctx.sshfd_data, PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) err(1, "framebuf addfd data"); } else { pctx.sshfd_data = pctx.sshfd; } if (exportfs) puffs_setfhsize(pu, sizeof(struct psshfs_fid), PUFFS_FHFLAG_NFSV2 | PUFFS_FHFLAG_NFSV3); rva = &pn_root->pn_va; rva->va_fileid = pctx.nextino++; rva->va_nlink = 101; /* XXX */ if (detach) if (puffs_daemon(pu, 1, 1) == -1) err(1, "puffs_daemon"); if (puffs_mount(pu, argv[1], mntflags, puffs_getroot(pu)) == -1) err(1, "puffs_mount"); if (puffs_setblockingmode(pu, PUFFSDEV_NONBLOCK) == -1) err(1, "setblockingmode"); if (puffs_mainloop(pu) == -1) err(1, "mainloop"); puffs_exit(pu, 1); return 0; }
int main(int argc, char *argv[]) { struct psshfs_ctx pctx; struct puffs_usermount *pu; struct puffs_ops *pops; struct psshfs_node *root = &pctx.psn_root; struct puffs_node *pn_root; puffs_framev_fdnotify_fn notfn; struct vattr *rva; mntoptparse_t mp; char **sshargs; char *user; char *host; char *path; int mntflags, pflags, ch; int detach; int exportfs, refreshival, numconnections; int nargs; setprogname(argv[0]); puffs_unmountonsignal(SIGINT, true); puffs_unmountonsignal(SIGTERM, true); if (argc < 3) usage(); memset(&pctx, 0, sizeof(pctx)); mntflags = pflags = exportfs = nargs = 0; numconnections = 1; detach = 1; refreshival = DEFAULTREFRESH; notfn = puffs_framev_unmountonclose; sshargs = NULL; add_ssharg(&sshargs, &nargs, SSH_PATH); add_ssharg(&sshargs, &nargs, "-axs"); add_ssharg(&sshargs, &nargs, "-oClearAllForwardings=yes"); while ((ch = getopt(argc, argv, "c:eF:g:o:O:pr:st:u:")) != -1) { switch (ch) { case 'c': numconnections = atoi(optarg); if (numconnections < 1 || numconnections > 2) { fprintf(stderr, "%s: only 1 or 2 connections " "permitted currently\n", getprogname()); usage(); /*NOTREACHED*/ } break; case 'e': exportfs = 1; break; case 'F': add_ssharg(&sshargs, &nargs, "-F"); add_ssharg(&sshargs, &nargs, optarg); break; case 'g': pctx.domanglegid = 1; pctx.manglegid = atoi(optarg); if (pctx.manglegid == (gid_t)-1) errx(1, "-1 not allowed for -g"); pctx.mygid = getegid(); break; case 'O': add_ssharg(&sshargs, &nargs, "-o"); add_ssharg(&sshargs, &nargs, optarg); break; case 'o': mp = getmntopts(optarg, puffsmopts, &mntflags, &pflags); if (mp == NULL) err(1, "getmntopts"); freemntopts(mp); break; case 'p': notfn = psshfs_notify; break; case 'r': max_reads = atoi(optarg); break; case 's': detach = 0; break; case 't': refreshival = atoi(optarg); if (refreshival < 0 && refreshival != -1) errx(1, "invalid timeout %d", refreshival); break; case 'u': pctx.domangleuid = 1; pctx.mangleuid = atoi(optarg); if (pctx.mangleuid == (uid_t)-1) errx(1, "-1 not allowed for -u"); pctx.myuid = geteuid(); break; default: usage(); /*NOTREACHED*/ } } argc -= optind; argv += optind; if (pflags & PUFFS_FLAG_OPDUMP) detach = 0; pflags |= PUFFS_FLAG_BUILDPATH; pflags |= PUFFS_KFLAG_WTCACHE | PUFFS_KFLAG_IAONDEMAND; if (argc != 2) usage(); PUFFSOP_INIT(pops); PUFFSOP_SET(pops, psshfs, fs, unmount); PUFFSOP_SETFSNOP(pops, sync); /* XXX */ PUFFSOP_SET(pops, psshfs, fs, statvfs); PUFFSOP_SET(pops, psshfs, fs, nodetofh); PUFFSOP_SET(pops, psshfs, fs, fhtonode); PUFFSOP_SET(pops, psshfs, node, lookup); PUFFSOP_SET(pops, psshfs, node, create); PUFFSOP_SET(pops, psshfs, node, open); PUFFSOP_SET(pops, psshfs, node, inactive); PUFFSOP_SET(pops, psshfs, node, readdir); PUFFSOP_SET(pops, psshfs, node, getattr); PUFFSOP_SET(pops, psshfs, node, setattr); PUFFSOP_SET(pops, psshfs, node, mkdir); PUFFSOP_SET(pops, psshfs, node, remove); PUFFSOP_SET(pops, psshfs, node, readlink); PUFFSOP_SET(pops, psshfs, node, rmdir); PUFFSOP_SET(pops, psshfs, node, symlink); PUFFSOP_SET(pops, psshfs, node, rename); PUFFSOP_SET(pops, psshfs, node, read); PUFFSOP_SET(pops, psshfs, node, write); PUFFSOP_SET(pops, psshfs, node, reclaim); pu = puffs_init(pops, argv[0], "psshfs", &pctx, pflags); if (pu == NULL) err(1, "puffs_init"); pctx.mounttime = time(NULL); pctx.refreshival = refreshival; pctx.numconnections = numconnections; user = strdup(argv[0]); if ((host = strrchr(user, '@')) == NULL) { host = user; } else { *host++ = '\0'; /* break at the '@' */ if (user[0] == '\0') { fprintf(stderr, "Missing username\n"); usage(); } add_ssharg(&sshargs, &nargs, "-l"); add_ssharg(&sshargs, &nargs, user); } if ((path = colon(host)) != NULL) { *path++ = '\0'; /* break at the ':' */ pctx.mountpath = path; } else { pctx.mountpath = "."; } host = cleanhostname(host); if (host[0] == '\0') { fprintf(stderr, "Missing hostname\n"); usage(); } add_ssharg(&sshargs, &nargs, host); add_ssharg(&sshargs, &nargs, "sftp"); pctx.sshargs = sshargs; pctx.nextino = 2; memset(root, 0, sizeof(struct psshfs_node)); TAILQ_INIT(&root->pw); pn_root = puffs_pn_new(pu, root); if (pn_root == NULL) return errno; puffs_setroot(pu, pn_root); puffs_framev_init(pu, psbuf_read, psbuf_write, psbuf_cmp, NULL, notfn); signal(SIGHUP, takehup); puffs_ml_setloopfn(pu, psshfs_loopfn); if (pssh_connect(pu, PSSHFD_META) == -1) err(1, "can't connect meta"); if (puffs_framev_addfd(pu, pctx.sshfd, PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) err(1, "framebuf addfd meta"); if (numconnections == 2) { if (pssh_connect(pu, PSSHFD_DATA) == -1) err(1, "can't connect data"); if (puffs_framev_addfd(pu, pctx.sshfd_data, PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) err(1, "framebuf addfd data"); } else { pctx.sshfd_data = pctx.sshfd; } if (exportfs) puffs_setfhsize(pu, sizeof(struct psshfs_fid), PUFFS_FHFLAG_NFSV2 | PUFFS_FHFLAG_NFSV3); rva = &pn_root->pn_va; rva->va_fileid = pctx.nextino++; /* * For root link count, just guess something ridiculously high. * Guessing too high has no known adverse effects, but fts(3) * doesn't like too low values. This guess will be replaced * with the real value when readdir is first called for * the root directory. */ rva->va_nlink = 8811; if (detach) if (puffs_daemon(pu, 1, 1) == -1) err(1, "puffs_daemon"); if (puffs_mount(pu, argv[1], mntflags, puffs_getroot(pu)) == -1) err(1, "puffs_mount"); if (puffs_setblockingmode(pu, PUFFSDEV_NONBLOCK) == -1) err(1, "setblockingmode"); if (puffs_mainloop(pu) == -1) err(1, "mainloop"); puffs_exit(pu, 1); return 0; }
int main(int argc, char *argv[]) { int ret; int i, j; char name[20]; char l_fn[50]; struct pssh_sess_entry *ent; struct pssh_task_t *task; struct rusage ru; unsigned long utime, stime; /* add */ #if 1 for (j = 2; j < SRV_GROUP_CNT; j++) { printf("start group # %d\n", j); pssh = pssh_init("rushba", "/home/rushba/tmp/id_dsa.pub", NULL, "", PSSH_OPT_NO_SEARCH); if (old_pssh) pssh_free(old_pssh); old_pssh = pssh; assert(pssh != NULL); for (i = 1; i < SRV_IN_GROUP; i++) { /* if (i == 6 || i == 77) */ /* continue; */ sprintf(name, "www%d.mlan", j*SRV_IN_GROUP + i); ret = pssh_server_add(pssh, name, 22); } /* pssh_server_add(pssh, "blah", 22); */ /* pssh_server_add(pssh, "test", 22); */ /* pssh_server_add(pssh, "main1.mlan", 22); */ /* pssh_server_add(pssh, "www1", 22); */ /* pssh_server_add(pssh, "www3", 22); */ /* pssh_server_add(pssh, "www5", 22); */ /* pssh_server_add(pssh, "joppa", 22); */ /* pssh_server_add(pssh, "joppa2", 22); */ /* pssh_server_add(pssh, "www6", 22); */ i = 0; /* wrong call, need be still! */ pssh_server_next(pssh); /* connect */ do { ret = pssh_connect(pssh, &ent, TIMEOUT); printf("ret = %s for %s\n", conn_ret_str[ret], pssh_serv_name(ent)); i++; } while (ret == PSSH_CONNECTED); printf("ret = %s\n", conn_ret_str[ret]); printf("i = %d\n", i); /* stat */ ent = pssh_server_first(pssh); while (ent != NULL) { printf("%s: %s\n", pssh_serv_name(ent), pssh_stat_str(ent)); ent = pssh_server_next(pssh); } /* if (ret == PSSH_TIMEOUT) */ /* exit(0); */ /* add cp & exec */ task_list = pssh_task_list_init(pssh); assert(task_list != NULL); /* Err */ ret = pssh_cp_to_server(task_list, "", "a", "b"); assert(ret == -1); ret = pssh_cp_to_server(task_list, "s", "", "b"); assert(ret == -1); ret = pssh_cp_to_server(task_list, "s", "a", ""); assert(ret == -1); ret = pssh_add_cmd(task_list, "", "c"); assert(ret == -1); ret = pssh_add_cmd(task_list, "s", ""); assert(ret == -1); for (i = 1; i < SRV_IN_GROUP; i++) { sprintf(name, "www%d.mlan", j*SRV_IN_GROUP + i); #if 0 sprintf(l_fn, "/tmp/passwd.%s", name); pssh_cp_from_server(task_list, name, l_fn, "/etc/passwd"); sprintf(l_fn, "/tmp/group.%s", name); pssh_cp_from_server(task_list, name, l_fn, "/etc/group"); sprintf(l_fn, "/tmp/profile.%s", name); pssh_cp_from_server(task_list, name, l_fn, "/etc/profile"); #else if ((i == 2) || (i == 4)) { pssh_cp_to_server(task_list, name, "/etc", "/tmp/profile"); } else { pssh_cp_to_server(task_list, name, "/etc", "/tmp/profile"); pssh_cp_to_server(task_list, name, "/etc/profile", "/tmp/profile"); pssh_cp_to_server(task_list, name, "/etc/passwd", "/tmp/passwd"); pssh_cp_to_server(task_list, name, "/etc/hosts", "/tmp/hosts"); } /* pssh_add_cmd(task_list, name, "cat /tmp/profile"); */ #endif } /* pssh_cp_from_server(task_list, "www1", "/tmp/group.www1", "/etc/group"); */ /* pssh_cp_from_server(task_list, "www1", "/tmp/profile.www1", "/etc/profile"); */ /* pssh_cp_from_server(task_list, "www1", "/tmp/passwd.www1", "/etc/passwd"); */ /* pssh_cp_from_server(task_list, "www3", "/tmp/profile.www3", "/etc/profile"); */ /* pssh_cp_from_server(task_list, "www3", "/tmp/group.www3", "/etc/group"); */ /* pssh_cp_from_server(task_list, "www3", "/tmp/passwd.www3", "/etc/passwd"); */ /* pssh_cp_from_server(task_list, "www5", "/tmp/profile.www5", "/etc/profile"); */ /* pssh_cp_from_server(task_list, "www5", "/tmp/group.www5", "/etc/group"); */ /* pssh_cp_from_server(task_list, "www5", "/tmp/passwd.www5", "/etc/passwd"); */ /* pssh_cp_from_server(task_list, "joppa", "/tmp/passwd.j", "/etc/profile"); */ /* pssh_cp_from_server(task_list, "joppa2", "/tmp/passwd.j2", "/etc/profile"); */ /* pssh_cp_from_server(task_list, "www6", "/tmp/passwd.www6", "/etc/profile"); */ /* run */ i = 0; do { i++; ret = pssh_exec(task_list, &task, TIMEOUT); printf("time: %ld, ret = %s for %s\n", time(0), conn_ret_str[ret], pssh_task_server_name(task)); } while (ret == PSSH_RUNNING); printf("ret = %s\n", conn_ret_str[ret]); printf("i = %d\n", i); task = pssh_task_first(task_list); while (task != NULL) { printf("%s: get_cmd: <%s>\n", pssh_task_server_name(task), pssh_task_get_cmd(task)); if (pssh_task_type(task) == PSSH_TASK_TYPE_EXEC) { if (pssh_task_stat(task) == PSSH_TASK_DONE) { /* printf("host: %s exit_status: %d\n", */ /* pssh_task_server_name(task), pssh_task_exit_status(task)); */ /* printf("stdout <%.*s>\n", pssh_task_stdout_len(task), pssh_task_stdout(task)); */ /* printf("stderr <%.*s>\n", pssh_task_stderr_len(task), pssh_task_stderr(task)); */ } } else if (pssh_task_type(task) == PSSH_TASK_TYPE_COPY) { } else { printf("shit happened. unknown task type %d\n", pssh_task_type(task)); abort(); } task = pssh_task_next(task_list); } } #else pssh = pssh_init("rushba", "/home/rushba/tmp/id_dsa.pub", NULL, ""); assert(pssh != NULL); pssh_server_add(pssh, "www110", 22); /* connect */ do { ret = pssh_connect(pssh, &ent, TIMEOUT); printf("ret = %s for %s\n", conn_ret_str[ret], pssh_serv_name(ent)); i++; } while (ret == PSSH_CONNECTED); /* add cp & exec */ task_list = pssh_task_list_init(pssh); assert(task_list != NULL); pssh_cp_to_server(task_list, "www110", "/etc/raw", "/tmp/raw"); pssh_cp_to_server(task_list, "www110", "/etc/rpc", "/tmp/rpc"); pssh_cp_to_server(task_list, "www110", "/etc/nsswitch.conf", "/tmp/nsswitch.conf"); pssh_cp_to_server(task_list, "www110", "/etc/motd", "/tmp/motd"); pssh_cp_to_server(task_list, "www110", "/etc/mtab", "/tmp/mtab"); pssh_cp_to_server(task_list, "www110", "/etc/defaultdomain", "/tmp/defaultdomain"); pssh_cp_to_server(task_list, "www110", "/etc/wvdial.conf", "/tmp/wvdial.conf"); pssh_cp_to_server(task_list, "www110", "/etc/ltrace.conf", "/tmp/ltrace.conf"); pssh_cp_to_server(task_list, "www110", "/etc/smpppd.conf", "/tmp/smpppd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/issue.net", "/tmp/issue.net"); pssh_cp_to_server(task_list, "www110", "/etc/ftpusers", "/tmp/ftpusers"); pssh_cp_to_server(task_list, "www110", "/etc/securetty", "/tmp/securetty"); pssh_cp_to_server(task_list, "www110", "/etc/shadow.YaST2save", "/tmp/shadow.YaST2save"); pssh_cp_to_server(task_list, "www110", "/etc/crontab", "/tmp/crontab"); pssh_cp_to_server(task_list, "www110", "/etc/csh.cshrc", "/tmp/csh.cshrc"); pssh_cp_to_server(task_list, "www110", "/etc/auto.master", "/tmp/auto.master"); pssh_cp_to_server(task_list, "www110", "/etc/csh.login", "/tmp/csh.login"); pssh_cp_to_server(task_list, "www110", "/etc/generateCRL.conf", "/tmp/generateCRL.conf"); pssh_cp_to_server(task_list, "www110", "/etc/HOSTNAME", "/tmp/HOSTNAME"); pssh_cp_to_server(task_list, "www110", "/etc/defkeymap.map", "/tmp/defkeymap.map"); pssh_cp_to_server(task_list, "www110", "/etc/modprobe.conf", "/tmp/modprobe.conf"); pssh_cp_to_server(task_list, "www110", "/etc/fdprm", "/tmp/fdprm"); pssh_cp_to_server(task_list, "www110", "/etc/fstab", "/tmp/fstab"); pssh_cp_to_server(task_list, "www110", "/etc/group", "/tmp/group"); pssh_cp_to_server(task_list, "www110", "/etc/hosts", "/tmp/hosts"); pssh_cp_to_server(task_list, "www110", "/etc/issue", "/tmp/issue"); pssh_cp_to_server(task_list, "www110", "/etc/magic", "/tmp/magic"); pssh_cp_to_server(task_list, "www110", "/etc/vimrc", "/tmp/vimrc"); pssh_cp_to_server(task_list, "www110", "/etc/zshrc", "/tmp/zshrc"); pssh_cp_to_server(task_list, "www110", "/etc/Muttrc", "/tmp/Muttrc"); pssh_cp_to_server(task_list, "www110", "/etc/microcode.dat", "/tmp/microcode.dat"); pssh_cp_to_server(task_list, "www110", "/etc/yp.conf", "/tmp/yp.conf"); pssh_cp_to_server(task_list, "www110", "/etc/smartd.conf", "/tmp/smartd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/krb5.conf", "/tmp/krb5.conf"); pssh_cp_to_server(task_list, "www110", "/etc/defkeymap.name", "/tmp/defkeymap.name"); pssh_cp_to_server(task_list, "www110", "/etc/scpm.users", "/tmp/scpm.users"); pssh_cp_to_server(task_list, "www110", "/etc/insserv.conf", "/tmp/insserv.conf"); pssh_cp_to_server(task_list, "www110", "/etc/lesskey", "/tmp/lesskey"); pssh_cp_to_server(task_list, "www110", "/etc/c-client.cf", "/tmp/c-client.cf"); pssh_cp_to_server(task_list, "www110", "/etc/mysqlaccess.conf", "/tmp/mysqlaccess.conf"); pssh_cp_to_server(task_list, "www110", "/etc/auto.net", "/tmp/auto.net"); pssh_cp_to_server(task_list, "www110", "/etc/auto.smb", "/tmp/auto.smb"); pssh_cp_to_server(task_list, "www110", "/etc/nscd.conf", "/tmp/nscd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/grub.conf", "/tmp/grub.conf"); pssh_cp_to_server(task_list, "www110", "/etc/cron.deny", "/tmp/cron.deny"); pssh_cp_to_server(task_list, "www110", "/etc/mail.rc", "/tmp/mail.rc"); pssh_cp_to_server(task_list, "www110", "/etc/mailcap", "/tmp/mailcap"); pssh_cp_to_server(task_list, "www110", "/etc/permissions", "/tmp/permissions"); pssh_cp_to_server(task_list, "www110", "/etc/slp.reg", "/tmp/slp.reg"); pssh_cp_to_server(task_list, "www110", "/etc/slp.spi", "/tmp/slp.spi"); pssh_cp_to_server(task_list, "www110", "/etc/pythonstart", "/tmp/pythonstart"); pssh_cp_to_server(task_list, "www110", "/etc/slsh.rc", "/tmp/slsh.rc"); pssh_cp_to_server(task_list, "www110", "/etc/filesystems", "/tmp/filesystems"); pssh_cp_to_server(task_list, "www110", "/etc/DIR_COLORS", "/tmp/DIR_COLORS"); pssh_cp_to_server(task_list, "www110", "/etc/permissions.paranoid", "/tmp/permissions.paranoid"); pssh_cp_to_server(task_list, "www110", "/etc/idn.conf", "/tmp/idn.conf"); pssh_cp_to_server(task_list, "www110", "/etc/idnalias.conf", "/tmp/idnalias.conf"); pssh_cp_to_server(task_list, "www110", "/etc/xinetd.conf", "/tmp/xinetd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/rpasswd.conf", "/tmp/rpasswd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/scsi_id.config", "/tmp/scsi_id.config"); pssh_cp_to_server(task_list, "www110", "/etc/hosts.allow", "/tmp/hosts.allow"); pssh_cp_to_server(task_list, "www110", "/etc/uniconf.conf", "/tmp/uniconf.conf"); pssh_cp_to_server(task_list, "www110", "/etc/hosts.equiv", "/tmp/hosts.equiv"); pssh_cp_to_server(task_list, "www110", "/etc/screenrc", "/tmp/screenrc"); pssh_cp_to_server(task_list, "www110", "/etc/sudoers", "/tmp/sudoers"); pssh_cp_to_server(task_list, "www110", "/etc/modprobe.conf.local", "/tmp/modprobe.conf.local"); pssh_cp_to_server(task_list, "www110", "/etc/exports", "/tmp/exports"); pssh_cp_to_server(task_list, "www110", "/etc/ethers", "/tmp/ethers"); pssh_cp_to_server(task_list, "www110", "/etc/rc.splash", "/tmp/rc.splash"); pssh_cp_to_server(task_list, "www110", "/etc/rc.status", "/tmp/rc.status"); pssh_cp_to_server(task_list, "www110", "/etc/smpppd-c.conf", "/tmp/smpppd-c.conf"); pssh_cp_to_server(task_list, "www110", "/etc/permissions.local", "/tmp/permissions.local"); pssh_cp_to_server(task_list, "www110", "/etc/fb.modes", "/tmp/fb.modes"); pssh_cp_to_server(task_list, "www110", "/etc/shadow.old", "/tmp/shadow.old"); pssh_cp_to_server(task_list, "www110", "/etc/rsyncd.secrets", "/tmp/rsyncd.secrets"); pssh_cp_to_server(task_list, "www110", "/etc/evms.conf", "/tmp/evms.conf"); pssh_cp_to_server(task_list, "www110", "/etc/my.cnf", "/tmp/my.cnf"); pssh_cp_to_server(task_list, "www110", "/etc/hushlogins", "/tmp/hushlogins"); pssh_cp_to_server(task_list, "www110", "/etc/ttytype", "/tmp/ttytype"); pssh_cp_to_server(task_list, "www110", "/etc/adjtime", "/tmp/adjtime"); pssh_cp_to_server(task_list, "www110", "/etc/suseRegister.conf", "/tmp/suseRegister.conf"); pssh_cp_to_server(task_list, "www110", "/etc/passwd", "/tmp/passwd"); pssh_cp_to_server(task_list, "www110", "/etc/group.YaST2save", "/tmp/group.YaST2save"); pssh_cp_to_server(task_list, "www110", "/etc/sysctl.conf", "/tmp/sysctl.conf"); pssh_cp_to_server(task_list, "www110", "/etc/.pwd.lock", "/tmp/.pwd.lock"); pssh_cp_to_server(task_list, "www110", "/etc/aliases.db", "/tmp/aliases.db"); pssh_cp_to_server(task_list, "www110", "/etc/bash.bashrc.local", "/tmp/bash.bashrc.local"); pssh_cp_to_server(task_list, "www110", "/etc/papersize", "/tmp/papersize"); pssh_cp_to_server(task_list, "www110", "/etc/logindevperm", "/tmp/logindevperm"); pssh_cp_to_server(task_list, "www110", "/etc/slp.conf", "/tmp/slp.conf"); pssh_cp_to_server(task_list, "www110", "/etc/shadow", "/tmp/shadow"); pssh_cp_to_server(task_list, "www110", "/etc/shells", "/tmp/shells"); pssh_cp_to_server(task_list, "www110", "/etc/netgroup", "/tmp/netgroup"); pssh_cp_to_server(task_list, "www110", "/etc/localtime", "/tmp/localtime"); pssh_cp_to_server(task_list, "www110", "/etc/networks", "/tmp/networks"); pssh_cp_to_server(task_list, "www110", "/etc/auto.misc", "/tmp/auto.misc"); pssh_cp_to_server(task_list, "www110", "/etc/idmapd.conf", "/tmp/idmapd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/ld.so.conf", "/tmp/ld.so.conf"); pssh_cp_to_server(task_list, "www110", "/etc/aliases", "/tmp/aliases"); pssh_cp_to_server(task_list, "www110", "/etc/wgetrc", "/tmp/wgetrc"); pssh_cp_to_server(task_list, "www110", "/etc/rc.d.README", "/tmp/rc.d.README"); pssh_cp_to_server(task_list, "www110", "/etc/openct.conf", "/tmp/openct.conf"); pssh_cp_to_server(task_list, "www110", "/etc/printcap_nodefault", "/tmp/printcap_nodefault"); pssh_cp_to_server(task_list, "www110", "/etc/printcap", "/tmp/printcap"); pssh_cp_to_server(task_list, "www110", "/etc/opiekeys", "/tmp/opiekeys"); pssh_cp_to_server(task_list, "www110", "/etc/group.old", "/tmp/group.old"); pssh_cp_to_server(task_list, "www110", "/etc/ntp.conf", "/tmp/ntp.conf"); pssh_cp_to_server(task_list, "www110", "/etc/environment", "/tmp/environment"); pssh_cp_to_server(task_list, "www110", "/etc/at.deny", "/tmp/at.deny"); pssh_cp_to_server(task_list, "www110", "/etc/hosts.YaST2save", "/tmp/hosts.YaST2save"); pssh_cp_to_server(task_list, "www110", "/etc/services", "/tmp/services"); pssh_cp_to_server(task_list, "www110", "/etc/SuSE-release", "/tmp/SuSE-release"); pssh_cp_to_server(task_list, "www110", "/etc/sensors.conf", "/tmp/sensors.conf"); pssh_cp_to_server(task_list, "www110", "/etc/zshenv", "/tmp/zshenv"); pssh_cp_to_server(task_list, "www110", "/etc/ld.so.cache", "/tmp/ld.so.cache"); pssh_cp_to_server(task_list, "www110", "/etc/permissions.easy", "/tmp/permissions.easy"); pssh_cp_to_server(task_list, "www110", "/etc/rsyncd.conf", "/tmp/rsyncd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/gssapi_mech.conf", "/tmp/gssapi_mech.conf"); pssh_cp_to_server(task_list, "www110", "/etc/opensc.conf", "/tmp/opensc.conf"); pssh_cp_to_server(task_list, "www110", "/etc/aclocal_dirlist", "/tmp/aclocal_dirlist"); pssh_cp_to_server(task_list, "www110", "/etc/hosts.deny", "/tmp/hosts.deny"); pssh_cp_to_server(task_list, "www110", "/etc/nntpserver", "/tmp/nntpserver"); pssh_cp_to_server(task_list, "www110", "/etc/logrotate.conf", "/tmp/logrotate.conf"); pssh_cp_to_server(task_list, "www110", "/etc/lesskey.bin", "/tmp/lesskey.bin"); pssh_cp_to_server(task_list, "www110", "/etc/bindresvport.blacklist", "/tmp/bindresvport.blacklist"); pssh_cp_to_server(task_list, "www110", "/etc/bash.bashrc", "/tmp/bash.bashrc"); pssh_cp_to_server(task_list, "www110", "/etc/inittab", "/tmp/inittab"); pssh_cp_to_server(task_list, "www110", "/etc/inputrc", "/tmp/inputrc"); pssh_cp_to_server(task_list, "www110", "/etc/host.conf", "/tmp/host.conf"); pssh_cp_to_server(task_list, "www110", "/etc/powerd.conf", "/tmp/powerd.conf"); pssh_cp_to_server(task_list, "www110", "/etc/login.defs", "/tmp/login.defs"); pssh_cp_to_server(task_list, "www110", "/etc/protocols", "/tmp/protocols"); pssh_cp_to_server(task_list, "www110", "/etc/passwd.YaST2save", "/tmp/passwd.YaST2save"); pssh_cp_to_server(task_list, "www110", "/etc/ldap.conf", "/tmp/ldap.conf"); pssh_cp_to_server(task_list, "www110", "/etc/passwd.old", "/tmp/passwd.old"); pssh_cp_to_server(task_list, "www110", "/etc/resolv.conf", "/tmp/resolv.conf"); pssh_cp_to_server(task_list, "www110", "/etc/manpath.config", "/tmp/manpath.config"); pssh_cp_to_server(task_list, "www110", "/etc/profile", "/tmp/profile"); pssh_cp_to_server(task_list, "www110", "/etc/resmgr.conf", "/tmp/resmgr.conf"); pssh_cp_to_server(task_list, "www110", "/etc/hosts.lpd", "/tmp/hosts.lpd"); pssh_cp_to_server(task_list, "www110", "/etc/permissions.secure", "/tmp/permissions.secure"); pssh_cp_to_server(task_list, "www110", "/etc/mime.types", "/tmp/mime.types"); #endif /* run */ i = 0; do { i++; ret = pssh_exec(task_list, &task, TIMEOUT); printf("time: %ld, ret = %s for %s <%s>\n", time(0), conn_ret_str[ret], pssh_task_server_name(task), pssh_task_get_cmd(task)); } while (ret == PSSH_RUNNING); task = pssh_task_first(task_list); while (task != NULL) { printf("%s: get_cmd: <%s> stat %s\n", pssh_task_server_name(task), pssh_task_get_cmd(task), statstr[pssh_task_stat(task)]); task = pssh_task_next(task_list); } pssh_task_list_free(task_list); pssh_free(pssh); printf("ret = %s\n", conn_ret_str[ret]); /* Cleanup */ getrusage(RUSAGE_SELF, &ru); utime = (ru.ru_utime.tv_usec + ru.ru_utime.tv_sec*1000000) / 1000; stime = (ru.ru_stime.tv_usec + ru.ru_stime.tv_sec*1000000) / 1000; printf("utime : %lu, stime: %lu\n", utime, stime); (void) argc; (void) argv; return 0; }