*** ../../netlib/pvm3.3.7/src/lpvm.c Tue Feb 07 15:16:11 1995 --- lpvm.c Mon May 15 14:17:06 1995 *************** *** 1971,1976 **** --- 1971,1977 ---- char buf[16]; /* for converting sockaddr */ char *p; int x; + int gid; /* pvm_setopt(PvmDebugMask, -1); *************** *** 2033,2038 **** --- 2034,2045 ---- pvmlogerror("pvmbeatask() can't creat t-auth file\n"); cc = PvmSysErr; goto bail2; + } + if ((gid = pvmgetugid()) != -1) { + if (fchown(authfd, -1, gid) == -1) + pvmlogperror("pvmbeatask() can't chown t-auth file"); + if (fchmod(authfd, 0660) == -1) + pvmlogperror("pvmbeatask() can't chmod t-auth file"); } sbf = pvm_setsbuf(pvm_mkbuf(PvmDataFoo)); *** ../../netlib/pvm3.3.7/src/pvmcruft.c Wed Nov 09 10:58:42 1994 --- pvmcruft.c Mon May 15 14:37:16 1995 *************** *** 66,71 **** --- 66,72 ---- #include #define CINDEX(s,c) index(s,c) #endif + #include #include "global.h" #include "protoglarp.h" #include "pvmalloc.h" *************** *** 458,463 **** --- 459,465 ---- char hna[128]; char *p; + int gid; #ifdef SHAREDTMP if (gethostname(hna, sizeof(hna)-1) == -1) { *************** *** 466,477 **** } if (p = CINDEX(hna, '.')) *p = 0; ! (void)sprintf(buf, TDSOCKNAME, pvm_useruid, hna); #else ! (void)sprintf(buf, TDSOCKNAME, pvm_useruid); #endif return buf; } --- 468,515 ---- } if (p = CINDEX(hna, '.')) *p = 0; ! if ((gid = pvmgetugid()) != -1) { ! (void)sprintf(buf, TDSOCKGNAME, gid, hna); ! else ! (void)sprintf(buf, TDSOCKNAME, pvm_useruid, hna); #else ! if ((gid = pvmgetugid()) != -1) ! (void)sprintf(buf, TDSOCKGNAME, gid); ! else ! (void)sprintf(buf, TDSOCKNAME, pvm_useruid); #endif return buf; } + + + int + pvmgetugid() + { + static int gid = -2; + + char *p; + struct group *ge; + char buf[128]; + + if (gid == -2) { + gid = -1; + if (p = getenv("PVM_GID")) { + if (isdigit(*p)) + return (int)atoi(p); + + if (ge = getgrnam(p)) + gid = ge->gr_gid; + else { + sprintf(buf, "pvmgetugid() can't lookup group \"%s\"\n", p); + pvmlogerror(buf); + } + endgrent(); + } + } + + return gid; + } + *** ../../netlib/pvm3.3.7/src/startup.c Tue Feb 07 15:16:13 1995 --- startup.c Mon May 15 14:20:43 1995 *************** *** 242,247 **** --- 242,248 ---- char spath[LEN_OF_TMP_NAM]; /* local socket path */ struct sockaddr_un uns; #endif + int gid; /* * make pvmd-pvmd socket *************** *** 395,400 **** --- 396,407 ---- } } else { + if ((gid = pvmgetugid()) != -1) { + if (fchown(d, -1, gid) == -1) + pvmlogperror("mksocs() can't chown address file"); + if (fchmod(d, 0640) == -1) + pvmlogperror("mksocs() can't chmod address file"); + } cc = write(d, p, strlen(p)); if (cc != strlen(p)) { if (cc == -1) { *** ../../netlib/pvm3.3.7/src/tdpro.c Wed Nov 09 10:58:44 1994 --- tdpro.c Mon May 15 14:20:54 1995 *************** *** 106,111 **** --- 106,113 ---- ** ** ***************/ + char *getenv(); + extern void task_dump(); char *debug_flags(); char *inadport_hex(); *************** *** 298,303 **** --- 300,306 ---- char authfn[LEN_OF_TMP_NAM]; /* t-auth file name */ int d; int cc; + int gid; if (upkint(mp, &ver) || upkstr(mp, authfn, sizeof(authfn))) { pvmlogerror("tm_connect() bad msg format\n"); *************** *** 345,356 **** tp->t_authnam = TALLOC(LEN_OF_TMP_NAM, char, "auth"); (void)TMPNAMFUN(tp->t_authnam); ! if ((tp->t_authfd = open(tp->t_authnam, O_RDONLY|O_CREAT|O_TRUNC, 0600)) ! == -1) { pvmlogperror("tm_connect() can't create d-auth file"); PVM_FREE(tp->t_authnam); tp->t_authnam = 0; goto bail; } /* --- 348,364 ---- tp->t_authnam = TALLOC(LEN_OF_TMP_NAM, char, "auth"); (void)TMPNAMFUN(tp->t_authnam); ! if ((tp->t_authfd = open(tp->t_authnam, O_RDONLY|O_CREAT|O_TRUNC, 0600)) == -1) { pvmlogperror("tm_connect() can't create d-auth file"); PVM_FREE(tp->t_authnam); tp->t_authnam = 0; goto bail; + } + if ((gid = pvmgetugid()) != -1) { + if (fchown(tp->t_authfd, -1, gid) == -1) + pvmlogperror("tm_connect() can't chown d-auth file"); + if (fchmod(tp->t_authfd, 0660) == -1) + pvmlogperror("tm_connect() can't chmod d-auth file"); } /* *** ../../netlib/pvm3.3.7/src/tdpro.h Fri Jun 03 16:38:32 1994 --- tdpro.h Mon May 15 14:32:25 1995 *************** *** 59,66 **** --- 59,68 ---- #ifdef SHAREDTMP #define TDSOCKNAME "/tmp/pvmd.%d.%s" /* file with task->pvmd sockaddr */ + #define TDSOCKGNAME "/tmp/pvmd.g%d.%s" /* file with task->pvmd sockaddr */ #else #define TDSOCKNAME "/tmp/pvmd.%d" /* file with task->pvmd sockaddr */ + #define TDSOCKGNAME "/tmp/pvmd.g%d" /* file with task->pvmd sockaddr */ #endif #define TM_FIRST 0x80010001 /* first TM_ message */