Exemplo n.º 1
0
 def upgrade(self, directory, dry_run):
     try:
         self.checkVersion()
     except ExceptionDatabaseTooOld:
         files = [
             "%s/%s" % (directory, f) for f in os.listdir(directory)
             if f[-4:] == '.sql'
         ]
         parameters = self.parameters
         for f in self.version.upgradeChain(version, files):
             self.log.inform("apply '%s'", f)
             if not dry_run:
                 fd = open(f)
                 proc = subprocess.Popen(self.mysql_command.split() + [
                     '-h', parameters['host'], '-u', parameters['user'],
                     '-p' + parameters['password']
                 ],
                                         stdin=fd,
                                         stderr=subprocess.PIPE)
                 if proc.wait():
                     raise ExceptionUpgradeFailed, "upgrade failed"
         self.log.inform("upgraded database to version %s", version)
         if not dry_run:
             self.setVersionInDatabase(version)
             self.version = Version(self.getVersionFromDatabase())
Exemplo n.º 2
0
 def upgrade(self, directory, dry_run):
     try:
         self.checkVersion()
     except ExceptionDatabaseTooOld:
         files = filter(lambda file: ".sql" == file[-4:],
                        os.listdir(directory))
         files = map(lambda file: directory + "/" + file, files)
         parameters = self.parameters
         mysql = self.mysql_command + " -h '" + parameters[
             'host'] + "' -u '" + parameters[
                 'user'] + "' --password='******'password'] + "' '" + parameters['name'] + "'"
         for file in self.version.upgradeChain(version, files):
             self.message("apply " + file)
             if not dry_run:
                 if os.system(mysql + " < " + file):
                     raise ExceptionUpgradeFailed, "upgrade failed"
         self.message("upgraded database to version %s" % version)
         if not dry_run:
             self.setVersionInDatabase(version)
             self.version = Version(self.getVersionFromDatabase())
Exemplo n.º 3
0
    def testHandleVersion(self):
        """Testing handleVersion"""

        assert self.u._protocol_ok == False, "_protocol_ok : False expected"
        # Messages should be empty, protocol is not established
        clear_all_messages()
        self.u._handleVersion()
        self.assertEquals(get_messages(), [])

        assert self.u._protocol_ok == False, "_protocol_ok change unexpected"

        self.u._packet = list('\n')
        # Messages should be empty, protocol is not established
        clear_all_messages()
        self.u._handleVersion()
        self.assertEquals(get_messages(), [])
        assert self.u.transport._loseConnection == True, "loseConnection not called"

        self.u.transport = FakeTransport()  # transport re-init
        self.u._packet = list('CGI a.b\n')
        # Messages should be empty, protocol is not established
        clear_all_messages()
        self.u._handleVersion()
        self.assertEquals(get_messages(), [])
        assert self.u.transport._loseConnection == True, "loseConnection not called"

        self.u.transport = FakeTransport()  # transport re-init
        vers = Version(protocol_number)
        PROTOCOL_MAJOR = "%03d" % vers.major()
        PROTOCOL_MINOR = "%d%02d" % (vers.medium(), vers.minor())
        self.u._packet = list('CGI %s.%s \n' %
                              (PROTOCOL_MAJOR, PROTOCOL_MINOR))
        clear_all_messages()
        self.u._handleVersion()
        self.assertEquals(get_messages(), ["protocol established"])

        assert self.u._protocol_ok == True, "_protocol_ok value unexpected"
Exemplo n.º 4
0
# "AGPLv3".  If not, see <http://www.gnu.org/licenses/>.
#
# Authors:
#  Loic Dachary <*****@*****.**>
#
#
from twisted.internet import reactor, protocol
from twisted.python.runtime import seconds

from pokerpackets.packets import Packet, PacketFactory, PACKET_PING
from pokernetwork import protocol_number
from pokernetwork.version import Version
from pokernetwork import log as network_log
log = network_log.get_child('protocol')

protocol_version = Version(protocol_number)

PROTOCOL_MAJOR = "%03d" % protocol_version.major()
PROTOCOL_MINOR = "%d%02d" % (protocol_version.medium(),
                             protocol_version.minor())


class Queue:
    def __init__(self):
        self.delay = 0
        self.packets = []


class UGAMEProtocol(protocol.Protocol):
    """UGAMEProtocol"""
