summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--acl.c8
-rw-r--r--check_dbmail_db.c2
-rw-r--r--check_dbmail_deliver.c12
-rw-r--r--db.c120
-rw-r--r--dbmail-imapsession.c16
-rw-r--r--dbmail-message.c6
-rw-r--r--dbmail-user.c6
-rw-r--r--debug.h24
-rw-r--r--dm_base64.c2
-rw-r--r--dsn.c18
-rw-r--r--imap4.h2
-rw-r--r--imapcommands.c32
-rw-r--r--lmtp.c10
-rw-r--r--main.c12
-rw-r--r--memblock.c16
-rw-r--r--misc.c8
-rw-r--r--modules/authldap.c96
-rw-r--r--modules/authsql.c59
-rw-r--r--modules/sortsieve.c16
-rw-r--r--pipe.c16
-rw-r--r--quota.c20
-rw-r--r--sievecmd.c26
-rw-r--r--timsieve.c26
-rw-r--r--user.c2
25 files changed, 265 insertions, 300 deletions
diff --git a/ChangeLog b/ChangeLog
index b658a739..bb102940 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-04-08 Aaron Stone <aaron@serendipity.cx>
+
+ * check_dbmail_deliver.c dbmail-user.c lmtp.c user.c imap4.h db.c
+ modules/authsql.c modules/authldap.c modules/sortsieve.c quota.c
+ debug.h acl.c imapcommands.c dsn.c pipe.c dm_base64.c dbmail-message.c
+ check_dbmail_db.c sievecmd.c dbmail-imapsession.c main.c timsieve.c
+ memblock.c misc.c:
+ Changed all instances of dm_free, dm_malloc, dm_strdup to g_free,
+ g_new0 or g_malloc, g_strdup, respectively.
+
2007-04-07 Aaron Stone <aaron@serendipity.cx>
* pool.h, pool.c, lmtp.c, pop3.c, timsieve.c, imapcommands.c,
diff --git a/acl.c b/acl.c
index 903ca86a..6ec20470 100644
--- a/acl.c
+++ b/acl.c
@@ -225,11 +225,11 @@ char *acl_get_acl(u64_t mboxid)
if (dm_list_nodeadd(&identifier_list, username, strlen(username) + 1) == NULL) {
TRACE(TRACE_ERROR, "error adding username to list");
dm_list_free(&identifier_list.start);
- dm_free(username);
+ g_free(username);
return NULL;
}
- dm_free(username);
+ g_free(username);
TRACE(TRACE_DEBUG, "before looping identifiers!");
@@ -253,7 +253,7 @@ char *acl_get_acl(u64_t mboxid)
identifier = (char *) identifier_elm->data;
if (acl_get_rightsstring_identifier(identifier, mboxid, rightsstring) < 0) {
dm_list_free(&identifier_list.start);
- dm_free(acl_string);
+ g_free(acl_string);
return NULL;
}
TRACE(TRACE_DEBUG, "%s", rightsstring);
@@ -299,7 +299,7 @@ char *acl_myrights(u64_t userid, u64_t mboxid)
if (acl_get_rightsstring(userid, mboxid, rightsstring) < 0) {
TRACE(TRACE_ERROR, "error getting rightsstring.");
- dm_free(rightsstring);
+ g_free(rightsstring);
return NULL;
}
diff --git a/check_dbmail_db.c b/check_dbmail_db.c
index ad6d1e0d..2be04d54 100644
--- a/check_dbmail_db.c
+++ b/check_dbmail_db.c
@@ -809,7 +809,7 @@ START_TEST(test_db_imap_utf7_like)
fail_unless(strcmp(result, getthese[i])==0, "Failed to make db_imap_utf7_like string for [%s]", trythese[i]);
- dm_free(result);
+ g_free(result);
}
}
END_TEST
diff --git a/check_dbmail_deliver.c b/check_dbmail_deliver.c
index dbe338c5..ef22d983 100644
--- a/check_dbmail_deliver.c
+++ b/check_dbmail_deliver.c
@@ -528,7 +528,7 @@ START_TEST(test_auth_get_userid)
fail_unless(strlen(username)>3,"auth_get_userid failed");
auth_user_exists(username, &testidnr);
fail_unless(testidnr==user_idnr,"auth_get_userid: auth_user_exists returned wrong idnr");
- dm_free(username);
+ g_free(username);
}
END_TEST
@@ -920,7 +920,7 @@ START_TEST(test_find_bounded)
"find_bounded is broken. "
"Should be success: %s", newaddress);
- dm_free(newaddress);
+ g_free(newaddress);
}
END_TEST
@@ -936,7 +936,7 @@ START_TEST(test_zap_between_both)
"zap_between is both broken. "
"Should be success: %s", newaddress);
- dm_free(newaddress);
+ g_free(newaddress);
}
END_TEST
@@ -952,7 +952,7 @@ START_TEST(test_zap_between_left)
"zap_between is left broken. "
"Should be suc@cess: %s", newaddress);
- dm_free(newaddress);
+ g_free(newaddress);
}
END_TEST
@@ -968,7 +968,7 @@ START_TEST(test_zap_between_right)
"zap_between is right broken. "
"Should be suc+cess: %s", newaddress);
- dm_free(newaddress);
+ g_free(newaddress);
}
END_TEST
@@ -984,7 +984,7 @@ START_TEST(test_zap_between_center)
"zap_between is center broken. "
"Should be suc+@cess: %s", newaddress);
- dm_free(newaddress);
+ g_free(newaddress);
}
END_TEST
diff --git a/db.c b/db.c
index e6aba330..a161e76c 100644
--- a/db.c
+++ b/db.c
@@ -553,7 +553,7 @@ int db_get_sievescript_byname(u64_t user_idnr, char *scriptname, char **script)
"SELECT script FROM %ssievescripts WHERE "
"owner_idnr = %llu AND name = '%s'",
DBPFX,user_idnr,escaped_scriptname);
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "error getting sievescript by name");
@@ -574,7 +574,7 @@ int db_get_sievescript_byname(u64_t user_idnr, char *scriptname, char **script)
return DM_EQUERY;
}
- *script = dm_strdup(query_result);
+ *script = g_strdup(query_result);
db_free_result();
return DM_SUCCESS;
@@ -606,7 +606,7 @@ int db_check_sievescript_active_byname(u64_t user_idnr, const char *scriptname)
"owner_idnr = %llu AND active = 1 AND name = '%s'",
DBPFX, user_idnr, name);
- dm_free(name);
+ g_free(name);
} else {
snprintf(query, DEF_QUERYSIZE,
"SELECT name FROM %ssievescripts WHERE "
@@ -652,7 +652,7 @@ int db_get_sievescript_active(u64_t user_idnr, char **scriptname)
n = db_num_rows();
if (n > 0) {
- *scriptname = dm_strdup(db_get_result(0, 0));
+ *scriptname = g_strdup(db_get_result(0, 0));
}
db_free_result();
@@ -681,7 +681,7 @@ int db_get_sievescript_listall(u64_t user_idnr, struct dm_list *scriptlist)
for (i = 0, n = db_num_rows(); i < n; i++) {
struct ssinfo info;
- info.name = dm_strdup(db_get_result(i, 0));
+ info.name = g_strdup(db_get_result(i, 0));
info.active = db_get_result_int(i, 1);
dm_list_nodeadd(scriptlist, &info, sizeof(struct ssinfo));
@@ -716,8 +716,8 @@ int db_rename_sievescript(u64_t user_idnr, char *scriptname, char *newname)
if (db_query(query) == -1 ) {
db_rollback_transaction();
- dm_free(escaped_scriptname);
- dm_free(escaped_newname);
+ g_free(escaped_scriptname);
+ g_free(escaped_newname);
return DM_EQUERY;
}
@@ -731,8 +731,8 @@ int db_rename_sievescript(u64_t user_idnr, char *scriptname, char *newname)
if (db_query(query) == -1 ) {
db_rollback_transaction();
- dm_free(escaped_scriptname);
- dm_free(escaped_newname);
+ g_free(escaped_scriptname);
+ g_free(escaped_newname);
return DM_EQUERY;
}
}
@@ -742,8 +742,8 @@ int db_rename_sievescript(u64_t user_idnr, char *scriptname, char *newname)
"UPDATE %ssievescripts SET name = '%s', active = %d "
"WHERE owner_idnr = %llu AND name = '%s'",
DBPFX,escaped_newname,active,user_idnr,escaped_scriptname);
- dm_free(escaped_scriptname);
- dm_free(escaped_newname);
+ g_free(escaped_scriptname);
+ g_free(escaped_newname);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "error replacing sievescript '%s' "
@@ -777,7 +777,7 @@ int db_add_sievescript(u64_t user_idnr, char *scriptname, char *script)
if (db_query(query) == -1 ) {
db_rollback_transaction();
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
return DM_EQUERY;
}
@@ -790,7 +790,7 @@ int db_add_sievescript(u64_t user_idnr, char *scriptname, char *script)
if (db_query(query) == -1 ) {
db_rollback_transaction();
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
return DM_EQUERY;
}
}
@@ -810,17 +810,17 @@ int db_add_sievescript(u64_t user_idnr, char *scriptname, char *script)
snprintf(&escaped_query[esclen + startlen],
maxesclen - esclen - startlen, "', 0)");
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
if (db_query(escaped_query) == -1) {
TRACE(TRACE_ERROR, "error adding sievescript '%s' "
"for user_idnr [%llu]" ,
scriptname, user_idnr);
db_rollback_transaction();
- dm_free(escaped_query);
+ g_free(escaped_query);
return DM_EQUERY;
}
- dm_free(escaped_query);
+ g_free(escaped_query);
db_commit_transaction();
return DM_SUCCESS;
@@ -838,7 +838,7 @@ int db_deactivate_sievescript(u64_t user_idnr, char *scriptname)
"UPDATE %ssievescripts set active = 0 "
"where owner_idnr = %llu and name = '%s'",
DBPFX,user_idnr,escaped_scriptname);
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "error deactivating sievescript '%s' "
@@ -868,7 +868,7 @@ int db_activate_sievescript(u64_t user_idnr, char *scriptname)
TRACE(TRACE_ERROR, "error activating sievescript '%s' "
"for user_idnr [%llu]" ,
scriptname, user_idnr);
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
db_rollback_transaction();
return DM_EQUERY;
}
@@ -877,7 +877,7 @@ int db_activate_sievescript(u64_t user_idnr, char *scriptname)
"UPDATE %ssievescripts SET active = 1 "
"WHERE owner_idnr = %llu AND name = '%s'",
DBPFX,user_idnr,escaped_scriptname);
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "error activating sievescript '%s' "
@@ -903,7 +903,7 @@ int db_delete_sievescript(u64_t user_idnr, char *scriptname)
"DELETE FROM %ssievescripts "
"WHERE owner_idnr = %llu AND name = '%s'",
DBPFX,user_idnr,escaped_scriptname);
- dm_free(escaped_scriptname);
+ g_free(escaped_scriptname);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "error deleting sievescript '%s' "
@@ -962,7 +962,7 @@ int db_get_notify_address(u64_t user_idnr, char **notify_address)
if (db_num_rows() > 0) {
query_result = db_get_result(0, 0);
if (query_result && strlen(query_result) > 0) {
- *notify_address = dm_strdup(query_result);
+ *notify_address = g_strdup(query_result);
TRACE(TRACE_DEBUG, "found address [%s]", *notify_address);
}
}
@@ -994,7 +994,7 @@ int db_get_reply_body(u64_t user_idnr, char **reply_body)
if (db_num_rows() > 0) {
query_result = db_get_result(0, 0);
if (query_result && strlen(query_result) > 0) {
- *reply_body = dm_strdup(query_result);
+ *reply_body = g_strdup(query_result);
TRACE(TRACE_DEBUG, "found reply_body [%s]", *reply_body);
}
}
@@ -1076,7 +1076,7 @@ int db_insert_physmessage_with_internal_date(timestring_t internal_date,
snprintf(query, DEF_QUERYSIZE,
"INSERT INTO %sphysmessage (messagesize, internal_date) "
"VALUES (0, %s)", DBPFX,to_date_str);
- dm_free(to_date_str);
+ g_free(to_date_str);
} else {
snprintf(query, DEF_QUERYSIZE,
"INSERT INTO %sphysmessage (messagesize, internal_date) "
@@ -1201,7 +1201,7 @@ int db_insert_message_block_physmessage(const char *block,
block_size, physmessage_id);
if (db_query(escaped_query) == DM_EQUERY) {
- dm_free(escaped_query);
+ g_free(escaped_query);
return DM_EQUERY;
}
@@ -1303,7 +1303,7 @@ int db_count_iplog(const char *lasttokeep, u64_t *affected_rows)
escaped_lasttokeep = dm_stresc(lasttokeep);
snprintf(query, DEF_QUERYSIZE,
"SELECT * FROM %spbsp WHERE since < '%s'", DBPFX, escaped_lasttokeep);
- dm_free(escaped_lasttokeep);
+ g_free(escaped_lasttokeep);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "error executing query");
@@ -2019,11 +2019,11 @@ static int mailbox_empty(u64_t mailbox_idnr)
/* delete every message in the mailbox */
for (i = 0; i < n; i++) {
if (db_delete_message(message_idnrs[i]) == -1) {
- dm_free(message_idnrs);
+ g_free(message_idnrs);
return DM_EQUERY;
}
}
- dm_free(message_idnrs);
+ g_free(message_idnrs);
return DM_SUCCESS;
}
@@ -2106,12 +2106,12 @@ int db_send_message_lines(void *fstream, u64_t message_idnr, long lines, int no_
/* always send all headers */
raw = get_crlf_encoded_dots(hdr);
ci_write((FILE *)fstream, "%s", raw);
- dm_free(hdr);
- dm_free(raw);
+ g_free(hdr);
+ g_free(raw);
/* send requested body lines */
raw = get_crlf_encoded_dots(buf);
- dm_free(buf);
+ g_free(buf);
s = g_string_new(raw);
if (lines > 0) {
@@ -2122,7 +2122,7 @@ int db_send_message_lines(void *fstream, u64_t message_idnr, long lines, int no_
}
s = g_string_truncate(s,pos);
}
- dm_free(raw);
+ g_free(raw);
if (pos > 0 || lines < 0)
ci_write((FILE *)fstream, "%s", s->str);
@@ -2365,7 +2365,7 @@ int db_deleted_purge(u64_t * affected_rows)
for (i = 0; i < *affected_rows; i++) {
if (db_delete_message(message_idnrs[i]) == -1) {
TRACE(TRACE_ERROR, "error deleting message");
- dm_free(message_idnrs);
+ g_free(message_idnrs);
return DM_EQUERY;
}
}
@@ -2572,7 +2572,7 @@ static int db_findmailbox_owner(const char *name, u64_t owner_idnr,
"SELECT mailbox_idnr FROM %smailboxes "
"WHERE %s AND owner_idnr=%llu",
DBPFX, mailbox_like, owner_idnr);
- dm_free(mailbox_like);
+ g_free(mailbox_like);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "could not select mailbox '%s'", name);
@@ -2731,7 +2731,7 @@ static int mailboxes_by_regex(u64_t user_idnr, int only_subscribed, const char *
if (*nr_mailboxes == 0) {
/* none exist, none matched */
- dm_free(tmp_mailboxes);
+ g_free(tmp_mailboxes);
return DM_SUCCESS;
}
@@ -3011,7 +3011,7 @@ int db_imap_split_mailbox(const char *mailbox, u64_t owner_idnr,
g_strfreev(chunks);
g_free(username);
- dm_free(cpy);
+ g_free(cpy);
return DM_SUCCESS;
@@ -3034,7 +3034,7 @@ egeneral:
g_list_free(*mailboxes);
g_strfreev(chunks);
g_free(username);
- dm_free(cpy);
+ g_free(cpy);
return ret;
}
@@ -3230,7 +3230,7 @@ int db_createmailbox(const char * name, u64_t owner_idnr, u64_t * mailbox_idnr)
" VALUES ('%s', %llu, 1, 1, 1, 1, 1, 1, %d)",DBPFX,
escaped_simple_name, owner_idnr, IMAPPERM_READWRITE);
- dm_free(escaped_simple_name);
+ g_free(escaped_simple_name);
if ((result = db_query(query)) == DM_EQUERY) {
TRACE(TRACE_ERROR, "could not create mailbox");
@@ -3359,7 +3359,7 @@ int db_listmailboxchildren(u64_t mailbox_idnr, u64_t user_idnr,
"SELECT mailbox_idnr FROM %smailboxes WHERE %s"
" AND owner_idnr = %llu",DBPFX,
mailbox_like, user_idnr);
- dm_free(mailbox_like);
+ g_free(mailbox_like);
}
else
snprintf(query, DEF_QUERYSIZE,
@@ -3700,7 +3700,7 @@ int db_getmailboxname(u64_t mailbox_idnr, u64_t user_idnr, char *name)
*name = '\0';
return DM_SUCCESS;
}
- tmp_name = dm_strdup(query_result);
+ tmp_name = g_strdup(query_result);
db_free_result();
tmp_fq_name = mailbox_add_namespace(tmp_name, owner_idnr, user_idnr);
@@ -3713,7 +3713,7 @@ int db_getmailboxname(u64_t mailbox_idnr, u64_t user_idnr, char *name)
tmp_fq_name_len = IMAP_MAX_MAILBOX_NAMELEN - 1;
strncpy(name, tmp_fq_name, tmp_fq_name_len);
name[tmp_fq_name_len] = '\0';
- dm_free(tmp_name);
+ g_free(tmp_name);
g_free(tmp_fq_name);
return DM_SUCCESS;
}
@@ -3732,7 +3732,7 @@ int db_setmailboxname(u64_t mailbox_idnr, const char *name)
"WHERE mailbox_idnr = %llu",
DBPFX, escaped_name, mailbox_idnr);
- dm_free(escaped_name);
+ g_free(escaped_name);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "could not set name");
@@ -4522,7 +4522,7 @@ int db_usermap_resolve(clientinfo_t *ci, const char *username, char *real_userna
"ORDER BY sock_allow, sock_deny",
DBPFX, escaped_username);
- dm_free(escaped_username);
+ g_free(escaped_username);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "could not select usermap");
@@ -4607,7 +4607,7 @@ int db_user_exists(const char *username, u64_t * user_idnr)
"SELECT user_idnr FROM %susers WHERE lower(userid) = lower('%s')",
DBPFX, escaped_username);
- dm_free(escaped_username);
+ g_free(escaped_username);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "could not select user information");
@@ -4645,7 +4645,7 @@ int db_user_create(const char *username, const char *password, const char *encty
/* first check to see if this user already exists */
snprintf(query, DEF_QUERYSIZE,
"SELECT * FROM %susers WHERE userid = '%s'",DBPFX, escaped_username);
- dm_free(escaped_username);
+ g_free(escaped_username);
if (db_query(query) == -1)
return DM_EQUERY;
@@ -4682,8 +4682,8 @@ int db_user_create(const char *username, const char *password, const char *encty
DBPFX,escaped_username,*user_idnr, escaped_password,clientid,
maxmail, enctype ? enctype : "", db_get_sql(SQL_CURRENT_TIMESTAMP));
}
- dm_free(escaped_username);
- dm_free(escaped_password);
+ g_free(escaped_username);
+ g_free(escaped_password);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "query for adding user failed");
@@ -4723,7 +4723,7 @@ int db_user_delete(const char * username)
escaped_username = dm_stresc(username);
snprintf(query, DEF_QUERYSIZE, "DELETE FROM %susers WHERE userid = '%s'",
DBPFX, escaped_username);
- dm_free(escaped_username);
+ g_free(escaped_username);
if (db_query(query) == -1) {
/* query failed */
@@ -4744,7 +4744,7 @@ int db_user_rename(u64_t user_idnr, const char *new_name)
escaped_new_name = dm_stresc(new_name);
snprintf(query, DEF_QUERYSIZE, "UPDATE %susers SET userid = '%s' WHERE user_idnr=%llu",
DBPFX, escaped_new_name, user_idnr);
- dm_free(escaped_new_name);
+ g_free(escaped_new_name);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "could not change name for user [%llu]", user_idnr);
@@ -4814,9 +4814,9 @@ int db_replycache_register(const char *to, const char *from, const char *handle)
DBPFX, escaped_to, escaped_from, escaped_handle);
if (db_query(query) < 0) {
- dm_free(escaped_to);
- dm_free(escaped_from);
- dm_free(escaped_handle);
+ g_free(escaped_to);
+ g_free(escaped_from);
+ g_free(escaped_handle);
return DM_EQUERY;
}
@@ -4837,9 +4837,9 @@ int db_replycache_register(const char *to, const char *from, const char *handle)
db_free_result();
- dm_free(escaped_to);
- dm_free(escaped_from);
- dm_free(escaped_handle);
+ g_free(escaped_to);
+ g_free(escaped_from);
+ g_free(escaped_handle);
if (db_query(query)== -1)
return DM_EQUERY;
@@ -4865,9 +4865,9 @@ int db_replycache_unregister(const char *to, const char *from, const char *handl
"AND handle = '%s' ",
DBPFX, escaped_to, escaped_from, escaped_handle);
- dm_free(escaped_to);
- dm_free(escaped_from);
- dm_free(escaped_handle);
+ g_free(escaped_to);
+ g_free(escaped_from);
+ g_free(escaped_handle);
if (db_query(query) < 0)
return DM_EQUERY;
@@ -4901,9 +4901,9 @@ int db_replycache_validate(const char *to, const char *from,
DBPFX, escaped_to, escaped_from, escaped_handle, tmp->str);
g_string_free(tmp, TRUE);
- dm_free(escaped_to);
- dm_free(escaped_from);
- dm_free(escaped_handle);
+ g_free(escaped_to);
+ g_free(escaped_from);
+ g_free(escaped_handle);
if (db_query(query) < 0)
return DM_EQUERY;
diff --git a/dbmail-imapsession.c b/dbmail-imapsession.c
index e59db24b..cfc97ee6 100644
--- a/dbmail-imapsession.c
+++ b/dbmail-imapsession.c
@@ -647,7 +647,7 @@ GTree * dbmail_imap_session_get_msginfo(struct ImapSession *self, GTree *ids)
"ORDER BY message_idnr ASC",to_char_str,DBPFX,DBPFX,
*lo, *hi, ud->mailbox.uid,
MESSAGE_STATUS_NEW, MESSAGE_STATUS_SEEN);
- dm_free(to_char_str);
+ g_free(to_char_str);
if (db_query(query) == -1) {
TRACE(TRACE_ERROR, "could not select message");
@@ -1482,9 +1482,9 @@ int dbmail_imap_session_prompt(struct ImapSession * self, char * prompt, char *
fflush(self->ci->tx);
if ( (dbmail_imap_session_readln(self, buf) <= 0) ) {
- dm_free(buf);
- dm_free(prompt64);
- dm_free(promptcat);
+ g_free(buf);
+ g_free(prompt64);
+ g_free(promptcat);
return -1;
}
@@ -1500,9 +1500,9 @@ int dbmail_imap_session_prompt(struct ImapSession * self, char * prompt, char *
return -1;
}
- dm_free(buf);
- dm_free(prompt64);
- dm_free(promptcat);
+ g_free(buf);
+ g_free(prompt64);
+ g_free(promptcat);
return 0;
}
@@ -2042,7 +2042,7 @@ static void free_args(struct ImapSession *self)
{
int i;
for (i = 0; i < MAX_ARGS && self->args[i]; i++)
- dm_free(self->args[i]);
+ g_free(self->args[i]);
self->args_idx = 0;
}
diff --git a/dbmail-message.c b/dbmail-message.c
index 24b0453b..0f291c34 100644
--- a/dbmail-message.c
+++ b/dbmail-message.c
@@ -33,8 +33,6 @@ extern db_param_t _db_params;
#define MESSAGE_MAX_LINE_SIZE 1024
-static int dm_errno = 0;
-
#define DBMAIL_TEMPMBOX "INBOX"
#define THIS_MODULE "message"
@@ -211,7 +209,7 @@ void dbmail_message_free(struct DbmailMessage *self)
g_tree_destroy(self->header_value);
self->id=0;
- dm_free(self);
+ g_free(self);
}
@@ -985,8 +983,6 @@ static gboolean _header_cache(const char UNUSED *key, const char *header, gpoint
unsigned i;
gboolean isaddr = 0;
- dm_errno = 0;
-
/* skip headernames with spaces like From_ */
if (strchr(header, ' '))
return FALSE;
diff --git a/dbmail-user.c b/dbmail-user.c
index dbeeda04..bf91c4a0 100644
--- a/dbmail-user.c
+++ b/dbmail-user.c
@@ -207,7 +207,7 @@ int mkpassword(const char * const user, const char * const passwd,
md5str = dm_md5((unsigned char *)passwd);
null_strncpy(pw, md5str, 49);
*enctype = "md5sum";
- dm_free(md5str);
+ g_free(md5str);
break;
case MD5_DIGEST_RAW:
null_strncpy(pw, passwd, 49);
@@ -218,7 +218,7 @@ int mkpassword(const char * const user, const char * const passwd,
md5str = dm_md5_base64((unsigned char *)passwd);
null_strncpy(pw, md5str, 49);
*enctype = "md5base64";
- dm_free(md5str);
+ g_free(md5str);
}
break;
case MD5_BASE64_RAW:
@@ -259,7 +259,7 @@ int mkpassword(const char * const user, const char * const passwd,
}
/* Pass this out of the function. */
- *password = dm_strdup(pw);
+ *password = g_strdup(pw);
return result;
}
diff --git a/debug.h b/debug.h
index 4dfbe5ff..706e236f 100644
--- a/debug.h
+++ b/debug.h
@@ -27,11 +27,6 @@
#include "dbmail.h"
-#ifdef USE_GC
-#define GC_DEBUG
-#include <gc/gc.h>
-#endif
-
typedef enum {
TRACE_FATAL = 0,
TRACE_ERROR,
@@ -55,23 +50,6 @@ typedef enum {
#endif
-#ifdef USE_GC
-
-#define dm_malloc(s) GC_MALLOC(s)
-#define dm_free(p) GC_FREE(p)
-#define dm_calloc(n,p) GC_MALLOC((n) * (p))
-#define dm_realloc(n,p) GC_REALLOC((n),(p))
-
-#else
-
-#define dm_malloc(s) g_malloc(s)
-#define dm_free(p) g_free(p)
-#define dm_calloc(n,p) g_malloc0(n,p)
-#define dm_realloc(n,p) g_realloc(n,p)
-
-#endif
-
-
#define TRACE(level, fmt...) trace(level, THIS_MODULE, __FILE__, __func__, __LINE__, fmt)
void trace(trace_t level, const char * module,
const char * file, const char * function,
@@ -79,6 +57,4 @@ void trace(trace_t level, const char * module,
void configure_debug(trace_t trace_syslog, trace_t trace_stderr);
-#define dm_strdup(s) g_strdup(s)
-
#endif
diff --git a/dm_base64.c b/dm_base64.c
index a8f5dd69..49791ec3 100644
--- a/dm_base64.c
+++ b/dm_base64.c
@@ -145,7 +145,7 @@ char **base64_decodev(char *str)
/* Copy each nul terminated string to the array. */
for (i = j = n = 0; i <= decodelen; i++) {
if (decoded[i] == '\0') {
- ret[n] = dm_strdup(decoded + j);
+ ret[n] = g_strdup(decoded + j);
j = i + 1;
n++;
}
diff --git a/dsn.c b/dsn.c
index b1c124ad..c70e1b06 100644
--- a/dsn.c
+++ b/dsn.c
@@ -200,12 +200,12 @@ int dsnuser_init(deliver_to_user_t * dsnuser)
dsnuser->mailbox = NULL;
dsnuser->source = BOX_NONE;
- dsnuser->userids = (struct dm_list *) dm_malloc(sizeof(struct dm_list));
+ dsnuser->userids = g_new0(struct dm_list, 1);
if (dsnuser->userids == NULL)
return -1;
- dsnuser->forwards = (struct dm_list *) dm_malloc(sizeof(struct dm_list));
+ dsnuser->forwards = g_new0(struct dm_list, 1);
if (dsnuser->forwards == NULL) {
- dm_free(dsnuser->userids);
+ g_free(dsnuser->userids);
return -1;
}
@@ -290,7 +290,7 @@ static int address_has_alias_mailbox(deliver_to_user_t *delivery)
delivery->forwards, 0);
TRACE(TRACE_DEBUG, "user [%s] found total of [%d] aliases", newaddress, alias_count);
- dm_free(newaddress);
+ g_free(newaddress);
if (alias_count > 0)
return 1;
@@ -317,26 +317,26 @@ static int address_is_username_mailbox(deliver_to_user_t *delivery)
if (user_exists < 0) {
/* An error occurred. */
TRACE(TRACE_ERROR, "error checking user [%s]", newaddress);
- dm_free(newaddress);
+ g_free(newaddress);
return -1;
}
if (user_exists == 0) {
/* User does not exist. */
TRACE(TRACE_INFO, "username not found [%s]", newaddress);
- dm_free(newaddress);
+ g_free(newaddress);
return 0;
}
if (dm_list_nodeadd(delivery->userids, &userid, sizeof(u64_t)) == 0) {
TRACE(TRACE_ERROR, "out of memory");
- dm_free(newaddress);
+ g_free(newaddress);
return -1;
}
TRACE(TRACE_DEBUG, "added user [%s] id [%llu] to delivery list", newaddress, userid);
- dm_free(newaddress);
+ g_free(newaddress);
return 1;
}
@@ -442,7 +442,7 @@ static int address_is_domain_catchall(deliver_to_user_t *delivery)
static int address_is_userpart_catchall(deliver_to_user_t *delivery)
{
- char *userpart = dm_strdup(delivery->address);
+ char *userpart = g_strdup(delivery->address);
char *userpartcut;
int userpart_count;
diff --git a/imap4.h b/imap4.h
index 5bc3c4cb..a84c3dee 100644
--- a/imap4.h
+++ b/imap4.h
@@ -37,7 +37,7 @@
/* max number of retries when synchronizing mailbox with dbase */
#define MAX_RETRIES 20
-#define null_free(p) { dm_free(p); p = NULL; }
+#define null_free(p) { g_free(p); p = NULL; }
diff --git a/imapcommands.c b/imapcommands.c
index 7f3836fb..70ad9978 100644
--- a/imapcommands.c
+++ b/imapcommands.c
@@ -385,12 +385,12 @@ int _ic_delete(struct ImapSession *self)
result = db_isselectable(mboxid);
if (result == 0) {
dbmail_imap_session_printf(self, "%s NO mailbox is non-selectable\r\n", self->tag);
- dm_free(children);
+ g_free(children);
return 1;
}
if (result == -1) {
dbmail_imap_session_printf(self, "* BYE internal dbase error\r\n");
- dm_free(children);
+ g_free(children);
return -1; /* fatal */
}
@@ -401,7 +401,7 @@ int _ic_delete(struct ImapSession *self)
if (result == -1) {
dbmail_imap_session_printf(self, "* BYE internal dbase error\r\n");
- dm_free(children);
+ g_free(children);
return -1; /* fatal */
}
@@ -411,7 +411,7 @@ int _ic_delete(struct ImapSession *self)
/* ok done */
dbmail_imap_session_printf(self, "%s OK DELETE completed\r\n", self->tag);
- dm_free(children);
+ g_free(children);
return 0;
}
@@ -554,7 +554,7 @@ int _ic_rename(struct ImapSession *self)
result = db_getmailboxname(children[i], ud->userid, name);
if (result == -1) {
dbmail_imap_session_printf(self, "* BYE internal dbase error\r\n");
- dm_free(children);
+ g_free(children);
return -1;
}
@@ -562,7 +562,7 @@ int _ic_rename(struct ImapSession *self)
/* strange error, let's say its fatal */
TRACE(TRACE_ERROR, "mailbox names appear to be corrupted");
dbmail_imap_session_printf(self, "* BYE internal error regarding mailbox names\r\n");
- dm_free(children);
+ g_free(children);
return -1;
}
@@ -571,13 +571,13 @@ int _ic_rename(struct ImapSession *self)
result = db_setmailboxname(children[i], newname);
if (result == -1) {
dbmail_imap_session_printf(self, "* BYE internal dbase error\r\n");
- dm_free(children);
+ g_free(children);
return -1;
}
}
if (children)
- dm_free(children);
+ g_free(children);
/* now replace name */
result = db_setmailboxname(mboxid, self->args[1]);
@@ -709,7 +709,7 @@ int _ic_list(struct ImapSession *self)
result = db_findmailbox_by_regex(ud->userid, pattern, &children, &nchildren, list_is_lsub);
if (result == -1) {
dbmail_imap_session_printf(self, "* BYE internal dbase error\r\n");
- dm_free(children);
+ g_free(children);
g_free(pattern);
return -1;
}
@@ -717,7 +717,7 @@ int _ic_list(struct ImapSession *self)
if (result == 1) {
dbmail_imap_session_printf(self, "%s BAD invalid pattern specified\r\n",
self->tag);
- dm_free(children);
+ g_free(children);
g_free(pattern);
return 1;
}
@@ -750,10 +750,10 @@ int _ic_list(struct ImapSession *self)
if (children)
- dm_free(children);
+ g_free(children);
g_free(pattern);
- dm_free(mb);
+ g_free(mb);
dbmail_imap_session_printf(self, "%s OK %s completed\r\n", self->tag, thisname);
return 0;
@@ -1233,7 +1233,7 @@ int _ic_expunge(struct ImapSession *self)
}
if (msgids)
- dm_free(msgids);
+ g_free(msgids);
msgids = NULL;
dbmail_imap_session_printf(self, "%s OK EXPUNGE completed\r\n", self->tag);
@@ -2025,7 +2025,7 @@ int _ic_getacl(struct ImapSession *self)
}
dbmail_imap_session_printf(self, "* ACL \"%s\" %s\r\n", self->args[self->args_idx], acl_string);
- dm_free(acl_string);
+ g_free(acl_string);
dbmail_imap_session_printf(self, "%s OK GETACL completed\r\n", self->tag);
return 0;
}
@@ -2072,7 +2072,7 @@ int _ic_listrights(struct ImapSession *self)
dbmail_imap_session_printf(self, "* LISTRIGHTS \"%s\" %s %s\r\n",
self->args[self->args_idx], self->args[self->args_idx+1], listrights_string);
dbmail_imap_session_printf(self, "%s OK LISTRIGHTS completed\r\n", self->tag);
- dm_free(listrights_string);
+ g_free(listrights_string);
return 0;
}
@@ -2105,7 +2105,7 @@ int _ic_myrights(struct ImapSession *self)
dbmail_imap_session_printf(self, "* MYRIGHTS \"%s\" %s\r\n", self->args[self->args_idx],
myrights_string);
- dm_free(myrights_string);
+ g_free(myrights_string);
dbmail_imap_session_printf(self, "%s OK MYRIGHTS complete\r\n", self->tag);
return 0;
}
diff --git a/lmtp.c b/lmtp.c
index 37b729a5..68d67b7d 100644
--- a/lmtp.c
+++ b/lmtp.c
@@ -125,7 +125,7 @@ int lmtp_handle_connection(clientinfo_t * ci)
gethostname(myhostname, 64);
myhostname[63] = 0; /* make sure string is terminated */
- buffer = (char *) dm_malloc(INCOMING_BUFFER_SIZE * sizeof(char));
+ buffer = g_new0(char, INCOMING_BUFFER_SIZE);
if (!buffer) {
TRACE(TRACE_MESSAGE, "Could not allocate buffer");
@@ -138,7 +138,7 @@ int lmtp_handle_connection(clientinfo_t * ci)
fflush(ci->tx);
} else {
TRACE(TRACE_MESSAGE, "TX stream is null!");
- dm_free(buffer);
+ g_free(buffer);
return 0;
}
@@ -166,7 +166,7 @@ int lmtp_handle_connection(clientinfo_t * ci)
if (alarm_occured) {
alarm_occured = 0;
client_close();
- dm_free(buffer);
+ g_free(buffer);
return 0;
}
} while (ferror(ci->rx) && errno == EINTR);
@@ -192,7 +192,7 @@ int lmtp_handle_connection(clientinfo_t * ci)
/* memory cleanup */
lmtp_reset(&session);
- dm_free(buffer);
+ g_free(buffer);
buffer = NULL;
/* reset timers */
@@ -460,7 +460,7 @@ int lmtp(void *stream, void *instream, char *buffer,
child_reg_connected_user(tmpaddr);
}
if (tmpaddr != NULL)
- dm_free(tmpaddr);
+ g_free(tmpaddr);
}
return 1;
}
diff --git a/main.c b/main.c
index 413758aa..75d0e520 100644
--- a/main.c
+++ b/main.c
@@ -153,14 +153,14 @@ int main(int argc, char *argv[])
TRACE(TRACE_INFO, "using RETURN_PATH for bounces");
/* Add argument onto the returnpath list. */
- returnpath = dm_strdup(optarg);
+ returnpath = g_strdup(optarg);
break;
case 'u':
TRACE(TRACE_INFO, "using SPECIAL_DELIVERY to usernames");
dsnuser_init(&dsnuser);
- dsnuser.address = dm_strdup(optarg);
+ dsnuser.address = g_strdup(optarg);
dsnuser.source = BOX_COMMANDLINE;
/* Add argument onto the users list. */
@@ -176,7 +176,7 @@ int main(int argc, char *argv[])
TRACE(TRACE_INFO, "using SPECIAL_DELIVERY to email addresses");
dsnuser_init(&dsnuser);
- dsnuser.address = dm_strdup(optarg);
+ dsnuser.address = g_strdup(optarg);
dsnuser.source = BOX_COMMANDLINE;
/* Add argument onto the users list. */
@@ -303,7 +303,7 @@ int main(int argc, char *argv[])
userlist = g_list_first(userlist);
while (1) {
dsnuser_init(&dsnuser);
- dsnuser.address = dm_strdup((char *) userlist->data);
+ dsnuser.address = g_strdup((char *) userlist->data);
if (! dm_list_nodeadd(&dsnusers, &dsnuser, sizeof(deliver_to_user_t))) {
TRACE(TRACE_ERROR,"out of memory in dm_list_nodeadd");
@@ -321,7 +321,7 @@ int main(int argc, char *argv[])
TRACE(TRACE_DEBUG, "setting mailbox for all deliveries to [%s]", deliver_to_mailbox);
/* Loop through the dsnusers list, setting the destination mailbox. */
for (tmp = dm_list_getstart(&dsnusers); tmp != NULL; tmp = tmp->nextnode) {
- ((deliver_to_user_t *)tmp->data)->mailbox = dm_strdup(deliver_to_mailbox);
+ ((deliver_to_user_t *)tmp->data)->mailbox = g_strdup(deliver_to_mailbox);
if (brute_force) {
((deliver_to_user_t *)tmp->data)->source = BOX_BRUTEFORCE;
} else {
@@ -383,7 +383,7 @@ int main(int argc, char *argv[])
dbmail_message_free(msg);
dsnuser_free_list(&dsnusers);
dm_list_free(&users.start);
- dm_free(returnpath);
+ g_free(returnpath);
g_list_foreach(userlist, (GFunc)g_free, NULL);
g_list_free(userlist);
diff --git a/memblock.c b/memblock.c
index 6ea2d723..18e9a44c 100644
--- a/memblock.c
+++ b/memblock.c
@@ -52,19 +52,17 @@ int __m_blkadd(MEM * m);
*/
MEM *mopen()
{
- MEM *mp = (MEM *) dm_malloc(sizeof(MEM));
+ MEM *mp = g_new0(MEM, 1);
if (!mp) {
__m_errno = M_NOMEM;
return NULL;
}
- memset(mp, 0, sizeof(*mp));
-
- mp->firstblk = (memblock_t *) dm_malloc(sizeof(memblock_t));
+ mp->firstblk = g_new0(memblock_t, 1);
if (!mp->firstblk) {
__m_errno = M_NOMEM;
- dm_free(mp);
+ g_free(mp);
return NULL;
}
@@ -99,11 +97,11 @@ void mclose(MEM ** m)
tmp = (*m)->firstblk;
while (tmp) {
next = tmp->nextblk; /* save address */
- dm_free(tmp);
+ g_free(tmp);
tmp = next;
}
- dm_free(*m);
+ g_free(*m);
*m = NULL;
return;
@@ -404,7 +402,7 @@ void mreset(MEM * m)
while (tmp) {
next = tmp->nextblk; /* save address */
- dm_free(tmp);
+ g_free(tmp);
tmp = next;
m->nblocks--;
}
@@ -432,7 +430,7 @@ int __m_blkadd(MEM * m)
return 0;
}
- newblk = (memblock_t *) dm_malloc(sizeof(memblock_t));
+ newblk = g_new0(memblock_t, 1);
if (!newblk) {
__m_errno = M_NOMEM;
return 0;
diff --git a/misc.c b/misc.c
index 06cb2edc..d35275c8 100644
--- a/misc.c
+++ b/misc.c
@@ -109,7 +109,7 @@ void create_unique_id(char *target, u64_t message_idnr)
md5_str = dm_md5((unsigned char *)target);
snprintf(target, UID_SIZE, "%s", md5_str);
TRACE(TRACE_DEBUG, "created: %s", target);
- dm_free(md5_str);
+ g_free(md5_str);
g_free(a_message_idnr);
g_free(a_rand);
}
@@ -154,7 +154,7 @@ char *mailbox_add_namespace(const char *mailbox_name, u64_t owner_idnr,
else
g_string_printf(t, "%s%s%s%s%s", NAMESPACE_USER, MAILBOX_SEPARATOR, owner,
MAILBOX_SEPARATOR, mailbox_name);
- dm_free(owner);
+ g_free(owner);
fq = t->str;
g_string_free(t,FALSE);
@@ -289,7 +289,7 @@ int read_from_stream(FILE * instream, char **m_buf, int maxlen)
/* Allocate a zero length string on length 0. */
if (maxlen == 0) {
- *m_buf = dm_strdup("");
+ *m_buf = g_strdup("");
return 0;
}
@@ -362,7 +362,7 @@ int find_bounded(const char * const value, char left, char right,
tmpleft++;
tmplen = tmpright - tmpleft;
- *retchar = dm_malloc(sizeof(char) * (tmplen + 1));
+ *retchar = g_new0(char, tmplen + 1);
if (*retchar == NULL) {
*retchar = NULL;
*retsize = 0;
diff --git a/modules/authldap.c b/modules/authldap.c
index 095342da..f8963973 100644
--- a/modules/authldap.c
+++ b/modules/authldap.c
@@ -35,7 +35,6 @@
extern char *configFile;
static LDAP *_ldap_conn = NULL;
-LDAPMod **_ldap_mod;
LDAPMessage *_ldap_res;
LDAPMessage *_ldap_msg;
int _ldap_err;
@@ -717,7 +716,7 @@ int auth_check_userid(u64_t user_idnr)
TRACE(TRACE_DEBUG, "didn't find user_idnr [%llu]", user_idnr);
}
- dm_free(returnid);
+ g_free(returnid);
return ret;
}
@@ -927,16 +926,13 @@ int auth_adduser(const char *username, const char *password,
const char *enctype UNUSED, u64_t clientid,
u64_t maxmail, u64_t * user_idnr)
{
- int i, j, result;
- /*int ret; unused variable */
- int NUM_MODS = 9;
+ int i = 0, result;
GString *nid = g_string_new("");
GString *cid = g_string_new("");
GString *maxm = g_string_new("");
u64_t newidnr = dm_ldap_get_freeid(_ldap_cfg.field_nid);
-
g_string_printf(nid,"%llu", newidnr);
g_string_printf(cid,"%llu",clientid);
g_string_printf(maxm,"%llu",maxmail);
@@ -950,80 +946,64 @@ int auth_adduser(const char *username, const char *password,
field_t mail_type = "mail";
field_t obj_type = "objectClass";
-
+
GString *t=g_string_new("");
assert(user_idnr != NULL);
*user_idnr = 0;
- /* Construct the array of LDAPMod structures representing the attributes */
- if (! (_ldap_mod = (LDAPMod **) dm_malloc((NUM_MODS + 1) * sizeof(LDAPMod *)))) {
- TRACE(TRACE_ERROR, "Cannot allocate memory for mods array");
- return -1;
- }
-
- for (i = 0; i < NUM_MODS; i++) {
- if (! (_ldap_mod[i] = (LDAPMod *) dm_malloc(sizeof(LDAPMod)))) {
- TRACE(TRACE_ERROR, "Cannot allocate memory for mods element %d", i);
- for (j = 0; j < (i - 1); j++)
- dm_free(_ldap_mod[j]);
- dm_free(_ldap_mod);
- return -1;
- }
- }
-
g_string_printf(t,"%s=%s,%s", _ldap_cfg.cn_string, username, _ldap_cfg.base_dn);
_ldap_dn=g_strdup(t->str);
g_string_free(t,TRUE);
TRACE(TRACE_DEBUG, "Adding user with DN of [%s]", _ldap_dn);
- i = 0;
- _ldap_mod[i]->mod_op = LDAP_MOD_ADD;
- _ldap_mod[i]->mod_type = obj_type;
- _ldap_mod[i]->mod_values = obj_values;
+ LDAPMod *mods[10], mod_obj_type, mod_field_passwd, mod_mail_type,
+ mod_field_uid, mod_field_cid, mod_field_maxmail, mod_field_nid;
+
+
+ mod_obj_type.mod_op = LDAP_MOD_ADD;
+ mod_obj_type.mod_type = obj_type;
+ mod_obj_type.mod_values = obj_values;
+ mods[i++] = &mod_obj_type;
if (strlen(_ldap_cfg.field_passwd) > 0) {
- i++;
- _ldap_mod[i]->mod_op = LDAP_MOD_ADD;
- _ldap_mod[i]->mod_type = _ldap_cfg.field_passwd;
- _ldap_mod[i]->mod_values = pw_values;
+ mod_field_passwd.mod_op = LDAP_MOD_ADD;
+ mod_field_passwd.mod_type = _ldap_cfg.field_passwd;
+ mod_field_passwd.mod_values = pw_values;
+ mods[i++] = &mod_field_passwd;
}
- i++;
- _ldap_mod[i]->mod_op = LDAP_MOD_ADD;
- _ldap_mod[i]->mod_type = mail_type;
- _ldap_mod[i]->mod_values = uid_values;
+ mod_mail_type.mod_op = LDAP_MOD_ADD;
+ mod_mail_type.mod_type = mail_type;
+ mod_mail_type.mod_values = uid_values;
+ mods[i++] = &mod_mail_type;
- i++;
- _ldap_mod[i]->mod_op = LDAP_MOD_ADD;
- _ldap_mod[i]->mod_type = _ldap_cfg.field_uid;
- _ldap_mod[i]->mod_values = uid_values;
+ mod_field_uid.mod_op = LDAP_MOD_ADD;
+ mod_field_uid.mod_type = _ldap_cfg.field_uid;
+ mod_field_uid.mod_values = uid_values;
+ mods[i++] = &mod_field_uid;
- i++;
- _ldap_mod[i]->mod_op = LDAP_MOD_ADD;
- _ldap_mod[i]->mod_type = _ldap_cfg.field_cid;
- _ldap_mod[i]->mod_values = cid_values;
+ mod_field_cid.mod_op = LDAP_MOD_ADD;
+ mod_field_cid.mod_type = _ldap_cfg.field_cid;
+ mod_field_cid.mod_values = cid_values;
+ mods[i++] = &mod_field_cid;
- i++;
- _ldap_mod[i]->mod_op = LDAP_MOD_ADD;
- _ldap_mod[i]->mod_type = _ldap_cfg.field_maxmail;
- _ldap_mod[i]->mod_values = max_values;
+ mod_field_maxmail.mod_op = LDAP_MOD_ADD;
+ mod_field_maxmail.mod_type = _ldap_cfg.field_maxmail;
+ mod_field_maxmail.mod_values = max_values;
+ mods[i++] = &mod_field_maxmail;
- i++;
- _ldap_mod[i]->mod_op = LDAP_MOD_ADD;
- _ldap_mod[i]->mod_type = _ldap_cfg.field_nid;
- _ldap_mod[i]->mod_values = nid_values;
+ mod_field_nid.mod_op = LDAP_MOD_ADD;
+ mod_field_nid.mod_type = _ldap_cfg.field_nid;
+ mod_field_nid.mod_values = nid_values;
+ mods[i++] = &mod_field_nid;
- i++;
- _ldap_mod[i] = NULL;
+ mods[i++] = NULL;
- _ldap_err = ldap_add_s(_ldap_conn, _ldap_dn, _ldap_mod);
+ _ldap_err = ldap_add_s(_ldap_conn, _ldap_dn, mods);
g_strfreev(obj_values);
- for (i = 0; i < NUM_MODS; i++)
- dm_free(_ldap_mod[i]);
- dm_free(_ldap_mod);
ldap_memfree(_ldap_dn);
if (_ldap_err) {
@@ -1478,7 +1458,7 @@ static int forward_exists(const char *alias, const char *deliver_to)
g_free(objectfilter);
- dm_free(dn);
+ g_free(dn);
g_string_free(t,TRUE);
g_list_foreach(l,(GFunc)g_free,NULL);
diff --git a/modules/authsql.c b/modules/authsql.c
index 0c07d391..6a61967c 100644
--- a/modules/authsql.c
+++ b/modules/authsql.c
@@ -218,7 +218,7 @@ int auth_check_user_ext(const char *username, struct dm_list *userids, struct dm
TRACE(TRACE_DEBUG, "checking user [%s] in alias table", username);
- if (!(escaped_username = (char *) dm_malloc(strlen(username) * 2 + 1))) {
+ if (!(escaped_username = g_new0(char, strlen(username) * 2 + 1))) {
TRACE(TRACE_ERROR, "out of memory allocating escaped username");
return -1;
}
@@ -231,7 +231,7 @@ int auth_check_user_ext(const char *username, struct dm_list *userids, struct dm
"AND lower(alias) <> lower(deliver_to)",
DBPFX, escaped_username);
- dm_free(escaped_username);
+ g_free(escaped_username);
TRACE(TRACE_DEBUG, "checks [%d]", checks);
@@ -431,7 +431,7 @@ int auth_validate(clientinfo_t *ci, char *username, char *password, u64_t * user
/* redundant statement: query_result = db_get_result(0, 1); */
md5str = dm_md5((unsigned char *)password);
is_validated = (strncmp(md5str, query_result, 32) == 0) ? 1 : 0;
- dm_free(md5str);
+ g_free(md5str);
} else {
TRACE(TRACE_DEBUG, "validating using MD5 hash comparison");
strncpy(salt, query_result, 12);
@@ -446,13 +446,13 @@ int auth_validate(clientinfo_t *ci, char *username, char *password, u64_t * user
query_result = db_get_result(0, 1);
md5str = dm_md5((unsigned char *)password);
is_validated = (strncmp(md5str, query_result, 32) == 0) ? 1 : 0;
- dm_free(md5str);
+ g_free(md5str);
} else if (strcasecmp(query_result, "md5base64") == 0) {
TRACE(TRACE_DEBUG, "validating using MD5 digest base64 comparison");
query_result = db_get_result(0, 1);
md5str = dm_md5_base64((unsigned char *)password);
is_validated = (strncmp(md5str, query_result, 32) == 0) ? 1 : 0;
- dm_free(md5str);
+ g_free(md5str);
}
if (is_validated) {
@@ -510,8 +510,8 @@ u64_t auth_md5_validate(clientinfo_t *ci UNUSED, char *username,
user_idnr =
(query_result) ? strtoull(query_result, NULL, 10) : 0;
db_free_result();
- dm_free(md5_apop_we);
- dm_free(checkstring);
+ g_free(md5_apop_we);
+ g_free(checkstring);
db_user_log_login(user_idnr);
return user_idnr;
@@ -520,8 +520,8 @@ u64_t auth_md5_validate(clientinfo_t *ci UNUSED, char *username,
TRACE(TRACE_MESSAGE, "user [%s] could not be validated", username);
db_free_result();
- dm_free(md5_apop_we);
- dm_free(checkstring);
+ g_free(md5_apop_we);
+ g_free(checkstring);
return 0;
}
@@ -548,8 +548,7 @@ char *auth_get_userid(u64_t user_idnr)
query_result = db_get_result(0, 0);
if (query_result) {
TRACE(TRACE_DEBUG, "query_result = %s", query_result);
- if (!(returnid =
- (char *) dm_malloc(strlen(query_result) + 1))) {
+ if (!(returnid = g_new0(char, strlen(query_result) + 1))) {
TRACE(TRACE_ERROR, "out of memory");
db_free_result();
return NULL;
@@ -603,7 +602,7 @@ int auth_get_users_from_clientid(u64_t client_id, u64_t ** user_ids,
return -1;
}
*num_users = db_num_rows();
- *user_ids = (u64_t *) dm_malloc(*num_users * sizeof(u64_t));
+ *user_ids = g_new0(u64_t, *num_users);
if (*user_ids == NULL) {
TRACE(TRACE_ERROR, "error allocating memory, probably out of memory");
db_free_result();
@@ -621,7 +620,7 @@ int auth_addalias(u64_t user_idnr, const char *alias, u64_t clientid)
{
char *escaped_alias;
- if (!(escaped_alias = (char *) dm_malloc(strlen(alias) * 2 + 1))) {
+ if (!(escaped_alias = g_new0(char, strlen(alias) * 2 + 1))) {
TRACE(TRACE_ERROR, "out of memory allocating escaped alias");
return -1;
}
@@ -637,14 +636,14 @@ int auth_addalias(u64_t user_idnr, const char *alias, u64_t clientid)
if (__auth_query(__auth_query_data) == -1) {
/* query failed */
TRACE(TRACE_ERROR, "query for searching alias failed");
- dm_free(escaped_alias);
+ g_free(escaped_alias);
return -1;
}
if (db_num_rows() > 0) {
TRACE(TRACE_INFO, "alias [%s] for user [%llu] already exists", escaped_alias, user_idnr);
- dm_free(escaped_alias);
+ g_free(escaped_alias);
db_free_result();
return 1;
}
@@ -654,7 +653,7 @@ int auth_addalias(u64_t user_idnr, const char *alias, u64_t clientid)
"INSERT INTO %saliases (alias,deliver_to,client_idnr) "
"VALUES ('%s',%llu,%llu)",DBPFX, escaped_alias, user_idnr,
clientid);
- dm_free(escaped_alias);
+ g_free(escaped_alias);
if (db_query(__auth_query_data) == -1) {
/* query failed */
@@ -670,12 +669,12 @@ int auth_addalias_ext(const char *alias,
char *escaped_alias;
char *escaped_deliver_to;
- if (!(escaped_alias = (char *) dm_malloc(strlen(alias) * 2 + 1))) {
+ if (!(escaped_alias = g_new0(char, strlen(alias) * 2 + 1))) {
TRACE(TRACE_ERROR, "out of memory allocating escaped alias");
return -1;
}
- if (!(escaped_deliver_to = (char *) dm_malloc(strlen(deliver_to) * 2 + 1))) {
+ if (!(escaped_deliver_to = g_new0(char, strlen(deliver_to) * 2 + 1))) {
TRACE(TRACE_ERROR, "out of memory allocating escaped deliver_to");
return -1;
}
@@ -703,16 +702,16 @@ int auth_addalias_ext(const char *alias,
if (__auth_query(__auth_query_data) == -1) {
/* query failed */
TRACE(TRACE_ERROR, "query for searching alias failed");
- dm_free(escaped_alias);
- dm_free(escaped_deliver_to);
+ g_free(escaped_alias);
+ g_free(escaped_deliver_to);
return -1;
}
if (db_num_rows() > 0) {
TRACE(TRACE_INFO, "alias [%s] --> [%s] already exists", alias, deliver_to);
- dm_free(escaped_alias);
- dm_free(escaped_deliver_to);
+ g_free(escaped_alias);
+ g_free(escaped_deliver_to);
db_free_result();
return 1;
}
@@ -721,8 +720,8 @@ int auth_addalias_ext(const char *alias,
snprintf(__auth_query_data, DEF_QUERYSIZE,
"INSERT INTO %saliases (alias,deliver_to,client_idnr) "
"VALUES ('%s','%s',%llu)",DBPFX, escaped_alias, escaped_deliver_to, clientid);
- dm_free(escaped_alias);
- dm_free(escaped_deliver_to);
+ g_free(escaped_alias);
+ g_free(escaped_deliver_to);
if (__auth_query(__auth_query_data) == -1) {
/* query failed */
@@ -736,7 +735,7 @@ int auth_removealias(u64_t user_idnr, const char *alias)
{
char *escaped_alias;
- if (!(escaped_alias = (char *) dm_malloc(strlen(alias) * 2 + 1))) {
+ if (!(escaped_alias = g_new0(char, strlen(alias) * 2 + 1))) {
TRACE(TRACE_ERROR, "out of memory allocating escaped alias");
return -1;
}
@@ -746,7 +745,7 @@ int auth_removealias(u64_t user_idnr, const char *alias)
snprintf(__auth_query_data, DEF_QUERYSIZE,
"DELETE FROM %saliases WHERE deliver_to=%llu "
"AND lower(alias) = lower('%s')",DBPFX, user_idnr, escaped_alias);
- dm_free(escaped_alias);
+ g_free(escaped_alias);
if (__auth_query(__auth_query_data) == -1) {
/* query failed */
@@ -761,12 +760,12 @@ int auth_removealias_ext(const char *alias, const char *deliver_to)
char *escaped_alias;
char *escaped_deliver_to;
- if (!(escaped_alias = (char *) dm_malloc(strlen(alias) * 2 + 1))) {
+ if (!(escaped_alias = g_new0(char, strlen(alias) * 2 + 1))) {
TRACE(TRACE_ERROR, "out of memory allocating escaped alias");
return -1;
}
- if (!(escaped_deliver_to = (char *) dm_malloc(strlen(deliver_to) * 2 + 1))) {
+ if (!(escaped_deliver_to = g_new0(char, strlen(deliver_to) * 2 + 1))) {
TRACE(TRACE_ERROR, "out of memory allocating escaped deliver_to");
return -1;
}
@@ -777,8 +776,8 @@ int auth_removealias_ext(const char *alias, const char *deliver_to)
snprintf(__auth_query_data, DEF_QUERYSIZE,
"DELETE FROM %saliases WHERE lower(deliver_to) = lower('%s') "
"AND lower(alias) = lower('%s')",DBPFX, deliver_to, alias);
- dm_free(escaped_alias);
- dm_free(escaped_deliver_to);
+ g_free(escaped_alias);
+ g_free(escaped_deliver_to);
if (db_query(__auth_query_data) == -1) {
/* query failed */
diff --git a/modules/sortsieve.c b/modules/sortsieve.c
index 50adf706..550757e5 100644
--- a/modules/sortsieve.c
+++ b/modules/sortsieve.c
@@ -149,7 +149,7 @@ int sort_vacation(sieve2_context_t *s, void *my)
}
if (md5_handle)
- dm_free(md5_handle);
+ g_free(md5_handle);
m->result->cancelkeep = 0;
return SIEVE2_OK;
@@ -529,7 +529,7 @@ static int sort_teardown(sieve2_context_t **s2c,
dm_list_free(&sort_context->freelist.start);
if (sort_context) {
- dm_free(sort_context);
+ g_free(sort_context);
}
res = sieve2_free(&sieve2_context);
@@ -603,7 +603,7 @@ static int sort_startup(sieve2_context_t **s2c,
}
}
- sort_context = dm_malloc(sizeof(struct sort_context));
+ sort_context = g_new0(struct sort_context, 1);
if (!sort_context) {
sort_teardown(&sieve2_context, &sort_context);
return DM_EGENERAL;
@@ -651,7 +651,7 @@ const char * sort_listextensions(void)
/* So we'll make our own copy. */
if (extensions)
- extensions = dm_strdup(extensions);
+ extensions = g_strdup(extensions);
/* If this fails, then we don't care about the
* memory leak, because the program has to bomb out.
@@ -700,7 +700,7 @@ sort_result_t *sort_validate(u64_t user_idnr, char *scriptname)
freesieve:
if (sort_context->s_buf)
- dm_free(sort_context->s_buf);
+ g_free(sort_context->s_buf);
if (exitnull)
result = NULL;
@@ -773,9 +773,9 @@ sort_result_t *sort_process(u64_t user_idnr, struct DbmailMessage *message)
freesieve:
if (sort_context->s_buf)
- dm_free(sort_context->s_buf);
+ g_free(sort_context->s_buf);
if (sort_context->script)
- dm_free(sort_context->script);
+ g_free(sort_context->script);
if (exitnull)
result = NULL;
@@ -796,7 +796,7 @@ void sort_free_result(sort_result_t *result)
g_string_free(result->errormsg, TRUE);
if (result->rejectmsg != NULL)
g_string_free(result->rejectmsg, TRUE);
- dm_free(result);
+ g_free(result);
}
int sort_get_cancelkeep(sort_result_t *result)
diff --git a/pipe.c b/pipe.c
index 8b05ebd6..5b0683f3 100644
--- a/pipe.c
+++ b/pipe.c
@@ -126,13 +126,13 @@ static int send_mail(struct DbmailMessage *message,
return 1;
}
if (parse_and_escape(from, &escaped_from) < 0) {
- dm_free(escaped_to);
+ g_free(escaped_to);
TRACE(TRACE_MESSAGE, "could not prepare 'from' address.");
return 1;
}
sendmail_command = g_strconcat(sendmail, " -f ", escaped_from, " ", escaped_to, NULL);
- dm_free(escaped_to);
- dm_free(escaped_from);
+ g_free(escaped_to);
+ g_free(escaped_from);
if (!sendmail_command) {
TRACE(TRACE_ERROR, "out of memory calling g_strconcat");
return -1;
@@ -395,7 +395,7 @@ static int send_reply(struct DbmailMessage *message, const char *body)
db_replycache_register(to, escaped_send_address, "replycache");
}
- dm_free(newsubject);
+ g_free(newsubject);
dbmail_message_free(new_message);
return 0;
@@ -439,10 +439,10 @@ static int execute_auto_ran(struct DbmailMessage *message, u64_t useridnr)
TRACE(TRACE_DEBUG, "sending notifcation to [%s]", notify_address);
if (send_notification(message, notify_address) < 0) {
TRACE(TRACE_ERROR, "error in call to send_notification.");
- dm_free(notify_address);
+ g_free(notify_address);
return -1;
}
- dm_free(notify_address);
+ g_free(notify_address);
}
}
}
@@ -458,10 +458,10 @@ static int execute_auto_ran(struct DbmailMessage *message, u64_t useridnr)
else {
if (send_reply(message, reply_body) < 0) {
TRACE(TRACE_ERROR, "error in call to send_reply");
- dm_free(reply_body);
+ g_free(reply_body);
return -1;
}
- dm_free(reply_body);
+ g_free(reply_body);
}
}
diff --git a/quota.c b/quota.c
index 2d605634..ec6f8a31 100644
--- a/quota.c
+++ b/quota.c
@@ -30,9 +30,15 @@ quota_t *quota_alloc(int n_resources)
{
quota_t *quota;
- quota =
- dm_malloc(sizeof(quota_t) +
- n_resources * sizeof(resource_limit_t));
+ /* We're allocating enough memory off the end of the quota
+ * structure to accomodate an array of resource_limit structs.
+ * This is the declaration:
+ * resource_limit_t resource[0];
+ * it's a pretty cool abuse of C to alloc more memory off the end of
+ * this array and access it way out of bounds into that extra memory!
+ */
+ quota = g_malloc(sizeof(quota_t) + n_resources * sizeof(resource_limit_t));
+
if (quota != NULL) {
quota->root = NULL;
quota->n_resources = n_resources;
@@ -65,16 +71,16 @@ void quota_set_resource_limit(quota_t * quota, int resource_idx,
*/
int quota_set_root(quota_t * quota, char *root)
{
- dm_free(quota->root);
- quota->root = dm_strdup(root);
+ g_free(quota->root);
+ quota->root = g_strdup(root);
return (quota->root == NULL);
}
/* Free a quota structure. */
void quota_free(quota_t * quota)
{
- dm_free(quota->root);
- dm_free(quota);
+ g_free(quota->root);
+ g_free(quota);
}
diff --git a/sievecmd.c b/sievecmd.c
index c1b48d9d..47a12bfb 100644
--- a/sievecmd.c
+++ b/sievecmd.c
@@ -89,18 +89,18 @@ int main(int argc, char *argv[])
act = opt;
if (!script_name) {
- script_name = dm_strdup(optarg);
+ script_name = g_strdup(optarg);
} else if (!script_source) {
- script_source = dm_strdup(optarg);
+ script_source = g_strdup(optarg);
}
break;
case 'c':
if (optarg)
- script_name = dm_strdup(optarg);
+ script_name = g_strdup(optarg);
act = opt;
break;
case 'u':
- user_name = dm_strdup(optarg);
+ user_name = g_strdup(optarg);
break;
case 'l':
if (act != 0)
@@ -184,7 +184,7 @@ int main(int argc, char *argv[])
qprintf("Opening connection to database...\n");
if (db_connect() != 0) {
qerrorf("Failed. Could not connect to database (check log)\n");
- dm_free(user_name);
+ g_free(user_name);
return -1;
}
@@ -192,7 +192,7 @@ int main(int argc, char *argv[])
qprintf("Opening connection to authentication...\n");
if (auth_connect() != 0) {
qerrorf("Failed. Could not connect to authentication (check log)\n");
- dm_free(user_name);
+ g_free(user_name);
return -1;
}
@@ -237,9 +237,9 @@ int main(int argc, char *argv[])
}
mainend:
- dm_free(user_name);
- dm_free(script_name);
- dm_free(script_source);
+ g_free(user_name);
+ g_free(script_name);
+ g_free(script_source);
db_disconnect();
auth_disconnect();
config_free();
@@ -322,9 +322,9 @@ int do_cat(u64_t user_idnr, char *name)
printf("%s", buf);
- dm_free(buf);
+ g_free(buf);
if (!name)
- dm_free(scriptname);
+ g_free(scriptname);
return 0;
}
@@ -372,7 +372,7 @@ int do_insert(u64_t user_idnr, char *name, char *source)
/* Check if the script is valid */
res = db_add_sievescript(user_idnr, "@!temp-script!@", buf);
- dm_free(buf);
+ g_free(buf);
if (res != 0) {
qerrorf("Error inserting temporary script into the database!\n");
return -1;
@@ -462,7 +462,7 @@ int do_list(u64_t user_idnr)
printf(" - ");
printf("%s\n", info->name);
- dm_free(info->name);
+ g_free(info->name);
tmp = tmp->nextnode;
}
diff --git a/timsieve.c b/timsieve.c
index da9031ee..89b74be6 100644
--- a/timsieve.c
+++ b/timsieve.c
@@ -80,7 +80,7 @@ int tims_handle_connection(clientinfo_t * ci)
if (! ci->tx) {
TRACE(TRACE_MESSAGE, "TX stream is null!");
- dm_free(buffer);
+ g_free(buffer);
return 0;
}
@@ -104,7 +104,7 @@ int tims_handle_connection(clientinfo_t * ci)
if (alarm_occured) {
alarm_occured = 0;
client_close();
- dm_free(buffer);
+ g_free(buffer);
return 0;
}
} while (ferror(ci->rx) && errno == EINTR);
@@ -137,7 +137,7 @@ int tims_handle_connection(clientinfo_t * ci)
}
/* memory cleanup */
- dm_free(buffer);
+ g_free(buffer);
buffer = NULL;
/* reset timers */
@@ -276,7 +276,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
strncpy(tmpcharlen, tmpleft, (10 < tmplen ? 10 : tmplen));
tmpcharlen[(10 < tmplen ? 10 : tmplen)] = '\0';
- dm_free(tmpleft);
+ g_free(tmpleft);
authlen = strtoull(tmpcharlen, NULL, 10);
if (authlen >= UINT_MAX) {
@@ -317,8 +317,8 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
ci_write((FILE *) stream, "OK\r\n");
session->state = AUTH;
session->useridnr = useridnr;
- session->username = dm_strdup(tmp64[1]);
- session->password = dm_strdup(tmp64[2]);
+ session->username = g_strdup(tmp64[1]);
+ session->password = g_strdup(tmp64[2]);
child_reg_connected_user(session->username);
} else {
ci_write((FILE *) stream, "NO \"Username or password incorrect.\"\r\n");
@@ -361,7 +361,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
strncpy(scriptname, tmpleft, (MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen));
/* Of course, be sure to NULL terminate, because strncpy() likely won't */
scriptname[(MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen)] = '\0';
- dm_free(tmpleft);
+ g_free(tmpleft);
/* Offset from the previous match to make sure not to pull
* the "length" from a script with a malicious name */
@@ -378,7 +378,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
strncpy(tmpcharlen, tmpleft, (10 < tmplen ? 10 : tmplen));
tmpcharlen[(10 < tmplen ? 10 : tmplen)] = '\0';
- dm_free(tmpleft);
+ g_free(tmpleft);
scriptlen = strtoull(tmpcharlen, NULL, 10);
TRACE(TRACE_INFO, "Client sending script of length [%llu]", scriptlen);
@@ -456,7 +456,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
strncpy(scriptname, tmpleft, (MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen));
/* Of course, be sure to NULL terminate, because strncpy() likely won't */
scriptname[(MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen)] = '\0';
- dm_free(tmpleft);
+ g_free(tmpleft);
ret = db_activate_sievescript(session->useridnr, scriptname);
if (ret == -3) {
@@ -475,7 +475,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
ci_write((FILE *) stream, "OK \"No scripts are active at this time.\"\r\n");
} else {
ret = db_deactivate_sievescript(session->useridnr, scriptname);
- dm_free(scriptname);
+ g_free(scriptname);
if (ret == -3) {
ci_write((FILE *)stream, "NO \"Active script does not exist.\"\r\n");
return -1;
@@ -512,7 +512,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
strncpy(scriptname, tmpleft, (MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen));
/* Of course, be sure to NULL terminate, because strncpy() likely won't */
scriptname[(MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen)] = '\0';
- dm_free(tmpleft);
+ g_free(tmpleft);
ret = db_get_sievescript_byname(session->useridnr, scriptname, &script);
if (ret == -3) {
@@ -549,7 +549,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
strncpy(scriptname, tmpleft, (MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen));
/* Of course, be sure to NULL terminate, because strncpy() likely won't */
scriptname[(MAX_SIEVE_SCRIPTNAME < tmplen ? MAX_SIEVE_SCRIPTNAME : tmplen)] = '\0';
- dm_free(tmpleft);
+ g_free(tmpleft);
ret = db_delete_sievescript(session->useridnr, scriptname);
if (ret == -3) {
@@ -613,7 +613,7 @@ int tims(clientinfo_t *ci, char *buffer, PopSession_t * session)
if (sort_result)
sort_free_result(sort_result);
if (f_buf)
- dm_free(f_buf);
+ g_free(f_buf);
return 1;
}
diff --git a/user.c b/user.c
index 6222e603..db1daab9 100644
--- a/user.c
+++ b/user.c
@@ -366,7 +366,7 @@ int main(int argc, char *argv[])
if (pw[len-1] == '\n')
pw[len-1] = '\0';
/* fgets guarantees a nul terminated string. */
- passwd = dm_strdup(pw);
+ passwd = g_strdup(pw);
/* Restore the previous terminal state (with echo back on). */
tcsetattr(fileno(stdin), TCSANOW, &oldattr);