| | 947 | | main(argc, argv) |
| | 948 | | int argc; |
| | 949 | | char **argv; |
| | 950 | | { |
| | 951 | | int i, j; |
| | 952 | | char *name = ""; |
| | 953 | | struct passwd *pe; |
| | 954 | | int testmode = 0; |
| | 955 | | struct timeval tnow; |
| | 956 | | char buf[128]; |
| | 957 | | |
| | 958 | | #ifndef WIN32 |
| | 959 | | |
| | 960 | | check_ext_input(); |
| | 961 | | |
| | 962 | | |
| | 963 | | (void)open("/dev/null", O_RDONLY, 0);
|
| | 964 | | (void)open("/dev/null", O_RDONLY, 0);
|
| | 965 | | (void)open("/dev/null", O_RDONLY, 0);
|
| | 966 | | #else |
| | 967 | | |
| | 968 | | |
| | 969 | | |
| | 970 | | if (WSAStartup(0x0101, &WSAData) != 0) { |
| | 971 | | printf("\nWSAStartup() failed\n"); |
| | 972 | | ExitProcess(1); |
| | 973 | | } |
| | 974 | | setsockopt(INVALID_SOCKET,SOL_SOCKET,SO_OPENTYPE, |
| | 975 | | (char *)&nAlert,sizeof(int)); |
| | 976 | | osinfo=malloc(sizeof(OSVERSIONINFO)); |
| | 977 | | osinfo->dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
| | 978 | | GetVersionEx(osinfo); |
| | 979 | | os_is_NT= ( osinfo->dwPlatformId == VER_PLATFORM_WIN32_NT); |
| | 980 | | #endif |
| | 981 | | |
| | 982 | | { |
| | 983 | | char *p; |
| | 984 | | if (p = getenv("PVMDDEBUG")) |
| | 985 | | pvmdebmask = pvmstrtoi(p); |
| | 986 | | } |
| | 987 | | |
| | 988 | | #ifndef WIN32 |
| | 989 | | if ((pvm_useruid = getuid()) == -1) { |
| | 990 | | pvmlogerror("main() can't getuid()\n"); |
| | 991 | | pvmbailout(0); |
| | 992 | | } |
| | 993 | | pvmchkuid( pvm_useruid ); |
| | 994 | | #else |
| | 995 | | username = MyGetUserName(); |
| | 996 | | #endif |
| | 997 | | |
| | 998 | | pvmsetlog(3); |
| | 999 | | |
| | 1000 | | #ifndef WIN32 |
| | 1001 | | if (pe = getpwuid(pvm_useruid)) |
| | 1002 | | username = STRALLOC(pe->pw_name);
|
| | 1003 | | else |
| | 1004 | | pvmlogerror("main() can't getpwuid\n"); |
| | 1005 | | endpwent(); |
| | 1006 | | #endif |
| | 1007 | | |
| | 1008 | | #ifdef WIN32 |
| | 1009 | | if ((pvmmyupid = getpid()) == -1) { |
| | 1010 | | pvmlogerror("main() can't getpid() %d \n",GetLastError()); |
| | 1011 | | pvmbailout(0); |
| | 1012 | | } |
| | 1013 | | #else |
| | 1014 | | if ((pvmmyupid = getpid()) == -1) { |
| | 1015 | | pvmlogerror("main() can't getpid()\n"); |
| | 1016 | | pvmbailout(0); |
| | 1017 | | } |
| | 1018 | | #endif |
| | 1019 | | |
| | 1020 | | (void)pvmgetroot(); |
| | 1021 | | |
| | 1022 | | sprintf(buf, "PVM_ARCH=%s", myarchname); |
| | 1023 | | pvmputenv(STRALLOC(buf));
|
| | 1024 | | |
| | 1025 | | pvmmydsig = pvmgetdsig(); |
| | 1026 | | |
| | 1027 | | ppi_config(argc, argv); |
| | 1028 | | |
| | 1029 | | #if defined(IMA_PGON) || defined(IMA_SP2MPI) || defined(IMA_AIX4SP2) \ |
| | 1030 | | || defined(IMA_AIX5SP2) || defined(IMA_BEOLIN) |
| | 1031 | | mpp_init(&argc, argv); |
| | 1032 | | #endif |
| | 1033 | | |
| | 1034 | | for (i = j = 1; i < argc; i++) { |
| | 1035 | | if (argv[i][0] == '-') { |
| | 1036 | | switch (argv[i][1]) { |
| | 1037 | | |
| | 1038 | | case 'd': |
| | 1039 | | pvmdebmask = pvmstrtoi(argv[i] + 2); |
| | 1040 | | break; |
| | 1041 | | |
| | 1042 | | case 'n': |
| | 1043 | | name = argv[i] + 2; |
| | 1044 | | break; |
| | 1045 | | |
| | 1046 | | case 'S': |
| | 1047 | | argv[j++] = argv[i]; |
| | 1048 | | case 's': |
| | 1049 | | slavemode = 1; |
| | 1050 | | break; |
| | 1051 | | |
| | 1052 | | case 't': |
| | 1053 | | testmode = 1; |
| | 1054 | | break; |
| | 1055 | | |
| | 1056 | | #ifdef WIN32 |
| | 1057 | | case 'u': |
| | 1058 | | if (os_is_NT==FALSE) { |
| | 1059 | | |
| | 1060 | | argv[i]++;argv[i]++; |
| | 1061 | | strcpy(username,argv[i]); |
| | 1062 | | } |
| | 1063 | | else |
| | 1064 | | if (strcmp(strcat("-u",username),argv[i])) { |
| | | | ... |
| | 1066 | | "Provided Username(%s) does not match ", |
| | 1067 | | username); |
| | 1068 | | fprintf(stderr,"with OS account(%s).\n", |
| | 1069 | | argv[i]); |
| | 1070 | | fprintf(stderr,"Wrong rshd ?!\n"); |
| | 1071 | | exit(1); |
| | 1072 | | } |
| | 1073 | | break; |
| | 1074 | | #endif |
| | 1075 | | |
| | 1076 | | default: |
| | 1077 | | argv[j++] = argv[i]; |
| | 1078 | | } |
| | 1079 | | |
| | 1080 | | } else { |
| | 1081 | | argv[j++] = argv[i]; |
| | 1082 | | } |
| | 1083 | | } |
| | 1084 | | argc = j; |
| | 1085 | | |
| | 1086 | | if (pvmdebmask) { |
| | 1087 | | pvmlogprintf("version %s\n", PVM_VER);
|
| | 1088 | | pvmlogprintf("ddpro %d tdpro %d\n", DDPROTOCOL, TDPROTOCOL);
|
| | 1089 | | pvmlogprintf("main() debug mask is 0x%x (%s)\n", |
| | 1090 | | pvmdebmask, debug_flags(pvmdebmask)); |
| | 1091 | | } |
| | 1092 | | |
| | 1093 | | if (!*name) { |
| | 1094 | | if (gethostname(buf, sizeof(buf)-1) == -1) { |
| | 1095 | | pvmlogerror("main() can't gethostname()\n"); |
| | 1096 | | pvmbailout(0); |
| | 1097 | | } |
| | 1098 | | name = buf; |
| | 1099 | | } |
| | 1100 | | if (testmode) { |
| | 1101 | | PVM_TIMET time_temp;
|
| | 1102 | | gettimeofday(&tnow, (struct timezone*)0); |
| | 1103 | | pvmlogprintf("version %s ddpro %d tdpro %d sdpro %d\n", |
| | 1104 | | PVM_VER, DDPROTOCOL, TDPROTOCOL, SDPROTOCOL);
|
| | 1105 | | time_temp = (PVM_TIMET) tnow.tv_sec;
|
| | 1106 | | pvmlogprintf(ctime(&time_temp)); |
| | 1107 | | for (i = 0; i < argc; i++) |
| | 1108 | | pvmlogprintf("argv[%d]=\"%s\"\n", i, argv[i]); |
| | 1109 | | exit(0); |
| | 1110 | | } |
| | 1111 | | |
| | 1112 | | { |
| | 1113 | | char *p; |
| | 1114 | | if (p = getenv("PVM_MAX_TASKS")) { |
| | 1115 | | pvm_max_ntasks = atoi(p); |
| | 1116 | | if (pvm_max_ntasks < 0) |
| | 1117 | | pvm_max_ntasks = 0; |
| | 1118 | | } |
| | 1119 | | } |
| | 1120 | | |
| | 1121 | | if (slavemode) |
| | 1122 | | slave_config(name, argc, argv); |
| | 1123 | | |
| | 1124 | | else |
| | 1125 | | master_config(name, argc, argv); |
| | 1126 | | |
| | 1127 | | #if TTYDIS & 8
|
| | 1128 | | setsid(); |
| | 1129 | | #endif |
| | 1130 | | #if TTYDIS & 4
|
| | 1131 | | setpgid(0, 0); |
| | 1132 | | #endif |
| | 1133 | | #if TTYDIS & 2
|
| | 1134 | | setpgrp(0, 0); |
| | 1135 | | #endif |
| | 1136 | | #if TTYDIS & 1
|
| | 1137 | | if ((i = open("/dev/tty", O_RDWR, 0)) != -1) { |
| | 1138 | | (void)ioctl(i, TIOCNOTTY, 0); |
| | 1139 | | (void)close(i); |
| | 1140 | | } |
| | 1141 | | #endif |
| | 1142 | | |
| | 1143 | | myhostpart = hosts->ht_local << (ffs(tidhmask) - 1); |
| | 1144 | | pvmmytid = myhostpart | TIDPVMD;
|
| | 1145 | | |
| | 1146 | | ndead = 1000; |
| | 1147 | | |
| | 1148 | | |
| | 1149 | | |
| true | 1150 | | deads = TALLOC(ndead, struct deaddata, "dead");
|
| deads <= 4095 | 1151 | | BZERO((char*)deads, ndead * sizeof(struct deaddata));
|