Exemplo n.º 5
0
    def __init__(self, settings):
        self.verbose = settings.headerGetInt("/server/@verbose")
        self.parameters = settings.headerGetProperties("/server/database")[0]
        self.mysql_command = settings.headerGet("/server/database/@command")
        try:
            self.db = MySQLdb.connect(host=self.parameters["host"],
                                      port=int(
                                          self.parameters.get("port", '3306')),
                                      user=self.parameters["user"],
                                      passwd=self.parameters["password"],
                                      db=self.parameters["name"])
            if self.verbose > 2:
                self.message("MySQL server version is " +
                             self.db.get_server_info())
        except:
            if self.parameters.has_key('root_user'):
                if self.verbose:
                    self.message("connecting as root user '" +
                                 self.parameters["root_user"] + "'")
                db = MySQLdb.connect(host=self.parameters["host"],
                                     port=int(
                                         self.parameters.get("port", '3306')),
                                     user=self.parameters["root_user"],
                                     passwd=self.parameters["root_password"])
                if self.verbose:
                    self.message("MySQL server version is " +
                                 db.get_server_info())
                if int(db.get_server_info().split('.')[0]) < 5:
                    raise UserWarning, "PokerDatabase: MySQL server version is " + db.get_server_info(
                    ) + " but version >= 5.0 is required"
                db.query("SHOW DATABASES LIKE '" + self.parameters["name"] +
                         "'")
                result = db.store_result()
                #
                # It may be because the database does not exist
                #
                if result.num_rows() <= 0:
                    if self.verbose:
                        self.message("creating database " +
                                     self.parameters["name"])
                    if not exists(self.parameters["schema"]):
                        db.close()
                        raise UserWarning, "PokerDatabase: schema " + self.parameters[
                            "schema"] + " file not found"
                    del result
                    db.query("CREATE DATABASE " + self.parameters["name"])
                    if self.verbose:
                        self.message("populating database from " +
                                     self.parameters["schema"])
                    cmd = self.mysql_command + " --host='" + self.parameters[
                        "host"] + "' --user='******' --password='******' '" + self.parameters[
                                    "name"] + "' < " + self.parameters["schema"]
                    if self.verbose:
                        self.message(cmd)
                    os.system(cmd)
                db.select_db("mysql")
                #
                # Or because the user does not exist
                #
                try:
                    sql = "CREATE USER '" + self.parameters[
                        'user'] + "'@'%' IDENTIFIED BY '" + self.parameters[
                            'password'] + "'"
                    if self.verbose > 2:
                        self.message(sql)
                    db.query(sql)
                    sql = "CREATE USER '" + self.parameters[
                        'user'] + "'@'localhost' IDENTIFIED BY '" + self.parameters[
                            'password'] + "'"
                    if self.verbose > 2:
                        self.message(sql)
                    db.query(sql)
                    db.query("FLUSH PRIVILEGES")
                    if self.verbose:
                        self.message("created database user " +
                                     self.parameters["user"])
                except:
                    if self.verbose > 3: self.message(format_exc())
                    if self.verbose:
                        self.message("poker user '" + self.parameters["user"] +
                                     "' already exists")
                #
                # Or because the user does not have permission
                #
                db.query("GRANT ALL ON `" + self.parameters['name'] +
                         "`.* TO '" + self.parameters['user'] + "'@'%'")
                db.query("FLUSH PRIVILEGES")
                db.close()
                if self.verbose:
                    self.message("granted privilege to " +
                                 self.parameters["user"] + "' for database '" +
                                 self.parameters['name'] + "'")
            else:
                if self.verbose:
                    self.message(
                        "root_user is not defined in the self.parameters, cannot create schema database"
                    )
            self.db = MySQLdb.connect(host=self.parameters["host"],
                                      port=int(
                                          self.parameters.get("port", '3306')),
                                      user=self.parameters["user"],
                                      passwd=self.parameters["password"],
                                      db=self.parameters["name"])

        if self.verbose:
            self.message("PokerDatabase: Database connection to %s/%s open" %
                         (self.parameters["host"], self.parameters["name"]))
        self.db.query("SET AUTOCOMMIT = 1")
        self.version = Version(self.getVersionFromDatabase())
        if self.verbose:
            self.message("PokerDatabase: database version %s" % self.version)