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; }