char * rshLoad(char *host, char *user, char *cmd) { char *chpt=host,*buf=0; int fd,errfd; long ntot; extern int rcmd(); fd=rcmd(&chpt,RSH_PORT,user,user,cmd,&errfd); if (fd<0) { fprintf(stderr,"rcmd: got no remote stdout descriptor\n"); goto cleanup; } if (errfd<0) { fprintf(stderr,"rcmd: got no remote stderr descriptor\n"); goto cleanup; } if (!(buf=handleInput(fd,errfd,&ntot))) { goto cleanup; /* error message has already been printed */ } fprintf(stderr,"0x%lx (%li) bytes read\n",ntot,ntot); cleanup: if (fd>=0) close(fd); if (errfd>=0) close(errfd); return buf; }
void rmtgetconn(void) { char *cp; const char *rmt; static struct servent *sp = NULL; static struct passwd *pwd = NULL; char *tuser; int size; int throughput; int on; if (sp == NULL) { sp = getservbyname("shell", "tcp"); if (sp == NULL) { msg("shell/tcp: unknown service\n"); exit(X_STARTUP); } pwd = getpwuid(getuid()); if (pwd == NULL) { msg("who are you?\n"); exit(X_STARTUP); } } if ((cp = strchr(rmtpeer, '@')) != NULL) { tuser = rmtpeer; *cp = '\0'; if (!okname(tuser)) exit(X_STARTUP); rmtpeer = ++cp; } else tuser = pwd->pw_name; if ((rmt = getenv("RMT")) == NULL) rmt = _PATH_RMT; msg("%s", ""); rmtape = rcmd(&rmtpeer, (u_short)sp->s_port, pwd->pw_name, tuser, rmt, &errfd); if (rmtape < 0) { msg("login to %s as %s failed.\n", rmtpeer, tuser); return; } (void)fprintf(stderr, "Connection to %s established.\n", rmtpeer); size = ntrec * TP_BSIZE; if (size > 60 * 1024) /* XXX */ size = 60 * 1024; /* Leave some space for rmt request/response protocol */ size += 2 * 1024; while (size > TP_BSIZE && setsockopt(rmtape, SOL_SOCKET, SO_SNDBUF, &size, sizeof (size)) < 0) size -= TP_BSIZE; (void)setsockopt(rmtape, SOL_SOCKET, SO_RCVBUF, &size, sizeof (size)); throughput = IPTOS_THROUGHPUT; if (setsockopt(rmtape, IPPROTO_IP, IP_TOS, &throughput, sizeof(throughput)) < 0) perror("IP_TOS:IPTOS_THROUGHPUT setsockopt"); on = 1; if (setsockopt(rmtape, IPPROTO_TCP, TCP_NODELAY, &on, sizeof (on)) < 0) perror("TCP_NODELAY setsockopt"); }
void tolocal(int argc, char *argv[]) { int i, len, tos; char *bp, *host, *src, *suser; for (i = 0; i < argc - 1; i++) { if (!(src = colon(argv[i]))) { /* Local to local. */ len = strlen(_PATH_CP) + strlen(argv[i]) + strlen(argv[argc - 1]) + 20; if (!(bp = malloc(len))) err(1, NULL); (void)snprintf(bp, len, "exec %s%s%s %s %s", _PATH_CP, iamrecursive ? " -r" : "", pflag ? " -p" : "", argv[i], argv[argc - 1]); if (susystem(bp, userid)) ++errs; (void)free(bp); continue; } *src++ = 0; if (*src == 0) src = "."; if ((host = strchr(argv[i], '@')) == NULL) { host = argv[i]; suser = pwd->pw_name; } else { *host++ = 0; suser = argv[i]; if (*suser == '\0') suser = pwd->pw_name; else if (!okname(suser)) continue; } len = strlen(src) + CMDNEEDS + 20; if ((bp = malloc(len)) == NULL) err(1, NULL); (void)snprintf(bp, len, "%s -f %s", cmd, src); rem = #ifdef KERBEROS use_kerberos ? kerberos(&host, bp, pwd->pw_name, suser) : #endif rcmd(&host, port, pwd->pw_name, suser, bp, 0); (void)free(bp); if (rem < 0) { ++errs; continue; } (void)seteuid(userid); tos = IPTOS_THROUGHPUT; if (setsockopt(rem, IPPROTO_IP, IP_TOS, &tos, sizeof(int)) < 0) warn("TOS (ignored)"); sink(1, argv + argc - 1); (void)seteuid(0); (void)close(rem); rem = -1; } }
typename CMDReturn<CMD>::TReturn run(CMD* cmd) { CRef<IEditCommand> rcmd(cmd); CRef<IScopeTransaction_Impl> tr( &m_Scope.GetTransaction() ); cmd->Do( *tr ); if (tr->ReferencedOnlyOnce()) tr->Commit(); return CMDReturn<CMD>::GetRet(cmd); }
int CDemoeApp::Run(void) { try { DBLB_INSTALL_DEFAULT(); CODBCContext my_context; auto_ptr<CDB_Connection> con(my_context.Connect("msdev1", "DBAPI_test", "allowed", 0)); auto_ptr<CDB_RPCCmd> rcmd(con->RPC("sp_who")); rcmd->Send(); while (rcmd->HasMoreResults()) { auto_ptr<CDB_Result> r(rcmd->Result()); if (!r.get()) continue; if (r->ResultType() == eDB_RowResult) { while (r->Fetch()) { for (unsigned int j = 0; j < r->NofItems(); j++) { EDB_Type rt = r->ItemDataType(j); if (rt == eDB_Char || rt == eDB_VarChar) { CDB_VarChar r_vc; r->GetItem(&r_vc); cout << r->ItemName(j) << ": " << (r_vc.IsNULL()? kEmptyStr : r_vc.Value()) << " \t"; } else if (rt == eDB_Int || rt == eDB_SmallInt || rt == eDB_TinyInt) { CDB_Int r_in; r->GetItem(&r_in); cout << r->ItemName(j) << ": " << r_in.Value() << ' '; } else r->SkipItem(); } cout << endl; } } } } catch (CDB_Exception& e) { CDB_UserHandler_Stream myExHandler(&cerr); myExHandler.HandleIt(&e); return 1; } catch (const CException&) { return 1; } return 0; }
void rmtgetconn(void) { char *cp; static struct servent *sp = NULL; static struct passwd *pwd = NULL; #ifdef notdef static int on = 1; #endif char *tuser; int size; int maxseg; if (sp == NULL) { sp = getservbyname("shell", "tcp"); if (sp == NULL) errx(1, "shell/tcp: unknown service"); pwd = getpwuid(getuid()); if (pwd == NULL) errx(1, "who are you?"); } if ((cp = strchr(rmtpeer, '@')) != NULL) { tuser = rmtpeer; *cp = '\0'; if (!okname(tuser)) exit(1); rmtpeer = ++cp; } else tuser = pwd->pw_name; rmtape = rcmd(&rmtpeer, (u_short)sp->s_port, pwd->pw_name, tuser, _PATH_RMT, NULL); if (rmtape == -1) exit(1); /* rcmd already printed error message */ size = TP_BSIZE; if (size > 60 * 1024) /* XXX */ size = 60 * 1024; /* Leave some space for rmt request/response protocol */ size += 2 * 1024; while (size > TP_BSIZE && setsockopt(rmtape, SOL_SOCKET, SO_SNDBUF, &size, sizeof (size)) < 0) size -= TP_BSIZE; (void)setsockopt(rmtape, SOL_SOCKET, SO_RCVBUF, &size, sizeof (size)); maxseg = 1024; (void)setsockopt(rmtape, IPPROTO_TCP, TCP_MAXSEG, &maxseg, sizeof (maxseg)); #ifdef notdef if (setsockopt(rmtape, IPPROTO_TCP, TCP_NODELAY, &on, sizeof (on)) < 0) perror("TCP_NODELAY setsockopt"); #endif }
void rmtgetconn(void) { char *cp; static struct servent *sp = NULL; static struct passwd *pwd = NULL; static int on = 1; char *tuser, *name; int size; int maxseg; if (sp == NULL) { sp = getservbyname("shell", "tcp"); if (sp == NULL) errx(X_STARTUP, "shell/tcp: unknown service"); pwd = getpwuid(getuid()); if (pwd == NULL) errx(X_STARTUP, "who are you?"); } if ((name = strdup(pwd->pw_name)) == NULL) err(X_STARTUP, "malloc"); if ((cp = strchr(rmtpeer, '@')) != NULL) { tuser = rmtpeer; *cp = '\0'; if (!okname(tuser)) exit(X_STARTUP); rmtpeer = ++cp; } else tuser = name; rmtape = rcmd(&rmtpeer, sp->s_port, name, tuser, _PATH_RMT, NULL); (void)free(name); if (rmtape < 0) return; size = ntrec * TP_BSIZE; if (size > 60 * 1024) /* XXX */ size = 60 * 1024; /* Leave some space for rmt request/response protocol */ size += 2 * 1024; while (size > TP_BSIZE && setsockopt(rmtape, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)) < 0) size -= TP_BSIZE; (void)setsockopt(rmtape, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)); maxseg = 1024; (void)setsockopt(rmtape, IPPROTO_TCP, TCP_MAXSEG, &maxseg, sizeof(maxseg)); (void) setsockopt(rmtape, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)); }
static int remotecmd(char *rhost, char *luser, char *ruser, char *cmd) { int desc; #if defined(DIRECT_RCMD) static int port = -1; #endif /* DIRECT_RCMD */ debugmsg(DM_MISC, "local user = %s remote user = %s\n", luser, ruser); debugmsg(DM_MISC, "Remote command = '%s'\n", cmd); (void) fflush(stdout); (void) fflush(stderr); (void) signal(SIGALRM, sighandler); (void) alarm(RTIMEOUT); #if defined(DIRECT_RCMD) (void) signal(SIGPIPE, sighandler); if (port < 0) { struct servent *sp; if ((sp = getservbyname("shell", "tcp")) == NULL) fatalerr("shell/tcp: unknown service"); port = sp->s_port; } if (becomeroot() != 0) exit(1); desc = rcmd(&rhost, port, luser, ruser, cmd, 0); if (becomeuser() != 0) exit(1); #else /* !DIRECT_RCMD */ debugmsg(DM_MISC, "Remote shell command = '%s'\n", path_remsh ? path_remsh : "default"); (void) signal(SIGPIPE, SIG_IGN); desc = rcmdsh(&rhost, -1, luser, ruser, cmd, path_remsh); if (desc > 0) (void) signal(SIGPIPE, sighandler); #endif /* DIRECT_RCMD */ (void) alarm(0); return(desc); }
void toremote(char *targ, int argc, char *argv[]) { int i, len, tos; char *bp, *host, *src, *suser, *thost, *tuser; *targ++ = 0; if (*targ == 0) targ = "."; if ((thost = strchr(argv[argc - 1], '@'))) { /* user@host */ *thost++ = 0; tuser = argv[argc - 1]; if (*tuser == '\0') tuser = NULL; else if (!okname(tuser)) exit(1); } else { thost = argv[argc - 1]; tuser = NULL; } for (i = 0; i < argc - 1; i++) { src = colon(argv[i]); if (src) { /* remote to remote */ *src++ = 0; if (*src == 0) src = "."; host = strchr(argv[i], '@'); len = strlen(_PATH_RSH) + strlen(argv[i]) + strlen(src) + (tuser ? strlen(tuser) : 0) + strlen(thost) + strlen(targ) + CMDNEEDS + 20; if (!(bp = malloc(len))) err(1, NULL); if (host) { *host++ = 0; suser = argv[i]; if (*suser == '\0') suser = pwd->pw_name; else if (!okname(suser)) continue; (void)snprintf(bp, len, "%s %s -l %s -n %s %s '%s%s%s:%s'", _PATH_RSH, host, suser, cmd, src, tuser ? tuser : "", tuser ? "@" : "", thost, targ); } else (void)snprintf(bp, len, "exec %s %s -n %s %s '%s%s%s:%s'", _PATH_RSH, argv[i], cmd, src, tuser ? tuser : "", tuser ? "@" : "", thost, targ); (void)susystem(bp, userid); (void)free(bp); } else { /* local to remote */ if (rem == -1) { len = strlen(targ) + CMDNEEDS + 20; if (!(bp = malloc(len))) err(1, NULL); (void)snprintf(bp, len, "%s -t %s", cmd, targ); host = thost; #ifdef KERBEROS if (use_kerberos) rem = kerberos(&host, bp, pwd->pw_name, tuser ? tuser : pwd->pw_name); else #endif rem = rcmd(&host, port, pwd->pw_name, tuser ? tuser : pwd->pw_name, bp, 0); if (rem < 0) exit(1); tos = IPTOS_THROUGHPUT; if (setsockopt(rem, IPPROTO_IP, IP_TOS, &tos, sizeof(int)) < 0) warn("TOS (ignored)"); if (response() < 0) exit(1); (void)free(bp); (void)setuid(userid); } source(1, argv+i); } } }