| | 2999 | | pvmbeatask() |
| | 3000 | | { |
| | 3001 | | int sbf = 0, rbf = 0; |
| | 3002 | | int prver; |
| | 3003 | | int cookie; |
| | 3004 | | int cc; |
| | 3005 | | char **ep=0; |
| | 3006 | | char authfn[PVMTMPNAMLEN];
|
| | 3007 | | int authfd = -1; |
| | 3008 | | int i; |
| | 3009 | | char buf[16]; |
| | 3010 | | char *p; |
| | 3011 | | struct pvmminfo minfo; |
| | 3012 | | int outtid, outctx, outtag; |
| | 3013 | | int trctid, trcctx, trctag; |
| | 3014 | | int need_trcinfo = 0; |
| | 3015 | | int new_tracer = 0; |
| | 3016 | | char tmask[ 2 * TEV_MASK_LENGTH ];
|
| | 3017 | | int tbuf, topt; |
| | 3018 | | int mid; |
| | 3019 | | #ifdef IMA_BEOLIN |
| | 3020 | | struct hostent *hostaddr; |
| | 3021 | | char namebuf[128]; |
| | 3022 | | #endif |
| | 3023 | | TEV_DECLS
|
| | 3024 | | #ifdef WIN32 |
| | 3025 | | |
| | 3026 | | |
| | 3027 | | |
| | 3028 | | |
| | 3029 | | for (ep=environ;*ep;ep++) |
| | 3030 | | pvmputenv(*ep); |
| | 3031 | | if (WSAStartup(0x0101, &WSAData) != 0) |
| | 3032 | | { |
| | 3033 | | fprintf(stderr,"\nWSAStartup() failed\n"); |
| | 3034 | | ExitProcess(1); |
| | 3035 | | } |
| | 3036 | | |
| | 3037 | | |
| | 3038 | | |
| | 3039 | | #endif |
| | 3040 | | |
| | 3041 | | |
| | 3042 | | |
| | 3043 | | if (pvmmytid != -1) |
| | 3044 | | return 0; |
| | 3045 | | |
| | 3046 | | pvmmydsig = pvmgetdsig(); |
| | 3047 | | |
| | 3048 | | TEV_EXCLUSIVE;
|
| | 3049 | | |
| | 3050 | | authfn[0] = 0; |
| | 3051 | | |
| | 3052 | | #ifndef WIN32 |
| | 3053 | | pvmmyupid = getpid(); |
| | 3054 | | #else |
| | 3055 | | pvmmyupid = _getpid(); |
| | 3056 | | #endif |
| | 3057 | | |
| | 3058 | | |
| | 3059 | | |
| | 3060 | | |
| | 3061 | | |
| | 3062 | | |
| | 3063 | | if (p = getenv("PVMEPID")) |
| | 3064 | | cookie = atoi(p); |
| | 3065 | | else |
| | 3066 | | cookie = 0; |
| | 3067 | | |
| | 3068 | | |
| | 3069 | | |
| | 3070 | | #ifndef WIN32 |
| | 3071 | | if ((pvm_useruid = geteuid()) == -1) { |
| | 3072 | | pvmlogerror("can't getuid()\n"); |
| | 3073 | | cc = PvmSysErr;
|
| | 3074 | | goto bail2; |
| | 3075 | | } |
| | 3076 | | pvmchkuid( pvm_useruid ); |
| | 3077 | | #else |
| | 3078 | | if (!username) |
| | 3079 | | username = MyGetUserName(); |
| | 3080 | | #endif |
| | 3081 | | |
| | 3082 | | if (p = getenv("PVMTASKDEBUG")) { |
| | 3083 | | pvmdebmask = pvmstrtoi(p); |
| | 3084 | | if (pvmdebmask) { |
| | 3085 | | pvmlogprintf("task debug mask is 0x%x (%s)\n", |
| | 3086 | | pvmdebmask, debug_flags(pvmdebmask)); |
| | 3087 | | } |
| | 3088 | | } |
| | 3089 | | |
| | 3090 | | #ifndef IMA_MPP |
| | 3091 | | if (cc = mksocs()) |
| | 3092 | | goto bail2; |
| | 3093 | | #endif |
| | 3094 | | |
| | 3095 | | |
| | 3096 | | |
| | 3097 | | |
| | 3098 | | |
| | 3099 | | pvmrxlist = pmsg_new(1); |
| | 3100 | | BZERO((char*)pvmrxlist, sizeof(struct pmsg));
|
| | 3101 | | pvmrxlist->m_link = pvmrxlist->m_rlink = pvmrxlist; |
| | 3102 | | |
| | 3103 | | ttlist = TALLOC(1, struct ttpcb, "tpcb");
|
| | 3104 | | BZERO((char*)ttlist, sizeof(struct ttpcb));
|
| | 3105 | | ttlist->tt_link = ttlist->tt_rlink = ttlist; |
| | 3106 | | |
| | 3107 | | sbf = pvm_setsbuf(pvm_mkbuf(PvmDataFoo));
|
| | 3108 | | rbf = pvm_setrbuf(0); |
| | 3109 | | |
| | 3110 | | |
| | 3111 | | |
| | 3112 | | |
| | 3113 | | |
| | 3114 | | #ifndef IMA_MPP |
| | 3115 | | #ifndef NOPROT |
| | 3116 | | (void)PVMTMPNAMFUN(authfn);
|
| | 3117 | | #ifdef IMA_OS2 |
| | 3118 | | if ((authfd = open(authfn, O_RDWR|O_CREAT|O_EXCL|O_TRUNC, 0600)) == -1) |
| | 3119 | | #else |
| | 3120 | | if ((authfd = open(authfn, O_RDONLY|O_CREAT|O_EXCL|O_TRUNC, 0600)) == -1)
|
| | 3121 | | #endif |
| | 3122 | | { |
| | 3123 | | pvmlogperror(authfn); |
| | 3124 | | pvmlogerror("pvmbeatask() can't creat t-auth file\n"); |
| | 3125 | | cc = PvmSysErr;
|
| | 3126 | | goto bail2; |
| | 3127 | | } |
| | 3128 | | #endif |
| | 3129 | | |
| | 3130 | | |
| | 3131 | | |
| | 3132 | | |
| | 3133 | | |
| | 3134 | | mxfersingle = 1; |
| | 3135 | | prver = TDPROTOCOL;
|
| | 3136 | | pvm_pkint(&prver, 1, 1); |
| | 3137 | | pvm_pkstr(authfn); |
| | 3138 | | if ((cc = msendrecv(TIDPVMD, TM_CONNECT, SYSCTX_TM)) <= 0)
|
| | 3139 | | goto bail; |
| | 3140 | | pvm_upkint(&prver, 1, 1); |
| | 3141 | | if (prver != TDPROTOCOL) {
|
| | 3142 | | pvmlogprintf("pvmbeatask() t-d protocol mismatch (%d/%d)\n", |
| | 3143 | | TDPROTOCOL, prver);
|
| | 3144 | | cc = PvmSysErr;
|
| | 3145 | | goto bail; |
| | 3146 | | } |
| | 3147 | | pvm_upkint(&cc, 1, 1); |
| | 3148 | | if (!cc) { |
| | 3149 | | pvmlogerror("pvmbeatask() pvmd refuses connection\n"); |
| | 3150 | | cc = PvmSysErr;
|
| | 3151 | | goto bail; |
| | 3152 | | } |
| | 3153 | | |
| | 3154 | | |
| | 3155 | | |
| | 3156 | | |
| | 3157 | | |
| | 3158 | | #ifndef NOPROT |
| | 3159 | | |
| | 3160 | | #ifdef IMA_BEOLIN |
| | 3161 | | sleep(15); |
| | 3162 | | #endif |
| | 3163 | | |
| | 3164 | | if ((cc = read(authfd, (char*)&cc, 1)) == -1) { |
| | 3165 | | pvmlogperror("pvmbeatask() read authfile"); |
| | 3166 | | cc = PvmSysErr;
|
| | 3167 | | goto bail; |
| | 3168 | | } |
| | 3169 | | if (cc != 1) { |
| | 3170 | | pvmlogerror("pvmbeatask() pvmd didn't validate itself\n"); |
| | 3171 | | cc = PvmSysErr;
|
| | 3172 | | goto bail; |
| | 3173 | | } |
| | 3174 | | (void)close(authfd); |
| | 3175 | | (void)unlink(authfn); |
| | 3176 | | |
| | 3177 | | pvm_upkstr(authfn); |
| | 3178 | | if ((authfd = open(authfn, O_WRONLY, 0)) == -1) {
|
| | 3179 | | pvmlogperror(authfn); |
| | 3180 | | pvmlogerror("pvmbeatask() failed to open d-auth file\n"); |
| | 3181 | | authfn[0] = 0; |
| | 3182 | | cc = PvmSysErr;
|
| | 3183 | | goto bail; |
| | 3184 | | } |
| | 3185 | | cc = write(authfd, authfn, 1); |
| true | 3186 | | (void)close(authfd); |
| | 3187 | | if (cc != 1) { |
| | 3188 | | if (cc == -1) |
| | 3189 | | pvmlogperror(authfn); |
| | 3190 | | pvmlogerror("pvmbeatask() can't write d-auth file\n"); |
| | 3191 | | authfn[0] = 0; |
| | 3192 | | cc = PvmSysErr;
|
| | 3193 | | goto bail; |
| | 3194 | | } |
| | 3195 | | authfd = -1; |
| | 3196 | | authfn[0] = 0; |
| | 3197 | | |
| | 3198 | | #endif |
| | 3199 | | |
| | 3200 | | |
| | 3201 | | |
| | 3202 | | |
| | 3203 | | |
| | | | ... |
| | 3408 | | pvm_setrbuf(rbf); |
| | 3409 | | } |
| | 3410 | | |
| | 3411 | | tev_init(); |
| | 3412 | | |
| | 3413 | | if (TEV_AMEXCL) {
|
| | 3414 | | TEV_ENDEXCL;
|
| | 3415 | | } |
| | 3416 | | return 0; |
| | 3417 | | |
| | 3418 | | bail: |
| | 3419 | | if (pvm_getrbuf() > 0) |
| | 3420 | | pvm_freebuf(pvm_getrbuf()); |
| | 3421 | | if (pvm_getsbuf() > 0) |
| | 3422 | | pvm_freebuf(pvm_getsbuf()); |
| | 3423 | | pvm_setrbuf(rbf); |
| | 3424 | | pvm_setsbuf(sbf); |
| | 3425 | | |
| | 3426 | | #ifndef IMA_MPP |
| | 3427 | | if (authfd != -1) |
| *authfd is freed | 3428 | | (void)close(authfd); |