static DWORD ReadNsswitchFile(NsswitchConf *conf, const char *rootPrefix, const char *filename) { DWORD ceError = ERROR_SUCCESS; FILE *file = NULL; PSTR buffer = NULL; char *fullPath = NULL; BOOLEAN endOfFile = FALSE; BOOLEAN exists; if(rootPrefix == NULL) rootPrefix = ""; GCE(ceError = CTAllocateStringPrintf( &fullPath, "%s%s", rootPrefix, filename)); DJ_LOG_INFO("Reading nsswitch file %s", fullPath); GCE(ceError = CTCheckFileOrLinkExists(fullPath, &exists)); if(!exists) { DJ_LOG_INFO("File %s does not exist", fullPath); ceError = ERROR_FILE_NOT_FOUND; goto cleanup; } GCE(ceError = CTStrdup(filename, &conf->filename)); GCE(ceError = CTOpenFile(fullPath, "r", &file)); CT_SAFE_FREE_STRING(fullPath); while(TRUE) { CT_SAFE_FREE_STRING(buffer); GCE(ceError = CTReadNextLine(file, &buffer, &endOfFile)); if(endOfFile) break; GCE(ceError = AddFormattedLine(conf, filename, buffer, NULL)); } conf->modified = FALSE; cleanup: CT_SAFE_FREE_STRING(buffer); if(file != NULL) CTCloseFile(file); CT_SAFE_FREE_STRING(fullPath); if(ceError) FreeNsswitchConfContents(conf); return ceError; }
static DWORD ReadSshFile(struct SshConf *conf, const char *rootPrefix, const char *filename) { DWORD ceError = ERROR_SUCCESS; FILE *file = NULL; PSTR buffer = NULL; char *fullPath = NULL; BOOLEAN endOfFile = FALSE; BOOLEAN exists; BAIL_ON_CENTERIS_ERROR(ceError = CTAllocateStringPrintf( &fullPath, "%s%s", rootPrefix, filename)); DJ_LOG_INFO("Reading ssh file %s", fullPath); BAIL_ON_CENTERIS_ERROR(ceError = CTCheckFileOrLinkExists(fullPath, &exists)); if(!exists) { DJ_LOG_INFO("File %s does not exist", fullPath); ceError = ERROR_FILE_NOT_FOUND; goto error; } BAIL_ON_CENTERIS_ERROR(ceError = CTStrdup(filename, &conf->filename)); BAIL_ON_CENTERIS_ERROR(ceError = CTOpenFile(fullPath, "r", &file)); CT_SAFE_FREE_STRING(fullPath); while(TRUE) { CT_SAFE_FREE_STRING(buffer); BAIL_ON_CENTERIS_ERROR(ceError = CTReadNextLine(file, &buffer, &endOfFile)); if(endOfFile) break; BAIL_ON_CENTERIS_ERROR(ceError = AddFormattedLine(conf, filename, buffer, NULL)); } CT_SAFE_FREE_STRING(buffer); BAIL_ON_CENTERIS_ERROR(ceError = CTCloseFile(file)); file = NULL; return ceError; error: if(file != NULL) CTCloseFile(file); CT_SAFE_FREE_STRING(fullPath); FreeSshConfContents(conf); CT_SAFE_FREE_STRING(buffer); return ceError; }
DWORD CTGetLikewiseVersion( PSTR *product, PSTR *version, PSTR *build, PSTR *revision ) { FILE *versionFile = NULL; PSTR line = NULL; BOOLEAN isEndOfFile = FALSE; DWORD ceError = ERROR_SUCCESS; BOOLEAN bIsEnterprise = FALSE; PSTR _product = NULL; PSTR _version = NULL; PSTR _build = NULL; PSTR _revision = NULL; *version = NULL; *build = NULL; *revision = NULL; #ifdef MINIMAL_JOIN GCE(ceError = CTOpenFile(LOCALSTATEDIR "/VERSION", "r", &versionFile)); #else ceError = CTOpenFile(PREFIXDIR "/data/ENTERPRISE_VERSION", "r", &versionFile); if (ceError == 0) { bIsEnterprise = TRUE; } else { GCE(ceError = CTOpenFile(PREFIXDIR "/data/VERSION", "r", &versionFile)); } #endif while (TRUE) { CT_SAFE_FREE_STRING(line); GCE(ceError = CTReadNextLine(versionFile, &line, &isEndOfFile)); if (isEndOfFile) break; CTStripWhitespace(line); if (!strncmp(line, "VERSION=", sizeof("VERSION=") - 1)) { GCE(ceError = CTStrdup(line + sizeof("VERSION=") - 1, &_version)); } else if (!strncmp(line, "BUILD=", sizeof("BUILD=") - 1)) { GCE(ceError = CTStrdup(line + sizeof("BUILD=") - 1, &_build)); } else if (!strncmp(line, "REVISION=", sizeof("REVISION=") - 1)) { GCE(ceError = CTStrdup(line + sizeof("REVISION=") - 1, &_revision)); } } if (bIsEnterprise) { GCE(ceError = CTStrdup("Enterprise", &_product)); } else { GCE(ceError = CTStrdup("Open", &_product)); } if (_version == NULL) { GCE(ceError = CTStrdup("unknown", &_version)); } if (_build == NULL) { GCE(ceError = CTStrdup("unknown", &_build)); } if (_revision == NULL) { GCE(ceError = CTStrdup("unknown", &_revision)); } GCE(ceError = CTSafeCloseFile(&versionFile)); *product = _product; *version = _version; *build = _build; *revision = _revision; _product = NULL; _version = NULL; _build = NULL; _revision = NULL; cleanup: CTSafeCloseFile(&versionFile); CT_SAFE_FREE_STRING(line); CT_SAFE_FREE_STRING(_version); CT_SAFE_FREE_STRING(_build); CT_SAFE_FREE_STRING(_revision); return ceError; }