virtual int challengeLocal( const char* username, char challengeFilePath[EXECUTOR_BUFFER_SIZE]) { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_CHALLENGE_LOCAL_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Send request body. ExecutorChallengeLocalRequest request; memset(&request, 0, sizeof(request)); Strlcpy(request.user, username, EXECUTOR_BUFFER_SIZE); if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return -1; // Receive the response ExecutorChallengeLocalResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; Strlcpy(challengeFilePath, response.challenge, EXECUTOR_BUFFER_SIZE); return response.status; }
virtual int authenticatePassword( const char* username, const char* password) { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_AUTHENTICATE_PASSWORD_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Send request body. ExecutorAuthenticatePasswordRequest request; memset(&request, 0, sizeof(request)); Strlcpy(request.username, username, EXECUTOR_BUFFER_SIZE); Strlcpy(request.password, password, EXECUTOR_BUFFER_SIZE); if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return -1; // Receive the response ExecutorAuthenticatePasswordResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; return response.status; }
virtual int validateUser( const char* username) { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_VALIDATE_USER_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Send request body. ExecutorValidateUserRequest request; memset(&request, 0, sizeof(request)); Strlcpy(request.username, username, EXECUTOR_BUFFER_SIZE); if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return -1; // Receive the response ExecutorValidateUserResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; return response.status; }
virtual int removeFile( const char* path) { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_REMOVE_FILE_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Send request body. ExecutorRemoveFileRequest request; memset(&request, 0, sizeof(request)); Strlcpy(request.path, path, EXECUTOR_BUFFER_SIZE); if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return -1; // Receive the response ExecutorRemoveFileResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; return response.status; }
virtual int updateLogLevel( const char* logLevel) { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_UPDATE_LOG_LEVEL_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Send request body: ExecutorUpdateLogLevelRequest request; memset(&request, 0, sizeof(request)); Strlcpy(request.logLevel, logLevel, EXECUTOR_BUFFER_SIZE); if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return -1; // Receive the response ExecutorUpdateLogLevelResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; return response.status; }
virtual FILE* openFile( const char* path, int mode) { AutoMutex autoMutex(_mutex); if (mode != 'r' && mode != 'w' && mode != 'a') return NULL; // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_OPEN_FILE_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return NULL; // Send request body. ExecutorOpenFileRequest request; memset(&request, 0, sizeof(request)); Strlcpy(request.path, path, EXECUTOR_BUFFER_SIZE); request.mode = mode; if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return NULL; // Receive the response ExecutorOpenFileResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return NULL; // Receive descriptor (if response successful). if (response.status == 0) { int fds[1]; if (RecvDescriptorArray(_sock, fds, 1) != 0) return NULL; if (fds[0] == -1) return NULL; else { if (mode == 'r') return fdopen(fds[0], "rb"); else return fdopen(fds[0], "wb"); } } return NULL; }
void Decode(config * conf){ #ifdef ENABLE_PARSEC_HOOKS __parsec_roi_begin(); #endif RecvBlock(conf); Decompress(NULL); CheckCache(NULL); if (strcmp(conf->outfile, "") == 0) Reassemble(NULL); else Reassemble(conf->outfile); #ifdef ENABLE_PARSEC_HOOKS __parsec_roi_end(); #endif }
virtual int daemonizeExecutor() { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_DAEMONIZE_EXECUTOR_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Receive the response ExecutorDaemonizeExecutorResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; return response.status; }
virtual int ping() { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_PING_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; ExecutorPingResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; if (response.magic == EXECUTOR_PING_MAGIC) return 0; return -1; }
virtual int authenticateLocal( const char* challengeFilePath, const char* response) { AutoMutex autoMutex(_mutex); // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_AUTHENTICATE_LOCAL_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Send request body. ExecutorAuthenticateLocalRequest request; memset(&request, 0, sizeof(request)); Strlcpy(request.challenge, challengeFilePath, EXECUTOR_BUFFER_SIZE); Strlcpy(request.response, response, EXECUTOR_BUFFER_SIZE); if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return -1; // Receive the response ExecutorAuthenticateLocalResponse response_; if (RecvBlock(_sock, &response_, sizeof(response_)) != sizeof(response_)) { return -1; } return response_.status; }
virtual int startProviderAgent( const char* module, const String& pegasusHome, const String& userName, int& pid, AnonymousPipe*& readPipe, AnonymousPipe*& writePipe) { AutoMutex autoMutex(_mutex); readPipe = 0; writePipe = 0; // Reject strings longer than EXECUTOR_BUFFER_SIZE. size_t moduleNameLength = strlen(module); if (moduleNameLength >= EXECUTOR_BUFFER_SIZE) return -1; CString userNameCString = userName.getCString(); size_t userNameLength = strlen(userNameCString); if (userNameLength >= EXECUTOR_BUFFER_SIZE) return -1; // Send request header: ExecutorRequestHeader header; header.code = EXECUTOR_START_PROVIDER_AGENT_MESSAGE; if (SendBlock(_sock, &header, sizeof(header)) != sizeof(header)) return -1; // Send request body. ExecutorStartProviderAgentRequest request; memset(&request, 0, sizeof(request)); memcpy(request.module, module, moduleNameLength); memcpy(request.userName, userNameCString, userNameLength); if (SendBlock(_sock, &request, sizeof(request)) != sizeof(request)) return -1; // Receive the response ExecutorStartProviderAgentResponse response; if (RecvBlock(_sock, &response, sizeof(response)) != sizeof(response)) return -1; // Check response status and pid. if (response.status != 0) return -1; // Get pid: pid = response.pid; // Receive descriptors. int descriptors[2]; int result = RecvDescriptorArray(_sock, descriptors, 2); if (result == 0) { int readFd = descriptors[0]; int writeFd = descriptors[1]; // Create to and from AnonymousPipe instances to correspond to // the pipe descriptors created above. char readFdStr[32]; char writeFdStr[32]; sprintf(readFdStr, "%d", readFd); sprintf(writeFdStr, "%d", writeFd); readPipe = new AnonymousPipe(readFdStr, 0); writePipe = new AnonymousPipe(0, writeFdStr); } return result; }