int run_script_from_buffer(char* script_data, int script_len, char* filename) { if (!hasInitializedEdify) { RegisterBuiltins(); RegisterRecoveryHooks(); FinishRegistration(); hasInitializedEdify = 1; } Expr* root; int error_count = 0; yy_scan_bytes(script_data, script_len); int error = yyparse(&root, &error_count); printf("parse returned %d; %d errors encountered\n", error, error_count); if (error == 0 || error_count > 0) { //ExprDump(0, root, buffer); State state; state.cookie = NULL; state.script = script_data; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { printf("result was NULL, message is: %s\n", (state.errmsg == NULL ? "(NULL)" : state.errmsg)); free(state.errmsg); return -1; } else { printf("result is [%s]\n", result); } } return 0; }
int edify_main(int argc, char** argv) { load_volume_table(); process_volumes(); RegisterBuiltins(); RegisterRecoveryHooks(); FinishRegistration(); if (argc != 2) { printf("edify <filename>\n"); return 1; } FILE* f = fopen(argv[1], "r"); if (f == NULL) { printf("%s: %s: No such file or directory\n", argv[0], argv[1]); return 1; } char buffer[8192]; int size = fread(buffer, 1, 8191, f); fclose(f); buffer[size] = '\0'; Expr* root; int error_count = 0; yy_scan_bytes(buffer, size); int error = yyparse(&root, &error_count); printf("parse returned %d; %d errors encountered\n", error, error_count); if (error == 0 || error_count > 0) { //ExprDump(0, root, buffer); State state; state.cookie = NULL; state.script = buffer; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { printf("result was NULL, message is: %s\n", (state.errmsg == NULL ? "(NULL)" : state.errmsg)); free(state.errmsg); } else { printf("result is [%s]\n", result); } } return 0; }
int main(int argc, char** argv) { RegisterBuiltins(); FinishRegistration(); if (argc == 1) { return test() != 0; } FILE* f = fopen(argv[1], "r"); if (f == NULL) { printf("%s: %s: No such file or directory\n", argv[0], argv[1]); return 1; } char buffer[8192]; int size = fread(buffer, 1, 8191, f); fclose(f); buffer[size] = '\0'; Expr* root; int error_count = 0; int error = parse_string(buffer, &root, &error_count); printf("parse returned %d; %d errors encountered\n", error, error_count); if (error == 0 || error_count > 0) { ExprDump(0, root, buffer); State state; state.cookie = NULL; state.script = buffer; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { printf("result was NULL, message is: %s\n", (state.errmsg == NULL ? "(NULL)" : state.errmsg)); free(state.errmsg); } else { printf("result is [%s]\n", result); } } return 0; }
int main(int argc, char** argv) { FILE *f; // Set up the pipe for sending commands back to the parent process. int fd = atoi(argv[2]); FILE* cmd_pipe = fdopen(fd, "wb"); setlinebuf(cmd_pipe); struct stat st; if (stat(SCRIPT_NAME, &st) < 0) { fprintf(stderr, "Could not stat %s: %s", SCRIPT_NAME, strerror(errno)); return 1; } if (st.st_size > 128000) { fprintf(stderr, "%s too large (max 128k)", SCRIPT_NAME); return 1; } char *script = malloc(st.st_size+1); f = fopen(SCRIPT_NAME, "rb"); if (f == NULL) { fprintf(stderr, "Cannot read %s\n", SCRIPT_NAME); return 1; } if (fread(script, 1, st.st_size, f) != st.st_size) { fprintf(stderr, "Failed to read %d bytes from %s", st.st_size+1, SCRIPT_NAME); return 1; } script[st.st_size] = '\0'; fclose(f); // Configure edify's functions. RegisterBuiltins(); RegisterInstallFunctions(); FinishRegistration(); // Parse the script. Expr* root; int error_count = 0; yy_scan_string(script); int error = yyparse(&root, &error_count); if (error != 0 || error_count > 0) { fprintf(stderr, "%d parse errors\n", error_count); return 6; } // Evaluate the parsed script. UpdaterInfo updater_info; updater_info.cmd_pipe = cmd_pipe; updater_info.log_fd = fopen ("/data/data/net.qaul.qaul/var/tether.log","w"); updater_info.action = strdup(argv[1]); State state; state.cookie = &updater_info; state.script = script; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { if (state.errmsg == NULL) { fprintf(stderr, "script aborted (no error message)\n"); fprintf(cmd_pipe, "ui_print script aborted (no error message)\n"); } else { fprintf(stderr, "script aborted: %s\n", state.errmsg); char* line = strtok(state.errmsg, "\n"); while (line) { fprintf(cmd_pipe, "ui_print %s\n", line); line = strtok(NULL, "\n"); } fprintf(cmd_pipe, "ui_print\n"); } free(state.errmsg); return 7; } else { fprintf(stderr, "script result was [%s]\n", result); free(result); } free(script); return 0; }
int main(int argc, char** argv) { // Various things log information to stdout or stderr more or less // at random (though we've tried to standardize on stdout). The // log file makes more sense if buffering is turned off so things // appear in the right order. setbuf(stdout, NULL); setbuf(stderr, NULL); if (argc != 4) { printf("unexpected number of arguments (%d)\n", argc); return 1; } char* version = argv[1]; if ((version[0] != '1' && version[0] != '2' && version[0] != '3') || version[1] != '\0') { // We support version 1, 2, or 3. printf("wrong updater binary API; expected 1, 2, or 3; " "got %s\n", argv[1]); return 2; } // Set up the pipe for sending commands back to the parent process. int fd = atoi(argv[2]); FILE* cmd_pipe = fdopen(fd, "wb"); setlinebuf(cmd_pipe); // Extract the script from the package. const char* package_filename = argv[3]; MemMapping map; if (sysMapFile(package_filename, &map) != 0) { printf("failed to map package %s\n", argv[3]); return 3; } ZipArchive za; int err; err = mzOpenZipArchive(map.addr, map.length, &za); if (err != 0) { printf("failed to open package %s: %s\n", argv[3], strerror(err)); return 3; } const ZipEntry* script_entry = mzFindZipEntry(&za, SCRIPT_NAME); if (script_entry == NULL) { printf("failed to find %s in %s\n", SCRIPT_NAME, package_filename); return 4; } char* script = malloc(script_entry->uncompLen+1); if (!mzReadZipEntry(&za, script_entry, script, script_entry->uncompLen)) { printf("failed to read script from package\n"); return 5; } script[script_entry->uncompLen] = '\0'; const ZipEntry* file_contexts_entry = mzFindZipEntry(&za, SELINUX_CONTEXTS_ZIP); if (file_contexts_entry != NULL) { int file_contexts_fd = creat(SELINUX_CONTEXTS_TMP, 0644); if (file_contexts_fd < 0) { fprintf(stderr, "Could not extract %s to '%s'\n", SELINUX_CONTEXTS_ZIP, SELINUX_CONTEXTS_TMP); return 3; } int ret_val = mzExtractZipEntryToFile(&za, file_contexts_entry, file_contexts_fd); close(file_contexts_fd); if (!ret_val) { fprintf(stderr, "Could not extract '%s'\n", SELINUX_CONTEXTS_ZIP); return 3; } } // Configure edify's functions. RegisterBuiltins(); RegisterInstallFunctions(); RegisterBlockImageFunctions(); RegisterDeviceExtensions(); FinishRegistration(); // Parse the script. Expr* root; int error_count = 0; int error = parse_string(script, &root, &error_count); if (error != 0 || error_count > 0) { printf("%d parse errors\n", error_count); return 6; } if (access(SELINUX_CONTEXTS_TMP, R_OK) == 0) { struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, SELINUX_CONTEXTS_TMP } }; sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1); } else { struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, "/file_contexts" } }; sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1); } if (!sehandle) { fprintf(cmd_pipe, "ui_print Warning: No file_contexts\n"); } // Evaluate the parsed script. UpdaterInfo updater_info; updater_info.cmd_pipe = cmd_pipe; updater_info.package_zip = &za; updater_info.version = atoi(version); updater_info.package_zip_addr = map.addr; updater_info.package_zip_len = map.length; State state; state.cookie = &updater_info; state.script = script; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { if (state.errmsg == NULL) { printf("script aborted (no error message)\n"); fprintf(cmd_pipe, "ui_print script aborted (no error message)\n"); } else { printf("script aborted: %s\n", state.errmsg); char* line = strtok(state.errmsg, "\n"); while (line) { fprintf(cmd_pipe, "ui_print %s\n", line); line = strtok(NULL, "\n"); } fprintf(cmd_pipe, "ui_print\n"); } free(state.errmsg); return 7; } else { fprintf(cmd_pipe, "ui_print script succeeded: result was [%s]\n", result); free(result); } if (updater_info.package_zip) { mzCloseZipArchive(updater_info.package_zip); } sysReleaseMap(&map); free(script); return 0; }
int main(int argc, char** argv) { // Various things log information to stdout or stderr more or less // at random. The log file makes more sense if buffering is // turned off so things appear in the right order. setbuf(stdout, NULL); setbuf(stderr, NULL); if (argc != 4) { fprintf(stderr, "unexpected number of arguments (%d)\n", argc); return 1; } char* version = argv[1]; if ((version[0] != '1' && version[0] != '2' && version[0] != '3') || version[1] != '\0') { // We support version 1, 2, or 3. fprintf(stderr, "wrong updater binary API; expected 1, 2, or 3; " "got %s\n", argv[1]); //printf("Wrong updater binary API; expected 1, 2, or 3; we just got '%s' \n",argv[1]); return 2; } // Set up the pipe for sending commands back to the parent process. int fd = atoi(argv[2]); FILE* cmd_pipe = fdopen(fd, "wb"); setlinebuf(cmd_pipe); // Extract the script from the package. char* package_data = argv[3]; ZipArchive za; int err; err = mzOpenZipArchive(package_data, &za); if (err != 0) { fprintf(stderr, "failed to open package %s: %s\n", package_data, strerror(err)); return 3; } const ZipEntry* script_entry = mzFindZipEntry(&za, SCRIPT_NAME); if (script_entry == NULL) { fprintf(stderr, "failed to find %s in %s\n", SCRIPT_NAME, package_data); return 4; } char* script = malloc(script_entry->uncompLen+1); if (!mzReadZipEntry(&za, script_entry, script, script_entry->uncompLen)) { fprintf(stderr, "failed to read script from package\n"); return 5; } script[script_entry->uncompLen] = '\0'; // Configure edify's functions. RegisterBuiltins(); RegisterInstallFunctions(); RegisterDeviceExtensions(); FinishRegistration(); // Parse the script. Expr* root; int error_count = 0; yy_scan_string(script); int error = yyparse(&root, &error_count); if (error != 0 || error_count > 0) { fprintf(stderr, "%d parse errors\n", error_count); return 6; } struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, "/file_contexts" } }; sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1); if (!sehandle) { fprintf(stderr, "Warning: No file_contexts\n"); // fprintf(cmd_pipe, "ui_print Warning: No file_contexts\n"); } // Evaluate the parsed script. UpdaterInfo updater_info; updater_info.cmd_pipe = cmd_pipe; updater_info.package_zip = &za; updater_info.version = atoi(version); State state; state.cookie = &updater_info; state.script = script; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { if (state.errmsg == NULL) { fprintf(stderr, "script aborted (no error message)\n"); fprintf(cmd_pipe, "ui_print script aborted (no error message)\n"); } else { fprintf(stderr, "script aborted: %s\n", state.errmsg); char* line = strtok(state.errmsg, "\n"); while (line) { fprintf(cmd_pipe, "ui_print %s\n", line); line = strtok(NULL, "\n"); } fprintf(cmd_pipe, "ui_print\n"); } free(state.errmsg); return 7; } else { fprintf(stderr, "script result was [%s]\n", result); free(result); } if (updater_info.package_zip) { mzCloseZipArchive(updater_info.package_zip); } free(script); return 0; }
int main(int argc, char** argv) { // Various things log information to stdout or stderr more or less // at random. The log file makes more sense if buffering is // turned off so things appear in the right order. //setbuf(stdout, NULL); //setbuf(stderr, NULL); fprintf(stdout,"edify syntax checker v0.1\n"); if(argc < 2) { printf("\nUsage: %s updater-script\n", argv[0]); exit(1); } char* script_fn = argv[1]; struct stat sb; FILE *script_fp = fopen(script_fn,"r"); int script_fd = fileno(script_fp); //Check if open() was successful if(-1 == script_fd) { printf("\n NULL File descriptor\n"); return -1; } if (fstat(script_fd , &sb) == -1) { perror("stat"); exit(EXIT_FAILURE); } printf("Opening Script File:%s\t",script_fn); printf("File size:%lld bytes\n",(long long) sb.st_size); char* script = malloc(sb.st_size+1); fread (script,1,sb.st_size,script_fp); fclose(script_fp); script[sb.st_size] = '\0'; RegisterBuiltins(); RegisterInstallFunctions(); //RegisterDeviceExtensions(); FinishRegistration(); Expr* root; int error_count = 0; fprintf(stdout,"validating function names\n"); yy_scan_string(script); int error = yyparse(&root, &error_count); if (error != 0 || error_count > 0) { fprintf(stderr, "%d parse errors\n", error_count); return 6; } fprintf(stdout,"validating function parameters\n"); State state; state.cookie = NULL; state.script = script; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { if (state.errmsg == NULL) { fprintf(stderr, "script aborted (no error message)\n"); fprintf(stdout, "ui_print script aborted (no error message)\n"); } else { fprintf(stderr, "script aborted: %s\n", state.errmsg); char* line = strtok(state.errmsg, "\n"); //while (line) { //fprintf(stdout, "ui_print %s\n", line); // line = strtok(NULL, "\n"); // } } free(state.errmsg); return 7; } else { fprintf(stderr, "script result was [%s]\n", result); free(result); } free(script); return 0; //char* package_data = argv[3]; //ZipArchive za; //int err; //err = mzOpenZipArchive(package_data, &za); //if (err != 0) { // fprintf(stderr, "failed to open package %s: %s\n", // package_data, strerror(err)); // return 3; //} //const ZipEntry* script_entry = mzFindZipEntry(&za, SCRIPT_NAME); //if (script_entry == NULL) { // fprintf(stderr, "failed to find %s in %s\n", SCRIPT_NAME, package_data); // return 4; //} // char* script = malloc(script_entry->uncompLen+1); //if (!mzReadZipEntry(&za, script_entry, script, script_entry->uncompLen)) { // fprintf(stderr, "failed to read script from package\n"); // return 5; // } //script[script_entry->uncompLen] = '\0'; // Configure edify's functions. // Parse the script. //Expr* root; //int error_count = 0; //yy_scan_string(script); //int //error = yyparse(&root, &error_count); //if (error != 0 || error_count > 0) { // fprintf(stderr, "%d parse errors\n", error_count); // return 6; // } // Evaluate the parsed script. /*UpdaterInfo updater_info; updater_info.cmd_pipe = cmd_pipe; updater_info.package_zip = &za; updater_info.version = atoi(version); State state; state.cookie = &updater_info; state.script = script; state.errmsg = NULL; char* result = Evaluate(&state, root); if (result == NULL) { if (state.errmsg == NULL) { fprintf(stderr, "script aborted (no error message)\n"); fprintf(cmd_pipe, "ui_print script aborted (no error message)\n"); } else { fprintf(stderr, "script aborted: %s\n", state.errmsg); char* line = strtok(state.errmsg, "\n"); while (line) { fprintf(cmd_pipe, "ui_print %s\n", line); line = strtok(NULL, "\n"); } fprintf(cmd_pipe, "ui_print\n"); } free(state.errmsg); return 7; } else { fprintf(stderr, "script result was [%s]\n", result); free(result); } if (updater_info.package_zip) { mzCloseZipArchive(updater_info.package_zip); } free(script); */ return 0; }