changeset e7a89454a909 in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=e7a89454a909
description: * fixed some problems with SQL escapement for roster versioning. 
For example when we have double quote or another character like this. Fixes 
#5159
        * some code refactoring for roster versioning in common/logger.py
        * added a docstring and some comments in common/logger.py

diffstat:

 src/common/logger.py |  52 ++++++++++++++++++++++++++--------------------------
 1 files changed, 26 insertions(+), 26 deletions(-)

diffs (116 lines):

diff -r bc6999f654b3 -r e7a89454a909 src/common/logger.py
--- a/src/common/logger.py      Sun Jul 12 18:34:47 2009 +0200
+++ b/src/common/logger.py      Mon Jul 13 15:21:35 2009 +0200
@@ -833,21 +833,25 @@
                accout_name is the name of the account to change
                roster_version is the version of the new roster
                roster is the new version '''
+               # First we must reset roster_version value to ensure that the 
server
+               # sends back all the roster at the next connexion if the 
replacement
+               # didn't work properly.
                gajim.config.set_per('accounts', account_name, 
'roster_version', '')
+
                account_jid = gajim.get_jid_from_account(account_name)
                account_jid_id = self.get_jid_id(account_jid)
 
                # Delete old roster
-               sql = 'DELETE FROM roster_entry WHERE account_jid_id = %d' % (
-                       account_jid_id)
-               sql = 'DELETE FROM roster_group WHERE account_jid_id = %d' % (
-                       account_jid_id)
+               self.remove_roster(account_jid)
 
                # Fill roster tables with the new roster
                for jid in roster:
                        self.add_or_update_contact(account_jid, jid, 
roster[jid]['name'],
                                roster[jid]['subscription'], roster[jid]['ask'],
                                roster[jid]['groups'])
+
+               # At this point, we are sure the replacement works properly so 
we can
+               # set the new roster_version value.
                gajim.config.set_per('accounts', account_name, 'roster_version',
                        roster_version)
 
@@ -858,10 +862,9 @@
                        jid_id = self.get_jid_id(jid)
                except exceptions.PysqliteOperationalError, e:
                        raise exceptions.PysqliteOperationalError(str(e))
-               sql = 'DELETE FROM roster_group WHERE account_jid_id=%d AND 
jid_id=%d' % (account_jid_id, jid_id)
-               self.cur.execute(sql)
-               sql = 'DELETE FROM roster_entry WHERE account_jid_id=%d AND 
jid_id=%d' % (account_jid_id, jid_id)
-               self.simple_commit(sql)
+               self.cur.execute('DELETE FROM roster_group WHERE 
account_jid_id=? AND jid_id=?', (account_jid_id, jid_id))
+               self.cur.execute('DELETE FROM roster_entry WHERE 
account_jid_id=? AND jid_id=?', (account_jid_id, jid_id))
+               self.con.commit()
 
        def add_or_update_contact(self, account_jid, jid, name, sub, ask, 
groups):
                ''' Add or update a contact from account_jid roster. '''
@@ -877,22 +880,20 @@
 
                # Update groups information
                # First we delete all previous groups information
-               sql = 'DELETE FROM roster_group WHERE account_jid_id=%d AND 
jid_id=%d' % (account_jid_id, jid_id)
-               self.cur.execute(sql)
+               self.cur.execute('DELETE FROM roster_group WHERE 
account_jid_id=? AND jid_id=?', (account_jid_id, jid_id))
                # Then we add all new groups information
                for group in groups:
-                       sql = 'INSERT INTO roster_group VALUES("%d", "%d", 
"%s")' % (
-                               account_jid_id, jid_id, group)
-                       self.cur.execute(sql)
+                       self.cur.execute('INSERT INTO roster_group VALUES(?, ?, 
?)',
+                               (account_jid_id, jid_id, group))
 
                if name is None:
                        name = ''
 
-               sql = 'REPLACE INTO roster_entry VALUES("%d", "%d", "%s", "%s", 
"%d")'\
-                       % (account_jid_id, jid_id, name,
+               self.cur.execute('REPLACE INTO roster_entry VALUES(?, ?, ?, ?, 
?)',
+                       (account_jid_id, jid_id, name,
                        
self.convert_human_subscription_values_to_db_api_values(sub),
-                       bool(ask))
-               self.simple_commit(sql)
+                       bool(ask)))
+               self.con.commit()
 
        def get_roster(self, account_jid):
                ''' Return the accound_jid roster in NonBlockingRoster format. 
'''
@@ -900,7 +901,7 @@
                account_jid_id = self.get_jid_id(account_jid)
 
                # First we fill data with roster_entry informations
-               self.cur.execute('SELECT j.jid, re.jid_id, re.name, 
re.subscription, re.ask FROM roster_entry re, jids j WHERE 
re.account_jid_id="%(account_jid_id)s" AND j.jid_id=re.jid_id' % 
{'account_jid_id': account_jid_id})
+               self.cur.execute('SELECT j.jid, re.jid_id, re.name, 
re.subscription, re.ask FROM roster_entry re, jids j WHERE re.account_jid_id=? 
AND j.jid_id=re.jid_id', (account_jid_id,))
                for jid, jid_id, name, subscription, ask in self.cur:
                        data[jid] = {}
                        if name:
@@ -918,7 +919,7 @@
 
                # Then we add group for roster entries
                for jid in data:
-                       self.cur.execute('SELECT group_name FROM roster_group 
WHERE account_jid_id="%(account_jid_id)s" AND jid_id="%(jid_id)s"' % 
{'account_jid_id': account_jid_id, 'jid_id': data[jid]['id']})
+                       self.cur.execute('SELECT group_name FROM roster_group 
WHERE account_jid_id=? AND jid_id=?', (account_jid_id, data[jid]['id']))
                        for (group_name,) in self.cur:
                                data[jid]['groups'].append(group_name)
                        del data[jid]['id']
@@ -926,14 +927,13 @@
                return data
 
        def remove_roster(self, account_jid):
+               ''' Remove all entry from account_jid roster. '''
                account_jid_id = self.get_jid_id(account_jid)
 
-               sql = 'DELETE FROM roster_group WHERE account_jid_id=%d' % (
-                       account_jid_id)
-               self.cur.execute(sql)
-
-               sql = 'DELETE FROM roster_entry WHERE account_jid_id=%d' % (
-                       account_jid_id)
-               self.simple_commit(sql)
+               self.cur.execute('DELETE FROM roster_entry WHERE 
account_jid_id=?',
+                       (account_jid_id,))
+               self.cur.execute('DELETE FROM roster_group WHERE 
account_jid_id=?',
+                       (account_jid_id,))
+               self.con.commit()
 
 # vim: se ts=3:
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to