import re
def flag_config_anomalies(config_file, anomaly_patterns):
"""
Flags potential anomalies in a configuration file.
Args:
config_file (str): Path to the configuration file.
anomaly_patterns (dict): A dictionary where keys are anomaly names
and values are regular expression patterns.
Returns:
list: A list of flagged anomalies with their line numbers. Empty list if no anomalies found.
"""
flagged_anomalies = []
try:
with open(config_file, 'r') as f:
lines = f.readlines()
except FileNotFoundError:
print(f"Error: File not found: {config_file}")
return []
for i, line in enumerate(lines):
for anomaly_name, pattern in anomaly_patterns.items():
if re.search(pattern, line):
flagged_anomalies.append({"anomaly": anomaly_name, "line": i + 1, "line_content": line.strip()})
return flagged_anomalies
if __name__ == '__main__':
# Example usage:
anomaly_patterns = {
"HardcodedPassword": r"password=.*", # Look for lines containing "password="
"UnusualPort": r"port=(\d{3}(?!\s*:\d+))", #Look for port values that do not have a colon after it
"MissingSecurity": r"security=.*comment" #look for security settings with a comment
}
config_file = "config.txt" # Replace with your config file
# Create a sample config file for testing
with open(config_file, 'w') as f:
f.write("database_url = localhost\n")
f.write("port=8080\n")
f.write("password=secret\n")
f.write("#Security settings\n")
f.write("security=some_value #comment\n")
f.write("another_setting = value\n")
anomalies = flag_config_anomalies(config_file, anomaly_patterns)
if anomalies:
print("Anomalies found:")
for anomaly in anomalies:
print(f" Anomaly: {anomaly['anomaly']}, Line: {anomaly['line']}, Content: {anomaly['line_content']}")
else:
print("No anomalies found.")
Add your comment