Skip to content
Snippets Groups Projects
Commit cbb0bd93 authored by an7s's avatar an7s
Browse files

c beautified

Former-commit-id: 896e7b4b6d739f9077e7d590f5962a8d5f35dae7
parent 29c6cd87
Branches
Tags
No related merge requests found
...@@ -14,163 +14,163 @@ static int appfw_initialized = 0; ...@@ -14,163 +14,163 @@ static int appfw_initialized = 0;
static void reset_sig_file_env_var() static void reset_sig_file_env_var()
{ {
extern char **environ; extern char **environ;
int i; int i;
for(i=0;(environ[i]!=0);i++) for(i=0;(environ[i]!=0);i++)
{
if(getenv("APPFW_ENV_VERBOSE"))
fprintf(stderr,"environ[i]=%s\n",environ[i]);
/* check that the environ has the key followed by an equal */
if(strncmp(sigFileEnv,environ[i],strlen(sigFileEnv))==0 &&
environ[i][strlen(sigFileEnv)]=='=')
{ {
environ[i][0]='B'; if(getenv("APPFW_ENV_VERBOSE"))
} fprintf(stderr,"environ[i]=%s\n",environ[i]);
/* check that the environ has the key followed by an equal */
if(strncmp(sigFileEnv,environ[i],strlen(sigFileEnv))==0 &&
environ[i][strlen(sigFileEnv)]=='=')
{
environ[i][0]='B';
}
} }
} }
// read in signature file // read in signature file
// environment variable specifies signature file location // environment variable specifies signature file location
void appfw_init() void appfw_init()
{ {
int verbose=0; int verbose=0;
if(getenv("APPFW_VERBOSE")) if(getenv("APPFW_VERBOSE"))
verbose=1; verbose=1;
int numSigs = 0; int numSigs = 0;
if (appfw_isInitialized()) return; if (appfw_isInitialized()) return;
char *signatureFile = getenv(sigFileEnv); char *signatureFile = getenv(sigFileEnv);
if (!signatureFile) if (!signatureFile)
{ {
if(verbose) if(verbose)
appfw_error("no signature file found"); appfw_error("no signature file found");
} }
reset_sig_file_env_var(); reset_sig_file_env_var();
FILE *sigF = fopen(signatureFile, "r"); FILE *sigF = fopen(signatureFile, "r");
if (sigF) if (sigF)
{ {
char buf[MAX_SIGNATURE_SIZE]; char buf[MAX_SIGNATURE_SIZE];
fw_sigs = malloc(sizeof(char*) * MAX_NUM_SIGNATURES); fw_sigs = malloc(sizeof(char*) * MAX_NUM_SIGNATURES);
while (fgets(buf, MAX_SIGNATURE_SIZE, sigF) != NULL) while (fgets(buf, MAX_SIGNATURE_SIZE, sigF) != NULL)
{ {
fw_sigs[numSigs] = (char *) malloc(strlen(buf) + 128); fw_sigs[numSigs] = (char *) malloc(strlen(buf) + 128);
strncpy(fw_sigs[numSigs], buf, strlen(buf)); strncpy(fw_sigs[numSigs], buf, strlen(buf));
fw_sigs[numSigs][strlen(buf)-1] = '\0'; fw_sigs[numSigs][strlen(buf)-1] = '\0';
if(verbose && getenv("VERY_VERBOSE")) if(verbose && getenv("VERY_VERBOSE"))
fprintf(stderr,"Read sig: %s\n", fw_sigs[numSigs]); fprintf(stderr,"Read sig: %s\n", fw_sigs[numSigs]);
numSigs++; numSigs++;
} }
fw_numPatterns = numSigs; fw_numPatterns = numSigs;
fclose(sigF); fclose(sigF);
appfw_initialized = 1; appfw_initialized = 1;
if(getenv("APPFW_VERBOSE")) if(getenv("APPFW_VERBOSE"))
fprintf(stderr, "appfw init finished\n"); fprintf(stderr, "appfw init finished\n");
} }
else else
{ {
if(getenv("APPFW_VERBOSE")) if(getenv("APPFW_VERBOSE"))
appfw_error("could not open signature file"); appfw_error("could not open signature file");
appfw_initialized = 0; appfw_initialized = 0;
} }
fflush(stderr); fflush(stderr);
} }
int appfw_isInitialized() int appfw_isInitialized()
{ {
return appfw_initialized; return appfw_initialized;
} }
// returns # of signature patterns // returns # of signature patterns
int appfw_getNumSignatures() int appfw_getNumSignatures()
{ {
return fw_numPatterns; return fw_numPatterns;
} }
// returns signature patterns // returns signature patterns
char **appfw_getSignatures() char **appfw_getSignatures()
{ {
return fw_sigs; return fw_sigs;
} }
// generic error message // generic error message
void appfw_error(const char *msg) void appfw_error(const char *msg)
{ {
fprintf(stderr,"[appfw]: %s\n", msg); fprintf(stderr,"[appfw]: %s\n", msg);
} }
// mark parts of string as tainted // mark parts of string as tainted
void appfw_taint_range(char *taint, char taintValue, int from, int len) void appfw_taint_range(char *taint, char taintValue, int from, int len)
{ {
memset(&taint[from], taintValue, len); memset(&taint[from], taintValue, len);
} }
// buffers must be big enough // buffers must be big enough
void appfw_establish_taint(const char *command, char *taint) void appfw_establish_taint(const char *command, char *taint)
{ {
int i, j, pos; int i, j, pos;
int patternFound; int patternFound;
char **fw_sigs = appfw_getSignatures(); char **fw_sigs = appfw_getSignatures();
int commandLength = strlen(command); int commandLength = strlen(command);
taint[commandLength] = '\0'; taint[commandLength] = '\0';
int verbose=(int)getenv("APPFW_VERBOSE"); int verbose=(int)getenv("APPFW_VERBOSE");
verbose+=(int)getenv("VERY_VERBOSE"); verbose+=(int)getenv("VERY_VERBOSE");
if (!fw_sigs) if (!fw_sigs)
{ {
appfw_taint_range(taint, APPFW_BLESSED, 0, commandLength); appfw_taint_range(taint, APPFW_BLESSED, 0, commandLength);
return; return;
} }
// set taint markings to 'tainted' by default // set taint markings to 'tainted' by default
appfw_taint_range(taint, APPFW_TAINTED, 0, commandLength); appfw_taint_range(taint, APPFW_TAINTED, 0, commandLength);
// use simple linear scan for now // use simple linear scan for now
// list of signature patterns are sorted in reverse length order already // list of signature patterns are sorted in reverse length order already
// unset taint when match is found // unset taint when match is found
pos = 0; pos = 0;
int numSignatures =appfw_getNumSignatures(); int numSignatures =appfw_getNumSignatures();
while (pos < commandLength) while (pos < commandLength)
{
for (i = 0; i < numSignatures; ++i)
{ {
int length_signature = strlen(fw_sigs[i]); for (i = 0; i < numSignatures; ++i)
if (strncasecmp(&command[pos], fw_sigs[i], length_signature) == 0) {
{ int length_signature = strlen(fw_sigs[i]);
if(verbose) fprintf(stderr,"At %d Matched sig: %s\n", pos, fw_sigs[i]); if (strncasecmp(&command[pos], fw_sigs[i], length_signature) == 0)
appfw_taint_range(taint, APPFW_BLESSED, pos, length_signature); {
} if(verbose) fprintf(stderr,"At %d Matched sig: %s\n", pos, fw_sigs[i]);
appfw_taint_range(taint, APPFW_BLESSED, pos, length_signature);
}
}
pos++;
} }
pos++;
}
} }
// enum { APPFW_BLESSED, APPFW_TAINTED, APPFW_SECURITY_VIOLATION, APPFW_BLESSED_KEYWORD }; // enum { APPFW_BLESSED, APPFW_TAINTED, APPFW_SECURITY_VIOLATION, APPFW_BLESSED_KEYWORD };
void appfw_display_taint(const char *p_msg, const char *p_query, const char *p_taint) void appfw_display_taint(const char *p_msg, const char *p_query, const char *p_taint)
{ {
int i; int i;
fprintf(stderr,"%s: %s\n", p_msg, p_query); fprintf(stderr,"%s: %s\n", p_msg, p_query);
fprintf(stderr,"%s: ", p_msg); fprintf(stderr,"%s: ", p_msg);
for (i = 0; i < strlen(p_query); ++i) for (i = 0; i < strlen(p_query); ++i)
{ {
if (p_taint[i] == APPFW_BLESSED) if (p_taint[i] == APPFW_BLESSED)
fprintf(stderr,"o"); fprintf(stderr,"o");
else if (p_taint[i] == APPFW_SECURITY_VIOLATION) else if (p_taint[i] == APPFW_SECURITY_VIOLATION)
fprintf(stderr,"v"); fprintf(stderr,"v");
else if (p_taint[i] == APPFW_BLESSED_KEYWORD) else if (p_taint[i] == APPFW_BLESSED_KEYWORD)
fprintf(stderr,"k"); fprintf(stderr,"k");
else // APPFW_TAINTED else // APPFW_TAINTED
fprintf(stderr,"d"); fprintf(stderr,"d");
} }
fprintf(stderr,"\n"); fprintf(stderr,"\n");
fflush(stderr); fflush(stderr);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment