add Office Manager position to positions list
[mspang/pyceo.git] / ceo / mysql.py
1 import os, re, subprocess, ldap, socket, pwd
2 from ceo import conf, ldapi, terms, remote, ceo_pb2
3 from ceo.excep import InvalidArgument
4
5 class MySQLException(Exception):
6     pass
7
8 def write_mysql_info(username, password):
9     homedir = pwd.getpwnam(username).pw_dir
10     password_file = '%s/ceo-mysql-info' % homedir
11     if os.path.exists(password_file):
12         os.rename(password_file, password_file + '.old')
13     fd = os.open(password_file, os.O_CREAT|os.O_EXCL|os.O_WRONLY, 0660)
14     fh = os.fdopen(fd, 'w')
15     fh.write("""MySQL Database Information for %(username)s
16
17 Your new MySQL database was created. To connect, use
18 the following options:
19
20 Database: %(username)s
21 Username: %(username)s
22 Password: %(password)s
23 Hostname: localhost
24
25 The command to connect using the MySQL command-line client is
26
27   mysql %(username)s -u %(username)s -p
28
29 If you prefer a GUI you can use phpmyadmin at
30
31  http://csclub.uwaterloo.ca/phpmyadmin
32
33 This database is only accessible from caffeine.
34 """ % { 'username': username, 'password': password })
35
36     fh.close()
37
38 def create_mysql(username):
39     try:
40         request = ceo_pb2.AddMySQLUser()
41         request.username = username
42
43         out = remote.run_remote('mysql', request.SerializeToString())
44
45         response = ceo_pb2.AddMySQLUserResponse()
46         response.ParseFromString(out)
47
48         if any(message.status != 0 for message in response.messages):
49             raise MySQLException('\n'.join(message.message for message in response.messages))
50
51         return response.password
52     except remote.RemoteException, e:
53         raise MySQLException(e)
54