62         domain.  | 
    62         domain.  | 
    63         """  | 
    63         """  | 
    64         dbc = self._dbh.cursor()  | 
    64         dbc = self._dbh.cursor()  | 
    65         dbc.execute('SELECT dd.gid, tid, domaindir, is_primary FROM ' | 
    65         dbc.execute('SELECT dd.gid, tid, domaindir, is_primary FROM ' | 
    66                     'domain_data dd, domain_name dn WHERE domainname = %s AND '  | 
    66                     'domain_data dd, domain_name dn WHERE domainname = %s AND '  | 
    67                     'dn.gid = dd.gid', self._name)  | 
    67                     'dn.gid = dd.gid', (self._name,))  | 
    68         result = dbc.fetchone()  | 
    68         result = dbc.fetchone()  | 
    69         dbc.close()  | 
    69         dbc.close()  | 
    70         if result:  | 
    70         if result:  | 
    71             if not result[3]:  | 
    71             if not result[3]:  | 
    72                 raise DomErr(_(u"The domain '%s' is an alias domain.") %  | 
    72                 raise DomErr(_(u"The domain '%s' is an alias domain.") %  | 
   158         if not self._new:  | 
   158         if not self._new:  | 
   159             raise DomErr(_(u"The domain '%s' already exists.") % self._name,  | 
   159             raise DomErr(_(u"The domain '%s' already exists.") % self._name,  | 
   160                          DOMAIN_EXISTS)  | 
   160                          DOMAIN_EXISTS)  | 
   161         assert self._directory is not None and self._transport is not None  | 
   161         assert self._directory is not None and self._transport is not None  | 
   162         dbc = self._dbh.cursor()  | 
   162         dbc = self._dbh.cursor()  | 
   163         dbc.execute("INSERT INTO domain_data VALUES (%s, %s, %s)", self._gid, | 
   163         dbc.execute("INSERT INTO domain_data VALUES (%s, %s, %s)", (self._gid, | 
   164                     self._transport.tid, self._directory)  | 
   164                     self._transport.tid, self._directory))  | 
   165         dbc.execute("INSERT INTO domain_name VALUES (%s, %s, %s)", self._name, | 
   165         dbc.execute("INSERT INTO domain_name VALUES (%s, %s, %s)", (self._name, | 
   166                     self._gid, True)  | 
   166                     self._gid, True))  | 
   167         self._dbh.commit()  | 
   167         self._dbh.commit()  | 
   168         dbc.close()  | 
   168         dbc.close()  | 
   169         self._new = False  | 
   169         self._new = False  | 
   170   | 
   170   | 
   171     def delete(self, force=False):  | 
   171     def delete(self, force=False):  | 
   212         assert isinstance(transport, Transport)  | 
   212         assert isinstance(transport, Transport)  | 
   213         if transport == self._transport:  | 
   213         if transport == self._transport:  | 
   214             return  | 
   214             return  | 
   215         dbc = self._dbh.cursor()  | 
   215         dbc = self._dbh.cursor()  | 
   216         dbc.execute("UPDATE domain_data SET tid = %s WHERE gid = %s", | 
   216         dbc.execute("UPDATE domain_data SET tid = %s WHERE gid = %s", | 
   217                     transport.tid, self._gid)  | 
   217                     (transport.tid, self._gid))  | 
   218         if dbc.rowcount > 0:  | 
   218         if dbc.rowcount > 0:  | 
   219             self._dbh.commit()  | 
   219             self._dbh.commit()  | 
   220         if force:  | 
   220         if force:  | 
   221             dbc.execute("UPDATE users SET tid = %s WHERE gid = %s", | 
   221             dbc.execute("UPDATE users SET tid = %s WHERE gid = %s", | 
   222                         transport.tid, self._gid)  | 
   222                         (transport.tid, self._gid))  | 
   223             if dbc.rowcount > 0:  | 
   223             if dbc.rowcount > 0:  | 
   224                 self._dbh.commit()  | 
   224                 self._dbh.commit()  | 
   225         dbc.close()  | 
   225         dbc.close()  | 
   226         self._transport = transport  | 
   226         self._transport = transport  | 
   227   | 
   227   | 
   229         """Returns a dictionary with information about the domain."""  | 
   229         """Returns a dictionary with information about the domain."""  | 
   230         self._chk_state()  | 
   230         self._chk_state()  | 
   231         dbc = self._dbh.cursor()  | 
   231         dbc = self._dbh.cursor()  | 
   232         dbc.execute('SELECT gid, domainname, transport, domaindir, ' | 
   232         dbc.execute('SELECT gid, domainname, transport, domaindir, ' | 
   233                     'aliasdomains, accounts, aliases, relocated FROM '  | 
   233                     'aliasdomains, accounts, aliases, relocated FROM '  | 
   234                     'vmm_domain_info WHERE gid = %s', self._gid)  | 
   234                     'vmm_domain_info WHERE gid = %s', (self._gid,))  | 
   235         info = dbc.fetchone()  | 
   235         info = dbc.fetchone()  | 
   236         dbc.close()  | 
   236         dbc.close()  | 
   237         keys = ('gid', 'domainname', 'transport', 'domaindir', 'aliasdomains', | 
   237         keys = ('gid', 'domainname', 'transport', 'domaindir', 'aliasdomains', | 
   238                 'accounts', 'aliases', 'relocated')  | 
   238                 'accounts', 'aliases', 'relocated')  | 
   239         return dict(zip(keys, info))  | 
   239         return dict(zip(keys, info))  | 
   241     def get_accounts(self):  | 
   241     def get_accounts(self):  | 
   242         """Returns a list with all accounts of the domain."""  | 
   242         """Returns a list with all accounts of the domain."""  | 
   243         self._chk_state()  | 
   243         self._chk_state()  | 
   244         dbc = self._dbh.cursor()  | 
   244         dbc = self._dbh.cursor()  | 
   245         dbc.execute('SELECT local_part from users where gid = %s ORDER BY ' | 
   245         dbc.execute('SELECT local_part from users where gid = %s ORDER BY ' | 
   246                     'local_part', self._gid)  | 
   246                     'local_part', (self._gid,))  | 
   247         users = dbc.fetchall()  | 
   247         users = dbc.fetchall()  | 
   248         dbc.close()  | 
   248         dbc.close()  | 
   249         accounts = []  | 
   249         accounts = []  | 
   250         if users:  | 
   250         if users:  | 
   251             addr = u'@'.join  | 
   251             addr = u'@'.join  | 
   256     def get_aliases(self):  | 
   256     def get_aliases(self):  | 
   257         """Returns a list with all aliases e-mail addresses of the domain."""  | 
   257         """Returns a list with all aliases e-mail addresses of the domain."""  | 
   258         self._chk_state()  | 
   258         self._chk_state()  | 
   259         dbc = self._dbh.cursor()  | 
   259         dbc = self._dbh.cursor()  | 
   260         dbc.execute('SELECT DISTINCT address FROM alias WHERE gid = %s ORDER ' | 
   260         dbc.execute('SELECT DISTINCT address FROM alias WHERE gid = %s ORDER ' | 
   261                     'BY address', self._gid)  | 
   261                     'BY address', (self._gid,))  | 
   262         addresses = dbc.fetchall()  | 
   262         addresses = dbc.fetchall()  | 
   263         dbc.close()  | 
   263         dbc.close()  | 
   264         aliases = []  | 
   264         aliases = []  | 
   265         if addresses:  | 
   265         if addresses:  | 
   266             addr = u'@'.join  | 
   266             addr = u'@'.join  | 
   271     def get_relocated(self):  | 
   271     def get_relocated(self):  | 
   272         """Returns a list with all addresses of relocated users."""  | 
   272         """Returns a list with all addresses of relocated users."""  | 
   273         self._chk_state()  | 
   273         self._chk_state()  | 
   274         dbc = self._dbh.cursor()  | 
   274         dbc = self._dbh.cursor()  | 
   275         dbc.execute('SELECT address FROM relocated WHERE gid = %s ORDER BY ' | 
   275         dbc.execute('SELECT address FROM relocated WHERE gid = %s ORDER BY ' | 
   276                     'address', self._gid)  | 
   276                     'address', (self._gid,))  | 
   277         addresses = dbc.fetchall()  | 
   277         addresses = dbc.fetchall()  | 
   278         dbc.close()  | 
   278         dbc.close()  | 
   279         relocated = []  | 
   279         relocated = []  | 
   280         if addresses:  | 
   280         if addresses:  | 
   281             addr = u'@'.join  | 
   281             addr = u'@'.join  | 
   286     def get_aliase_names(self):  | 
   286     def get_aliase_names(self):  | 
   287         """Returns a list with all alias domain names of the domain."""  | 
   287         """Returns a list with all alias domain names of the domain."""  | 
   288         self._chk_state()  | 
   288         self._chk_state()  | 
   289         dbc = self._dbh.cursor()  | 
   289         dbc = self._dbh.cursor()  | 
   290         dbc.execute('SELECT domainname FROM domain_name WHERE gid = %s AND ' | 
   290         dbc.execute('SELECT domainname FROM domain_name WHERE gid = %s AND ' | 
   291                     'NOT is_primary ORDER BY domainname', self._gid)  | 
   291                     'NOT is_primary ORDER BY domainname', (self._gid,))  | 
   292         anames = dbc.fetchall()  | 
   292         anames = dbc.fetchall()  | 
   293         dbc.close()  | 
   293         dbc.close()  | 
   294         aliasdomains = []  | 
   294         aliasdomains = []  | 
   295         if anames:  | 
   295         if anames:  | 
   296             aliasdomains = [aname[0] for aname in anames]  | 
   296             aliasdomains = [aname[0] for aname in anames]  |