/** * @brief Reads the release_id file from inputs and return a JsonElement. */ static JsonElement *ReadReleaseIdFileFromInputs() { char filename[CF_MAXVARSIZE]; GetReleaseIdFile(GetInputDir(), filename, sizeof(filename)); struct stat sb; if (stat(filename, &sb) == -1) { return NULL; } JsonElement *validated_doc = NULL; JsonParseError err = JsonParseFile(filename, 4096, &validated_doc); if (err != JSON_PARSE_OK) { Log(LOG_LEVEL_WARNING, "Could not read release ID: '%s' did not contain valid JSON data. " "(JsonParseFile: '%s')", filename, JsonParseErrorToString(err)); } return validated_doc; }
/** * @brief Writes the policy validation file and release ID to a directory * @return True if successful. */ bool GenericAgentTagReleaseDirectory(const GenericAgentConfig *config, const char *dirname, bool write_validated, bool write_release) { char local_dirname[PATH_MAX + 1]; if (NULL == dirname) { GetAutotagDir(local_dirname, PATH_MAX, NULL); dirname = local_dirname; } char filename[CF_MAXVARSIZE]; char git_checksum[GENERIC_AGENT_CHECKSUM_SIZE]; bool have_git_checksum = GeneratePolicyReleaseIDFromGit(git_checksum, sizeof(git_checksum), dirname); Log(LOG_LEVEL_DEBUG, "Tagging directory %s for release (write_validated: %s, write_release: %s)", dirname, write_validated ? "yes" : "no", write_release ? "yes" : "no"); if (write_release) { // first, tag the release ID GetReleaseIdFile(dirname, filename, sizeof(filename)); char *id = ReadReleaseIdFromReleaseIdFileMasterfiles(dirname); if (NULL == id || (have_git_checksum && 0 != strcmp(id, git_checksum))) { if (NULL == id) { Log(LOG_LEVEL_DEBUG, "The release_id of %s was missing", dirname); } else { Log(LOG_LEVEL_DEBUG, "The release_id of %s needs to be updated", dirname); } bool wrote_release = WriteReleaseIdFile(filename, dirname); if (!wrote_release) { Log(LOG_LEVEL_VERBOSE, "The release_id file %s was NOT updated", filename); free(id); return false; } else { Log(LOG_LEVEL_DEBUG, "The release_id file %s was updated", filename); } } free(id); } // now, tag the promises_validated if (write_validated) { Log(LOG_LEVEL_DEBUG, "Tagging directory %s for validation", dirname); GetPromisesValidatedFile(filename, sizeof(filename), config, dirname); bool wrote_validated = WritePolicyValidatedFile(config, filename); if (!wrote_validated) { Log(LOG_LEVEL_VERBOSE, "The promises_validated file %s was NOT updated", filename); return false; } Log(LOG_LEVEL_DEBUG, "The promises_validated file %s was updated", filename); return true; } return true; }