|
|
1.1 ! root 1: /****** apsend.mkhd.c *****/ ! 2: ! 3: #include <stdio.h> ! 4: #include <pwd.h> ! 5: #include <time.h> ! 6: #include <ctype.h> ! 7: #include "apsend.h" ! 8: ! 9: main() ! 10: { ! 11: FILE *hdfile,*dtfile; ! 12: char header[160],tempbuf[80],*temp,tempbuf1[80],*temp1,tempbuf2[80],*temp2; ! 13: char tarray[20],parray[6],narray[8]; ! 14: char *pid, *acct, *bin, *passacct, *nodename, *version, *aversion, *mhinfo, c; ! 15: char *tempbin, *tempacct; ! 16: int uid, i, astatus, passtype, found; ! 17: struct passwd *getpwuid(), *ps; ! 18: struct tm *localtime(), *lt; ! 19: long time(), now; ! 20: char *asctime(), *at, *getenv(); ! 21: ! 22: for (i=0;i<160;i++) { ! 23: header[i] = ' '; ! 24: } ! 25: for (i=0;i<80;i++) { ! 26: tempbuf[i] = '\0'; ! 27: tempbuf1[i] = '\0'; ! 28: tempbuf2[i] = '\0'; ! 29: } ! 30: temp = tempbuf; ! 31: temp1 = tempbuf1; ! 32: temp2 = tempbuf2; ! 33: found = passtype = 0; ! 34: astatus = 1; ! 35: tempbin = tempacct = 0; ! 36: ! 37: pid = getenv("PID"); ! 38: strcpy (parray,pid); ! 39: nodename = getenv("NODE"); ! 40: strcpy (narray,nodename); ! 41: sprintf (&header[UJN],"%s.%s",narray,parray); ! 42: uid = getuid(); ! 43: ps = getpwuid(uid); ! 44: if (ps == NULL) { ! 45: printf ("login not found; job not submitted\n"); ! 46: exit (1); ! 47: } ! 48: strcpy (&header[ULOG],ps->pw_name); ! 49: ! 50: if ((mhinfo = getenv("MHINFO")) != NULL) { ! 51: strcpy (temp1,mhinfo); ! 52: if ((tempbuf1[5] == ',') || (tempbuf1[5] == '\0')) ! 53: i = 5; ! 54: else ! 55: i = 6; ! 56: tempbuf1[i] = tempbuf1[i+34] = '\0'; ! 57: tempbin = &tempbuf1[i+1]; ! 58: strcpy (&header[BIN],tempbin); ! 59: tempacct = temp1; ! 60: } ! 61: if (((bin = getenv("MAILADDR")) != NULL) || (((bin = getenv("BBIN")) != NULL) && (*bin != '0'))) { ! 62: strcpy (temp2,bin); ! 63: tempbuf2[34] = '\0'; ! 64: strcpy (&header[BIN],temp2); ! 65: } ! 66: else ! 67: bin = tempbin; ! 68: if ((acct = getenv("ACCOUNT")) != NULL){ ! 69: strcpy (temp2,acct); ! 70: if ((tempbuf2[5] == ',') || (tempbuf2[5] == '\0')) ! 71: i = 5; ! 72: else ! 73: i = 6; ! 74: tempbuf2[i] = '\0'; ! 75: acct = temp2; ! 76: } ! 77: else ! 78: acct = tempacct; ! 79: if (acct != NULL){ ! 80: astatus = chkacct( acct,i); ! 81: if (astatus != 0){ ! 82: printf ("valid GCOS account number needed; job not submitted\n"); ! 83: exit(2); ! 84: } ! 85: strcpy (&header[MHACCT],acct); ! 86: } ! 87: ! 88: /* try to get GCOS account and/or bin info from passwd file */ ! 89: /* determine which kind of passwd file we have: ! 90: if no '(' in GCOS field, must be research type; ! 91: typical format is ':mhxxxx,myyy:' ! 92: if ')' found, followed by < 5 char string, must be ISCC standard style; ! 93: typical format is ':zzzzz(mhxxxx)myyy,zzzzz:' ; trailing ',zzzzz' optional; ! 94: if ')' found followed by 5-6 char string, must be USG style; ! 95: typical format is ':zzzzz(mhxxxx)mhxxxx,myyy:'; ! 96: use account number immediately following ')'; ! 97: */ ! 98: ! 99: if ((acct == NULL) || (bin == NULL)){ ! 100: passacct = ps->pw_gecos; ! 101: strcpy (temp,passacct); ! 102: if ((acct == NULL) && (tempbuf[0] == '\0')){ ! 103: printf ("valid GCOS account number needed; job not submitted\n"); ! 104: exit(3); ! 105: } ! 106: for (i=0;i<80;i++){ ! 107: if (tempbuf[i] == '('){ ! 108: passtype=2; ! 109: break; ! 110: } ! 111: if ((tempbuf[i] == ':' ) || (tempbuf[i] == '\0')){ ! 112: passtype=1; ! 113: break; ! 114: } ! 115: } ! 116: if (passtype == 2){ ! 117: for (i=0;i<80;i++){ ! 118: if (tempbuf[i] == ')') ! 119: found = i; ! 120: if ((found != 0) && (tempbuf[i] == ',')) ! 121: if (((i - found) == 6) || ((i - found) == 7)) ! 122: passtype = 3; ! 123: if ((tempbuf[i] == ':') || (tempbuf[i] == '\0')) ! 124: break; ! 125: } ! 126: } ! 127: if (passtype == 1){ ! 128: passacct = temp; ! 129: while ((c = *temp++) != '\0') ! 130: if (c == ',') break; ! 131: } ! 132: if (passtype == 2){ ! 133: while (*temp++ != '('); ! 134: passacct = temp; ! 135: while ((c = *temp++) != '\0') ! 136: if (c == ')') break; ! 137: } ! 138: if (passtype == 3){ ! 139: while (*temp++ != ')'); ! 140: passacct = temp; ! 141: while ((c = *temp++) != '\0') ! 142: if (c == ',') break; ! 143: } ! 144: if (bin == NULL) ! 145: strcpy (&header[BIN],temp); ! 146: temp--; ! 147: *temp = '\0'; ! 148: i = temp - passacct; ! 149: if (acct == NULL){ ! 150: astatus = chkacct( passacct,i); ! 151: if (astatus != 0){ ! 152: printf ("valid GCOS account number needed; job not submitted\n"); ! 153: exit(4); ! 154: } ! 155: strcpy (&header[MHACCT],passacct); ! 156: } ! 157: } ! 158: now = time((long *)0); ! 159: lt = localtime(&now); ! 160: sprintf (&header[TODAPS],"%02d",lt->tm_mon+1); ! 161: sprintf (&header[TODAPS+2],"%02d",lt->tm_mday); ! 162: sprintf (&header[TODAPS+4],"%02d",lt->tm_hour); ! 163: sprintf (&header[TODAPS+6],"%02d",lt->tm_min); ! 164: sprintf (&header[TODAPS+8],"%02d",lt->tm_sec); ! 165: version = getenv("VERS"); ! 166: strcpy (tarray,version); ! 167: sprintf (&header[VERSION],"%s",tarray); ! 168: aversion = getenv("AVERS"); ! 169: strcpy (tarray,aversion); ! 170: sprintf (&header[AVERSION],"%s",tarray); ! 171: sprintf (&header[159],"%c",'\n'); ! 172: for (i=0;i<160;i++) ! 173: if (header[i] == '\0') ! 174: header[i] = ' '; ! 175: strcpy (tarray,"/tmp/apshead"); ! 176: strncat (tarray,parray,5); ! 177: hdfile = fopen(tarray,"w"); ! 178: strcpy (tarray,"/tmp/apsdate"); ! 179: strncat (tarray,parray,5); ! 180: dtfile = fopen(tarray,"w"); ! 181: if (hdfile == NULL || dtfile == NULL){ ! 182: printf ("can't open /tmp file(s); job not submitted\n"); ! 183: exit(5); ! 184: } ! 185: for (i=0;i<160;i++){ ! 186: c = header[i]; ! 187: putc(c,hdfile); ! 188: } ! 189: at = asctime(lt); ! 190: fprintf (dtfile,"%s",at); ! 191: exit(0); ! 192: } ! 193: chkacct(acct,n) ! 194: char acct[]; int n; ! 195: { ! 196: if ( n == 5){ ! 197: if ((acct[0] == 'm') || (acct[0] == 'M')){ ! 198: acct[6] = '\0'; ! 199: acct[5] = acct[4]; ! 200: acct[4] = acct[3]; ! 201: acct[3] = acct[2]; ! 202: acct[2] = acct[1]; ! 203: acct[1] = 'h'; ! 204: } ! 205: else ! 206: return (1); ! 207: } ! 208: if ((isalpha(acct[0]) != 0) && (isalpha(acct[1]) != 0) && ! 209: (isalnum (acct[2]) != 0) && (isdigit (acct[3]) != 0) && ! 210: (isdigit (acct[4]) != 0) && (isdigit (acct[5]) != 0)) ! 211: ; ! 212: else ! 213: return (1); ! 214: if ((acct[2] == '0') && (acct[3] == '0') && (acct[4] == '0') ! 215: && (acct[5] == '0')) ! 216: return (2); ! 217: else ! 218: return (0); ! 219: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.