summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2009-09-07 21:32:10 +0200
committerDavid Sommerseth <dazo@users.sourceforge.net>2009-09-07 21:32:10 +0200
commit2e1851802188515f8edeed8eb3f753cf69e348d9 (patch)
tree2eaa6d13c1f77f39145cf1b5f92c8ac076eb237b
parent66b29488a7ed5909564ed03b3e89cd0d008df09e (diff)
downloadeurephia-2e1851802188515f8edeed8eb3f753cf69e348d9.tar.gz
eurephia-2e1851802188515f8edeed8eb3f753cf69e348d9.tar.xz
eurephia-2e1851802188515f8edeed8eb3f753cf69e348d9.zip
Added debug logging of free_nullsafe() calls as well
-rw-r--r--common/eurephia_nullsafe.c8
-rw-r--r--common/eurephia_nullsafe.h5
-rw-r--r--common/eurephia_values.c6
-rw-r--r--common/eurephia_xml.c10
-rw-r--r--common/eurephiadb_session_common.c4
-rw-r--r--common/passwd.c4
-rw-r--r--database/eurephiadb_mapping.c6
-rw-r--r--database/sqlite/administration.c4
-rw-r--r--database/sqlite/edb-sqlite.c26
-rw-r--r--database/sqlite/sqlite.c32
-rw-r--r--eurephiadm/client_config.c6
-rw-r--r--eurephiadm/client_context.c6
-rw-r--r--eurephiadm/client_session.c12
-rw-r--r--eurephiadm/commands/adminaccess.c2
-rw-r--r--eurephiadm/commands/attempts.c2
-rw-r--r--eurephiadm/commands/blacklist.c2
-rw-r--r--eurephiadm/commands/certificates.c18
-rw-r--r--eurephiadm/commands/fwprofiles.c2
-rw-r--r--eurephiadm/commands/usercerts.c2
-rw-r--r--eurephiadm/commands/users.c26
-rw-r--r--eurephiadm/eurephiadm.c8
-rw-r--r--plugin/eurephia.c16
-rw-r--r--plugin/eurephiadb_session.c64
-rw-r--r--plugin/firewall/eurephiafw.c10
-rw-r--r--plugin/firewall/iptables/efw-iptables.c2
-rw-r--r--utils/benchmark.c2
-rw-r--r--utils/eurephia_init.c2
27 files changed, 149 insertions, 138 deletions
diff --git a/common/eurephia_nullsafe.c b/common/eurephia_nullsafe.c
index 92747e5..bcca178 100644
--- a/common/eurephia_nullsafe.c
+++ b/common/eurephia_nullsafe.c
@@ -68,3 +68,11 @@ void *__malloc_nullsafe(eurephiaCTX *ctx, size_t sz, const char *file, int line)
}
return buf;
}
+
+void inline __free_nullsafe(eurephiaCTX *ctx, void *ptr, const char *file, int line) {
+ if( ptr == NULL ) {
+ return;
+ }
+ DEBUG(ctx, 40, "Freeing memory on address %p (File %s, line %i)", ptr, file, line);
+ free(ptr);
+}
diff --git a/common/eurephia_nullsafe.h b/common/eurephia_nullsafe.h
index fde8c2f..70c09d3 100644
--- a/common/eurephia_nullsafe.h
+++ b/common/eurephia_nullsafe.h
@@ -83,6 +83,9 @@ void *__malloc_nullsafe(eurephiaCTX *, size_t, const char *, int);
*/
#define malloc_nullsafe(ctx, sz) __malloc_nullsafe(ctx, sz, __FILE__, __LINE__)
+
+void inline __free_nullsafe(eurephiaCTX *ctx, void *ptr, const char *file, int line);
+
/**
* free() wrapper. Frees memory allocated by malloc() or calloc(). It also sets the
* input pointer to NULL on success.
@@ -90,7 +93,7 @@ void *__malloc_nullsafe(eurephiaCTX *, size_t, const char *, int);
* @param ptr Pointer to the memory region being freed.
*
*/
-#define free_nullsafe(ptr) if( ptr != NULL ) { free(ptr); ptr = NULL; }
+#define free_nullsafe(ctx, ptr) { __free_nullsafe(ctx, ptr, __FILE__, __LINE__); ptr = NULL; }
/**
diff --git a/common/eurephia_values.c b/common/eurephia_values.c
index 501b6ba..78f0e6a 100644
--- a/common/eurephia_values.c
+++ b/common/eurephia_values.c
@@ -46,9 +46,9 @@ void do_free_vals(eurephiaVALUES *vls) {
if( vls->next != NULL ) {
do_free_vals(vls->next);
}
- free_nullsafe(vls->key);
- free_nullsafe(vls->val);
- free_nullsafe(vls);
+ free_nullsafe(NULL, vls->key);
+ free_nullsafe(NULL, vls->val);
+ free_nullsafe(NULL, vls);
}
diff --git a/common/eurephia_xml.c b/common/eurephia_xml.c
index 8e34050..e78d2b3 100644
--- a/common/eurephia_xml.c
+++ b/common/eurephia_xml.c
@@ -60,11 +60,11 @@ char *xmlGetAttrValue(xmlAttr *attr, const char *key) {
for( aptr = attr; aptr != NULL; aptr = aptr->next ) {
if( xmlStrcmp(aptr->name, x_key) == 0 ) {
// FIXME: Should find a better way to return UTF-8 data
- free_nullsafe(x_key);
+ free_nullsafe(NULL, x_key);
return (char *)(aptr->children != NULL ? aptr->children->content : NULL);
}
}
- free_nullsafe(x_key);
+ free_nullsafe(NULL, x_key);
return NULL;
}
@@ -90,11 +90,11 @@ xmlNode *xmlFindNode(xmlNode *node, const char *key) {
for( nptr = node->children; nptr != NULL; nptr = nptr->next ) {
if( xmlStrcmp(nptr->name, x_key) == 0 ) {
- free_nullsafe(x_key);
+ free_nullsafe(NULL, x_key);
return nptr;
}
}
- free_nullsafe(x_key);
+ free_nullsafe(NULL, x_key);
return NULL;
}
@@ -193,7 +193,7 @@ xmlDoc *eurephiaXML_ResultMsg(eurephiaCTX *ctx, exmlResultType type, const char
va_start(ap, fmt);
xmlStrVPrintf(msg, 2048, xmlfmt, ap);
va_end(ap);
- free_nullsafe(xmlfmt);
+ free_nullsafe(ctx, xmlfmt);
switch( type ) {
case exmlRESULT:
diff --git a/common/eurephiadb_session_common.c b/common/eurephiadb_session_common.c
index a810bf0..9b65331 100644
--- a/common/eurephiadb_session_common.c
+++ b/common/eurephiadb_session_common.c
@@ -102,7 +102,7 @@ int eDBset_session_value(eurephiaCTX *ctx, eurephiaSESSION *session, const char
}
// Update the value in the stack if database is updated without errors
if( eDBstore_session_value(ctx, session,(val != NULL ? SESSVAL_UPDATE : SESSVAL_DELETE), key,val)){
- free_nullsafe(svals->val);
+ free_nullsafe(ctx, svals->val);
svals->val = strdup_nullsafe(val);
DEBUG(ctx, 32, "Session variable updated in session '%s': %s = %s",
session->sessionkey, key, val);
@@ -127,6 +127,6 @@ void eDBfree_session_func(eurephiaCTX *ctx, eurephiaSESSION *session) {
}
DEBUG(ctx, 12, "Function call: eDBfree_session(ctx, '%s')", session->sessionkey);
eFree_values(ctx, session->sessvals);
- free_nullsafe(session->sessionkey);
+ free_nullsafe(ctx, session->sessionkey);
free(session);
}
diff --git a/common/passwd.c b/common/passwd.c
index 9820988..c3971f4 100644
--- a/common/passwd.c
+++ b/common/passwd.c
@@ -171,7 +171,7 @@ int gen_randsaltstr(eurephiaCTX *ctx, char *saltstr, int len) {
ptr++;
ptr2++;
}
- free_nullsafe(rand);
+ free_nullsafe(ctx, rand);
return 1;
}
@@ -579,7 +579,7 @@ char *eurephia_quick_hash(const char *salt, const char *pwd) {
// Cleanup - remove hash data from memory
memset(&sha, 0, sizeof(SHA512Context));
memset(&sha_res, 0, sizeof(sha_res));
- free_nullsafe(tmp);
+ free_nullsafe(NULL, tmp);
return ret;
}
diff --git a/database/eurephiadb_mapping.c b/database/eurephiadb_mapping.c
index fbb4584..52c9778 100644
--- a/database/eurephiadb_mapping.c
+++ b/database/eurephiadb_mapping.c
@@ -71,8 +71,8 @@ void eDBfreeMapping(eDBfieldMap *p) {
// Release value and this pointer.
// Do not attempt to release field_name, as it is a constant char *
- free_nullsafe(p->value);
- free_nullsafe(p->table_alias);
+ free_nullsafe(NULL, p->value);
+ free_nullsafe(NULL, p->table_alias);
free(p);
}
@@ -325,7 +325,7 @@ char *eDBmkSortKeyString(eDBfieldMap *tfmap, const char *skeys_str) {
}
tok = strtok(NULL, delims);
}
- free_nullsafe(cp);
+ free_nullsafe(NULL, cp);
sortkeys[strlen(sortkeys)-1] = '\0';
eDBfreeMapping(sk_map);
diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c
index f3527c0..a8725b3 100644
--- a/database/sqlite/administration.c
+++ b/database/sqlite/administration.c
@@ -158,7 +158,7 @@ int eDBadminAuth(eurephiaCTX *ctx, const char *req_access, const char *uname, co
pwdok = ((crpwd != NULL) && (strcmp(crpwd, dbpwd) == 0) ? 1 : 0);
memset(crpwd, 0, strlen_nullsafe(crpwd));
memset(dbpwd, 0, strlen_nullsafe(dbpwd));
- free_nullsafe(crpwd);
+ free_nullsafe(ctx, crpwd);
if( pwdok == 0 ) {
eurephia_log(ctx, LOG_WARNING, 0, "Authentication failed.");
sleep(2);
@@ -1356,7 +1356,7 @@ xmlDoc *eDBadminGetLastlog(eurephiaCTX *ctx, xmlDoc *srch, const char *sortkeys)
for( fptr = fmap; fptr != NULL; fptr = fptr->next) {
switch( fptr->field_id ) {
case FIELD_UNAME:
- free_nullsafe(fptr->table_alias);
+ free_nullsafe(ctx, fptr->table_alias);
default:
break;
}
diff --git a/database/sqlite/edb-sqlite.c b/database/sqlite/edb-sqlite.c
index c1aa1c0..d4ef84d 100644
--- a/database/sqlite/edb-sqlite.c
+++ b/database/sqlite/edb-sqlite.c
@@ -123,8 +123,8 @@ int eDBconnect(eurephiaCTX *ctx, const int argc, const char **argv)
rc = sqlite3_open(argv[0], (void *) &dbc->dbhandle);
if( rc ) {
eurephia_log(ctx, LOG_PANIC, 0, "Could not open database '%s'", dbc->dbname);
- free_nullsafe(dbc->dbname);
- free_nullsafe(dbc);
+ free_nullsafe(ctx, dbc->dbname);
+ free_nullsafe(ctx, dbc);
return 0;
}
@@ -170,12 +170,12 @@ void eDBdisconnect(eurephiaCTX *ctx)
// Close database connection
sqlite3_close((sqlite3 *) dbc->dbhandle);
- free_nullsafe(dbc->dbname);
+ free_nullsafe(ctx, dbc->dbname);
dbc->dbhandle = NULL;
// Free up config memory
eFree_values(ctx, dbc->config);
- free_nullsafe(dbc);
+ free_nullsafe(ctx, dbc);
ctx->dbc = NULL;
}
@@ -214,7 +214,7 @@ int eDBauth_TLS(eurephiaCTX *ctx, const char *org, const char *cname, const char
update_attempts(ctx, blid);
certid = -1;
}
- free_nullsafe(blid);
+ free_nullsafe(ctx, blid);
} else {
eurephia_log(ctx, LOG_FATAL, 0, "Could not look up certificate information");
}
@@ -249,7 +249,7 @@ int eDBauth_user(eurephiaCTX *ctx, const int certid, const char *username, const
" WHERE uc.certid = '%i' AND ou.username = '%q'",
certid, username);
memset(crpwd, 0, strlen_nullsafe(crpwd));
- free_nullsafe(crpwd);
+ free_nullsafe(ctx, crpwd);
if( res == NULL ) {
eurephia_log(ctx, LOG_FATAL, 0,
"Could not lookup user in database (certid %i, username '%s'", certid, username);
@@ -273,7 +273,7 @@ int eDBauth_user(eurephiaCTX *ctx, const int certid, const char *username, const
pwdok = ((crpwd != NULL) && (strcmp(crpwd, dbpwd) == 0) ? 1 : 0);
memset(crpwd, 0, strlen_nullsafe(crpwd));
memset(dbpwd, 0, strlen_nullsafe(dbpwd));
- free_nullsafe(crpwd);
+ free_nullsafe(ctx, crpwd);
}
if( blid_uname != NULL ) {
@@ -414,14 +414,14 @@ int eDBblacklist_check(eurephiaCTX *ctx, const int type, const char *val)
sqlite_free_results(blr);
blacklisted = 1; // [type] is blacklisted
}
- free_nullsafe(atpid);
+ free_nullsafe(ctx, atpid);
} else {
eurephia_log(ctx, LOG_CRITICAL, 0, "Quering openvpn_attempts for blacklisted %s failed",
eDBattempt_types[type].descr);
}
- free_nullsafe(atpr);
+ free_nullsafe(ctx, atpr);
}
- free_nullsafe(blid);
+ free_nullsafe(ctx, blid);
DEBUG(ctx, 20, "Result - function call: eDBblacklist_check(ctx, '%s', '%s') - %i",
eDBattempt_types[type].descr, val, blacklisted);
@@ -511,9 +511,9 @@ void eDBregister_attempt(eurephiaCTX *ctx, int type, int mode, const char *value
}
sqlite_free_results(res);
}
- free_nullsafe(id);
- free_nullsafe(atmpt_block);
- free_nullsafe(blid);
+ free_nullsafe(ctx, id);
+ free_nullsafe(ctx, atmpt_block);
+ free_nullsafe(ctx, blid);
}
diff --git a/database/sqlite/sqlite.c b/database/sqlite/sqlite.c
index 5faa0b7..8646ea6 100644
--- a/database/sqlite/sqlite.c
+++ b/database/sqlite/sqlite.c
@@ -65,13 +65,13 @@ void _sqlite_free_results(dbresult *inres)
do {
if( fld != fld->prevfield ) {
fld = fld->nextfield;
- free_nullsafe(fld->prevfield->value);
- free_nullsafe(fld->prevfield);
+ free_nullsafe(NULL, fld->prevfield->value);
+ free_nullsafe(NULL, fld->prevfield);
}
} while( fld != tup );
tup = tup->nexttuple;
- free_nullsafe(fld->value);
- free_nullsafe(fld);
+ free_nullsafe(NULL, fld->value);
+ free_nullsafe(NULL, fld);
} while( tup != inres->tuples );
}
@@ -81,14 +81,14 @@ void _sqlite_free_results(dbresult *inres)
do {
if( hdr != hdr->prev ) {
hdr = hdr->next;
- free_nullsafe(hdr->prev->name);
- free_nullsafe(hdr->prev);
+ free_nullsafe(NULL, hdr->prev->name);
+ free_nullsafe(NULL, hdr->prev);
}
} while( hdr != inres->headerrec );
- free_nullsafe(hdr->name);
- free_nullsafe(hdr);
+ free_nullsafe(NULL, hdr->name);
+ free_nullsafe(NULL, hdr);
}
- free_nullsafe(inres);
+ free_nullsafe(NULL, inres);
}
@@ -232,7 +232,7 @@ dbresult *sqlite_query(eurephiaCTX *ctx, char *fmt, ... ) {
if( rc != SQLITE_OK ) {
eurephia_log(ctx, LOG_ERROR, 0, "SQL Error: %s", errMsg);
sqlite3_free(sql); sql = NULL;
- free_nullsafe(glob_results);
+ free_nullsafe(ctx, glob_results);
return NULL;
}
@@ -430,7 +430,7 @@ dbresult *sqlite_query_mapped(eurephiaCTX *ctx, SQLqueryType qType, const char *
sqlstub, (strlen_nullsafe(tmp1) > 0 ? "WHERE" : ""), tmp1,
sortkeys);
}
- free_nullsafe(tmp1);
+ free_nullsafe(ctx, tmp1);
}
break;
@@ -440,15 +440,15 @@ dbresult *sqlite_query_mapped(eurephiaCTX *ctx, SQLqueryType qType, const char *
tmp2 = _build_sqlpart(btWHERE, whereMap);
res = sqlite_query(ctx, "%s SET %s WHERE %s", sqlstub, tmp1, tmp2);
- free_nullsafe(tmp1);
- free_nullsafe(tmp2);
+ free_nullsafe(ctx, tmp1);
+ free_nullsafe(ctx, tmp2);
}
break;
case SQL_INSERT:
tmp1 = _build_sqlpart(btINSERT, valMap);
res = sqlite_query(ctx, "%s %s", sqlstub, tmp1);
- free_nullsafe(tmp1);
+ free_nullsafe(ctx, tmp1);
break;
}
@@ -536,8 +536,8 @@ xmlNodePtr sqlite_xml_value(xmlNodePtr node, xmlFieldType xmltyp, char *inname,
retnode = NULL;
}
}
- free_nullsafe(data);
- free_nullsafe(name);
+ free_nullsafe(NULL, data);
+ free_nullsafe(NULL, name);
return retnode;
}
#endif
diff --git a/eurephiadm/client_config.c b/eurephiadm/client_config.c
index 8b24cf2..1629d82 100644
--- a/eurephiadm/client_config.c
+++ b/eurephiadm/client_config.c
@@ -121,7 +121,7 @@ eurephiaVALUES *parse_config_line(const char *line) {
key = cp;
val = strpbrk(cp, "=");
if( val == NULL ) {
- free_nullsafe(cp);
+ free_nullsafe(NULL, cp);
return NULL;
}
*val = '\0'; val++;
@@ -159,7 +159,7 @@ eurephiaVALUES *parse_config_line(const char *line) {
ret->key = strdup(key);
ret->val = strdup(val);
- free_nullsafe(cp);
+ free_nullsafe(NULL, cp);
return ret;
}
@@ -205,7 +205,7 @@ eurephiaVALUES *ReadConfig(const char *env, const char *cfgname) {
eAdd_valuestruct(NULL, cfg, prm);
}
};
- free_nullsafe(buf);
+ free_nullsafe(NULL, buf);
fclose(fp); fp = NULL;
return cfg;
diff --git a/eurephiadm/client_context.c b/eurephiadm/client_context.c
index 6875087..aaec995 100644
--- a/eurephiadm/client_context.c
+++ b/eurephiadm/client_context.c
@@ -76,7 +76,7 @@ eurephiaCTX *eurephiaCTX_init(FILE *log, const int loglevel, eurephiaVALUES *cfg
ctx->log = NULL;
} else if( (ctx->log = fopen(logfile, "aw")) == NULL ) {
fprintf(stderr, "ERROR: Could not open log file: %s\n", logfile);
- free_nullsafe(ctx);
+ free_nullsafe(NULL, ctx);
return NULL;
}
} else {
@@ -99,7 +99,7 @@ eurephiaCTX *eurephiaCTX_init(FILE *log, const int loglevel, eurephiaVALUES *cfg
if( !eDBlink_init(ctx, dbdriver, 2) ) {
eurephia_log(ctx, LOG_PANIC, 0, "Could not load the database driver");
- free_nullsafe(ctx);
+ free_nullsafe(ctx, ctx);
return NULL;
}
return ctx;
@@ -137,5 +137,5 @@ void eurephiaCTX_destroy(eurephiaCTX *ctx) {
ctx->log = NULL;
ctx->loglevel = 0;
}
- free_nullsafe(ctx);
+ free_nullsafe(ctx, ctx);
}
diff --git a/eurephiadm/client_session.c b/eurephiadm/client_session.c
index 0f3ec80..22334c2 100644
--- a/eurephiadm/client_session.c
+++ b/eurephiadm/client_session.c
@@ -177,15 +177,15 @@ eurephiaSESSION *create_session(eurephiaCTX *ctx, const char *sesskey) {
if( !eurephia_randstring(ctx, randdata, 512) ) {
eurephia_log(ctx, LOG_FATAL, 0,
"Could not generate enough random data for session");
- free_nullsafe(randdata);
- free_nullsafe(new_sess);
+ free_nullsafe(ctx, randdata);
+ free_nullsafe(ctx, new_sess);
return NULL;
}
memset(&sha, 0, sizeof(SHA512Context));
memset(&sha_res, 0, SHA512_HASH_SIZE+2);
- free_nullsafe(new_sess->sessionkey);
+ free_nullsafe(ctx, new_sess->sessionkey);
new_sess->sessionkey = (char *) malloc_nullsafe(ctx, (SHA512_HASH_SIZE*2) + 3);
assert(new_sess->sessionkey != NULL);
@@ -205,14 +205,14 @@ eurephiaSESSION *create_session(eurephiaCTX *ctx, const char *sesskey) {
uniqchk = eDBcheck_sessionkey_uniqueness(ctx, new_sess->sessionkey);
memset(randdata, 0, 514);
} while( (uniqchk == 0) && (loop < 11) );
- free_nullsafe(randdata);
+ free_nullsafe(ctx, randdata);
if( uniqchk == 0 ) {
eurephia_log(ctx, LOG_FATAL, 0,
"Did not manage to create a unique session key after %i attempts."
" Aborting.", loop-1);
- free_nullsafe(new_sess->sessionkey);
- free_nullsafe(new_sess);
+ free_nullsafe(ctx, new_sess->sessionkey);
+ free_nullsafe(ctx, new_sess);
return NULL;
}
} else {
diff --git a/eurephiadm/commands/adminaccess.c b/eurephiadm/commands/adminaccess.c
index 179db97..f0daf61 100644
--- a/eurephiadm/commands/adminaccess.c
+++ b/eurephiadm/commands/adminaccess.c
@@ -391,7 +391,7 @@ int cmd_AdminAccess(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg
// Call the mode function
rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv);
- free_nullsafe(mode_argv);
+ free_nullsafe(ctx, mode_argv);
return rc;
}
diff --git a/eurephiadm/commands/attempts.c b/eurephiadm/commands/attempts.c
index 75cbdd6..0ce6455 100644
--- a/eurephiadm/commands/attempts.c
+++ b/eurephiadm/commands/attempts.c
@@ -371,7 +371,7 @@ int cmd_Attempts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, i
// Call the mode function
rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv);
- free_nullsafe(mode_argv);
+ free_nullsafe(ctx, mode_argv);
return rc;
diff --git a/eurephiadm/commands/blacklist.c b/eurephiadm/commands/blacklist.c
index 69d5962..8227a18 100644
--- a/eurephiadm/commands/blacklist.c
+++ b/eurephiadm/commands/blacklist.c
@@ -371,7 +371,7 @@ int cmd_Blacklist(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg,
// Call the mode function
rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv);
- free_nullsafe(mode_argv);
+ free_nullsafe(ctx, mode_argv);
return rc;
diff --git a/eurephiadm/commands/certificates.c b/eurephiadm/commands/certificates.c
index 5e81e06..469d28d 100644
--- a/eurephiadm/commands/certificates.c
+++ b/eurephiadm/commands/certificates.c
@@ -200,8 +200,8 @@ int register_certificate(eurephiaCTX *ctx, int depth, const char *digest,
fprintf(stderr, "%s: Failed to register certificate\n", MODULE);
}
xmlFreeDoc(cert_xml);
- free_nullsafe(cname_cp);
- free_nullsafe(org_cp);
+ free_nullsafe(ctx, cname_cp);
+ free_nullsafe(ctx, org_cp);
return certid;
}
@@ -354,10 +354,10 @@ int add_cert(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int a
// register_certificate returns value < 1, it means registration failed => rc = 1
rc = (register_certificate(ctx, depth, digest, cname, org, email) < 1);
exit:
- free_nullsafe(digest);
- free_nullsafe(cname);
- free_nullsafe(org);
- free_nullsafe(email);
+ free_nullsafe(ctx, digest);
+ free_nullsafe(ctx, cname);
+ free_nullsafe(ctx, org);
+ free_nullsafe(ctx, email);
return rc;
}
@@ -492,8 +492,8 @@ int delete_cert(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, in
exit:
xmlFreeDoc(certlist);
xmlFreeDoc(cert_xml);
- free_nullsafe(cname);
- free_nullsafe(org);
+ free_nullsafe(ctx, cname);
+ free_nullsafe(ctx, org);
return rc;
}
@@ -640,7 +640,7 @@ int cmd_Certificates(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cf
// Call the mode function
rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv);
- free_nullsafe(mode_argv);
+ free_nullsafe(ctx, mode_argv);
return rc;
}
diff --git a/eurephiadm/commands/fwprofiles.c b/eurephiadm/commands/fwprofiles.c
index 4eac0f1..3f79017 100644
--- a/eurephiadm/commands/fwprofiles.c
+++ b/eurephiadm/commands/fwprofiles.c
@@ -398,7 +398,7 @@ int cmd_fwProfiles(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg,
// Call the mode function
rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv);
- free_nullsafe(mode_argv);
+ free_nullsafe(ctx, mode_argv);
return rc;
diff --git a/eurephiadm/commands/usercerts.c b/eurephiadm/commands/usercerts.c
index a86d232..208f816 100644
--- a/eurephiadm/commands/usercerts.c
+++ b/eurephiadm/commands/usercerts.c
@@ -542,7 +542,7 @@ int cmd_UserCerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg,
// Call the mode function
rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv);
- free_nullsafe(mode_argv);
+ free_nullsafe(ctx, mode_argv);
return rc;
}
diff --git a/eurephiadm/commands/users.c b/eurephiadm/commands/users.c
index 66b3bce..7e6c215 100644
--- a/eurephiadm/commands/users.c
+++ b/eurephiadm/commands/users.c
@@ -567,20 +567,20 @@ int account_activation(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *
get_console_input(newpwd, 64, "Password for user:", 1);
if( strlen_nullsafe(newpwd) < 4 ) {
- free_nullsafe(newpwd);
- free_nullsafe(chkpwd);
+ free_nullsafe(ctx, newpwd);
+ free_nullsafe(ctx, chkpwd);
fprintf(stderr, "%s: Password is too short\n", MODULE);
goto exit;
}
get_console_input(chkpwd, 64, "Verify password for user:", 1);
if( strcmp(newpwd, chkpwd) != 0 ) {
- free_nullsafe(newpwd);
- free_nullsafe(chkpwd);
+ free_nullsafe(ctx, newpwd);
+ free_nullsafe(ctx, chkpwd);
fprintf(stderr, "%s: Passwords didn't match\n", MODULE);
goto exit;
}
- free_nullsafe(chkpwd);
+ free_nullsafe(ctx, chkpwd);
}
// Update with new password
@@ -588,7 +588,7 @@ int account_activation(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *
xmlNewProp(tmp_n, (xmlChar *) "pwhash", (xmlChar *) "none");
rc = eDBadminUpdateUser(ctx, atoi_nullsafe(uid_str), update_xml);
- free_nullsafe(newpwd);
+ free_nullsafe(ctx, newpwd);
break;
case 'D': // Delete user account
@@ -759,20 +759,20 @@ int add_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int a
get_console_input(passwd, 64, "Password for user:", 1);
if( strlen_nullsafe(passwd) < 4 ) {
- free_nullsafe(passwd);
- free_nullsafe(chkpwd);
+ free_nullsafe(ctx, passwd);
+ free_nullsafe(ctx, chkpwd);
fprintf(stderr, "%s: Password is too short\n", MODULE);
return 1;
}
get_console_input(chkpwd, 64, "Verify password for user:", 1);
if( strcmp(passwd, chkpwd) != 0 ) {
- free_nullsafe(passwd);
- free_nullsafe(chkpwd);
+ free_nullsafe(ctx, passwd);
+ free_nullsafe(ctx, chkpwd);
fprintf(stderr, "%s: Passwords didn't match\n", MODULE);
return 1;
}
- free_nullsafe(chkpwd);
+ free_nullsafe(ctx, chkpwd);
}
@@ -793,7 +793,7 @@ int add_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int a
fprintf(stderr, "%s: Failed to register user\n", MODULE);
}
memset(passwd, 0, strlen_nullsafe(passwd));
- free_nullsafe(passwd);
+ free_nullsafe(ctx, passwd);
xmlFreeDoc(user_xml);
if( (digest != NULL) || (certfile != NULL) ) {
@@ -991,7 +991,7 @@ int cmd_Users(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int
// Call the mode function
rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv);
- free_nullsafe(mode_argv);
+ free_nullsafe(ctx, mode_argv);
return rc;
}
diff --git a/eurephiadm/eurephiadm.c b/eurephiadm/eurephiadm.c
index 10cf70e..518f8a5 100644
--- a/eurephiadm/eurephiadm.c
+++ b/eurephiadm/eurephiadm.c
@@ -232,7 +232,7 @@ int eurephia_ConnectDB(eurephiaCTX *ctx, const char *argstr) {
eDBlink_close(ctx);
return 0;
}
- free_nullsafe(cp);
+ free_nullsafe(ctx, cp);
return 1;
}
@@ -467,7 +467,7 @@ int main(int argc, char **argv) {
char *logout_argv[] = { sesskey_file };
rc = cmd_Logout(ctx, NULL, cfg, 0, logout_argv);
remove_session_file(ctx);
- free_nullsafe(sesskey_file);
+ free_nullsafe(ctx, sesskey_file);
goto exit;
}
@@ -484,7 +484,7 @@ int main(int argc, char **argv) {
}
}
}
- free_nullsafe(sesskey_file);
+ free_nullsafe(ctx, sesskey_file);
// If we have an open session now, call the requested command
@@ -500,7 +500,7 @@ int main(int argc, char **argv) {
rc = call_fnc->function(ctx, session, cfg, cmdargc, cmdargv);
argstr = args2string(cmdargc, cmdargv);
eurephia_log(ctx, LOG_INFO, 0, "Command: %s (result: %i)", argstr, rc);
- free_nullsafe(argstr);
+ free_nullsafe(ctx, argstr);
// Remove session info from memory
eDBfree_session(ctx, session);
diff --git a/plugin/eurephia.c b/plugin/eurephia.c
index 82a3097..761ab71 100644
--- a/plugin/eurephia.c
+++ b/plugin/eurephia.c
@@ -221,7 +221,7 @@ eurephiaCTX *eurephiaInit(const char **argv)
eurephia_log(ctx, LOG_PANIC, 0, "eurephia-auth is not available");
fclose(ctx->log);
}
- free_nullsafe(ctx);
+ free_nullsafe(ctx, ctx);
return NULL;
}
@@ -232,10 +232,10 @@ eurephiaCTX *eurephiaInit(const char **argv)
if( !eurephia_randstring(ctx, ctx->server_salt, SIZE_PWDCACHE_SALT) ) {
eurephia_log(ctx, LOG_PANIC, 0 , "Could not get enough random data for password cache.");
- free_nullsafe(ctx->server_salt);
+ free_nullsafe(ctx, ctx->server_salt);
eDBdisconnect(ctx);
fclose(ctx->log);
- free_nullsafe(ctx);
+ free_nullsafe(ctx, ctx);
return NULL;
}
@@ -301,8 +301,8 @@ int eurephiaShutdown(eurephiaCTX *ctx)
}
memset(ctx->server_salt, 0xff, SIZE_PWDCACHE_SALT+2);
- free_nullsafe(ctx->server_salt);
- free_nullsafe(ctx);
+ free_nullsafe(ctx, ctx->server_salt);
+ free_nullsafe(ctx, ctx);
return 1;
}
@@ -487,7 +487,7 @@ int eurephia_userauth(eurephiaCTX *ctx, const char **env)
}
exit:
- free_nullsafe(chkpwd);
+ free_nullsafe(ctx, chkpwd);
eDBfree_session(ctx, authsess);
DEBUG(ctx, 10, "** Function result: eurephia_userauth(...) = %i", (result>0));
return (result > 0);
@@ -652,7 +652,7 @@ int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macad
fwprofile = eDBget_firewall_profile(ctx, session);
if( fwprofile != NULL ) {
eFW_UpdateFirewall(ctx, FWRULE_ADD, macaddr, fwdest, fwprofile);
- free_nullsafe(fwprofile);
+ free_nullsafe(ctx, fwprofile);
}
}
eDBfree_session(ctx, session);
@@ -673,7 +673,7 @@ int eurephia_learn_address(eurephiaCTX *ctx, const char *mode, const char *macad
fwprofile = eDBget_firewall_profile(ctx, session);
if( fwprofile != NULL ) {
eFW_UpdateFirewall(ctx, FWRULE_DELETE, macaddr, fwdest, fwprofile);
- free_nullsafe(fwprofile);
+ free_nullsafe(ctx, fwprofile);
}
}
ret = eDBdestroy_session(ctx, session);
diff --git a/plugin/eurephiadb_session.c b/plugin/eurephiadb_session.c
index aca3b28..c0a6878 100644
--- a/plugin/eurephiadb_session.c
+++ b/plugin/eurephiadb_session.c
@@ -99,7 +99,7 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
seeddata = (char *) malloc_nullsafe(ctx, (totlen * 2) + 4);
if( seeddata == NULL ) {
- free_nullsafe(new_session);
+ free_nullsafe(ctx, new_session);
return NULL;
}
snprintf((char *)seeddata, totlen,
@@ -114,8 +114,8 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
seed = (char *) malloc_nullsafe(ctx, (SHA512_HASH_SIZE*2)+3);
if( seed == NULL ) {
- free_nullsafe(seeddata);
- free_nullsafe(new_session);
+ free_nullsafe(ctx, seeddata);
+ free_nullsafe(ctx, new_session);
return NULL;
}
ptr = seed;
@@ -143,10 +143,10 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
// Loop until we get a unique sessionkey - don't loop more than 10 times
skeydata = (char *) malloc_nullsafe(ctx, (totlen*2)+4);
if( skeydata == NULL ) {
- free_nullsafe(new_session->sessionkey);
- free_nullsafe(new_session);
- free_nullsafe(seeddata);
- free_nullsafe(seed);
+ free_nullsafe(ctx, new_session->sessionkey);
+ free_nullsafe(ctx, new_session);
+ free_nullsafe(ctx, seeddata);
+ free_nullsafe(ctx, seed);
return NULL;
}
do {
@@ -157,10 +157,10 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
// Append some random data to our session seed
rndstr = (char *) malloc_nullsafe(ctx, (totlen * 2));
if( rndstr == NULL ) {
- free_nullsafe(new_session->sessionkey);
- free_nullsafe(new_session);
- free_nullsafe(seeddata);
- free_nullsafe(seed);
+ free_nullsafe(ctx, new_session->sessionkey);
+ free_nullsafe(ctx, new_session);
+ free_nullsafe(ctx, seeddata);
+ free_nullsafe(ctx, seed);
return NULL;
}
rndlen = ((totlen * 2) - strlen_nullsafe(seed) - 2);
@@ -168,10 +168,10 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
if( !eurephia_randstring(ctx, rndstr, rndlen) ) {
eurephia_log(ctx, LOG_PANIC, 0,
"Could not generate enough random data for session key");
- free_nullsafe(new_session->sessionkey);
- free_nullsafe(new_session);
- free_nullsafe(seeddata);
- free_nullsafe(seed);
+ free_nullsafe(ctx, new_session->sessionkey);
+ free_nullsafe(ctx, new_session);
+ free_nullsafe(ctx, seeddata);
+ free_nullsafe(ctx, seed);
return NULL;
}
@@ -180,12 +180,12 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
SHA512Update(&sha, rndstr, rndlen);
SHA512Final(&sha, sha_res);
- free_nullsafe(new_session->sessionkey);
+ free_nullsafe(ctx, new_session->sessionkey);
new_session->sessionkey = (char *) malloc_nullsafe(ctx, (SHA512_HASH_SIZE*2)+3);
if( new_session->sessionkey == NULL ) {
- free_nullsafe(new_session);
- free_nullsafe(seeddata);
- free_nullsafe(seed);
+ free_nullsafe(ctx, new_session);
+ free_nullsafe(ctx, seeddata);
+ free_nullsafe(ctx, seed);
return NULL;
}
@@ -196,31 +196,31 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
}
memset(&sha, 0, sizeof(SHA512Context));
memset(&sha_res, 0, sizeof(sha_res));
- free_nullsafe(rndstr);
+ free_nullsafe(ctx, rndstr);
loop++;
uniqcheck = eDBcheck_sessionkey_uniqueness(ctx, new_session->sessionkey);
} while( (uniqcheck == 0) && loop < 11 );
- free_nullsafe(skeydata);
+ free_nullsafe(ctx, skeydata);
// If we did not manage to create a unique session key (random data collection must have failed!)
if( uniqcheck == 0 ) {
eurephia_log(ctx, LOG_FATAL, 0,
"Did not manage to create a unique sessionkey after %i attempts", loop-1);
- free_nullsafe(new_session->sessionkey);
- free_nullsafe(new_session);
- free_nullsafe(seeddata);
- free_nullsafe(seed);
+ free_nullsafe(ctx, new_session->sessionkey);
+ free_nullsafe(ctx, new_session);
+ free_nullsafe(ctx, seeddata);
+ free_nullsafe(ctx, seed);
return NULL;
}
// Save this session key in the database and connect it to this session seed
if( eDBregister_sessionkey(ctx, seed, new_session->sessionkey) == 0) {
eurephia_log(ctx, LOG_FATAL, 0, "Could not register sessionkey");
- free_nullsafe(new_session->sessionkey);
- free_nullsafe(new_session);
- free_nullsafe(seeddata);
- free_nullsafe(seed);
+ free_nullsafe(ctx, new_session->sessionkey);
+ free_nullsafe(ctx, new_session);
+ free_nullsafe(ctx, seeddata);
+ free_nullsafe(ctx, seed);
return NULL;
};
new_session->sessionstatus = SESSION_NEW;
@@ -228,8 +228,8 @@ eurephiaSESSION *eDBopen_session_seed(eurephiaCTX *ctx, const char *digest,
new_session->sessionstatus = SESSION_EXISTING;
DEBUG(ctx, 13, "Session seed found, using sessionkey '%s'", new_session->sessionkey);
}
- free_nullsafe(seed);
- free_nullsafe(seeddata);
+ free_nullsafe(ctx, seed);
+ free_nullsafe(ctx, seeddata);
// Load session values from the database
new_session->sessvals = eDBload_sessiondata(ctx, new_session->sessionkey);
@@ -267,7 +267,7 @@ eurephiaSESSION *eDBopen_session_macaddr(eurephiaCTX *ctx, const char *macaddr)
if( new_session->sessionkey == NULL ) {
eurephia_log(ctx, LOG_CRITICAL, 0, "Could not find an active session for MAC address '%s'",
macaddr);
- free_nullsafe(new_session);
+ free_nullsafe(ctx, new_session);
return NULL;
}
DEBUG(ctx, 13, "Session seed found, using sessionkey '%s'", new_session->sessionkey);
diff --git a/plugin/firewall/eurephiafw.c b/plugin/firewall/eurephiafw.c
index 10d48a7..0d2cc43 100644
--- a/plugin/firewall/eurephiafw.c
+++ b/plugin/firewall/eurephiafw.c
@@ -193,13 +193,13 @@ void eFW_StartFirewall(eurephiaCTX *ctx) {
// Setup semaphores we need
if( efwSetupSemaphores(ctx, &(*ctx->fwcfg).thrdata) == 0 ) {
- free_nullsafe(ctx->fwcfg->thrdata.fw_command);
+ free_nullsafe(ctx, ctx->fwcfg->thrdata.fw_command);
return;
};
// Setup a message queue
if( efwSetupMessageQueue(ctx, &(*ctx->fwcfg).thrdata) == 0 ) {
- free_nullsafe(ctx->fwcfg);
+ free_nullsafe(ctx, ctx->fwcfg);
return;
}
@@ -349,10 +349,10 @@ void eFW_StopFirewall(eurephiaCTX *ctx) {
sem_post(ctx->fwcfg->thrdata.semp_master);
// Clean up and exit
- free_nullsafe(ctx->fwcfg->fwblacklist_sendto);
+ free_nullsafe(ctx, ctx->fwcfg->fwblacklist_sendto);
eFree_values(ctx, ctx->fwcfg->blacklisted);
- free_nullsafe((*ctx->fwcfg).thrdata.fw_command);
- free_nullsafe(ctx->fwcfg);
+ free_nullsafe(ctx, (*ctx->fwcfg).thrdata.fw_command);
+ free_nullsafe(ctx, ctx->fwcfg);
eurephia_log(ctx, LOG_INFO, 2, "eurephia firewall interface is stopped");
}
diff --git a/plugin/firewall/iptables/efw-iptables.c b/plugin/firewall/iptables/efw-iptables.c
index 1329973..5d04d83 100644
--- a/plugin/firewall/iptables/efw-iptables.c
+++ b/plugin/firewall/iptables/efw-iptables.c
@@ -303,7 +303,7 @@ int process_input(eurephiaCTX *ctx, const char *fwcmd, const char *input) {
eurephia_log(ctx, LOG_CRITICAL, 0, "eFW_RunFirewall::process_input: Malformed update request");
ret = 1;
}
- free_nullsafe(orig_msg);
+ free_nullsafe(ctx, orig_msg);
return ret;
}
diff --git a/utils/benchmark.c b/utils/benchmark.c
index fb1af80..a3fc5f1 100644
--- a/utils/benchmark.c
+++ b/utils/benchmark.c
@@ -69,7 +69,7 @@ void benchmark_hashing(int rounds) {
pwdhash = sha512_crypt_r("benchmarkpassword", pwdsalt, ROUNDS_MAX, buffer, 1024);
- free_nullsafe(buffer);
+ free_nullsafe(NULL, buffer);
}
diff --git a/utils/eurephia_init.c b/utils/eurephia_init.c
index 8a3b343..b89ed75 100644
--- a/utils/eurephia_init.c
+++ b/utils/eurephia_init.c
@@ -132,7 +132,7 @@ int eurephia_ConnectDB(eurephiaCTX *ctx, eurephiaVALUES *cfg) {
eDBlink_close(ctx);
return 0;
}
- free_nullsafe(cp);
+ free_nullsafe(ctx, cp);
return 1;
}