Advertisement
Guest User

Untitled

a guest
Jul 29th, 2017
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. #!/usr/bin/python
  2. # Copyright (c) 2008 Alon Swartz <alon@turnkeylinux.org> - all rights reserved
  3. #Modified significantly by Rik Goldman
  4. """
  5. Configure Psiphon Proxy in MySQL
  6.  
  7. """
  8.  
  9. import sys
  10. import time
  11. import getopt
  12. import socket
  13. import fcntl
  14. import struct
  15.  
  16. from executil import ExecError, system
  17.  
  18. DEBIAN_CNF = "/etc/mysql/debian.cnf"
  19.  
  20. class Error(Exception):
  21. pass
  22.  
  23. def escape_chars(s):
  24. """escape special characters: required by nested quotes in query"""
  25. s = s.replace("\\", "\\\\") # \ -> \\
  26. s = s.replace('"', '\\"') # " -> \"
  27. s = s.replace("'", "'\\''") # ' -> '\''
  28. return s
  29.  
  30. #Set Proxy: verbatim excerpt from code.activestate.com/recipes/439094
  31.  
  32. def get_ip_address ( ifname ):
  33. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  34. return socket.inet_ntoa(fcntl.ioctl(
  35. s.fileno(),
  36. 0x8915,
  37. struct.pack('256s', ifname[:15])
  38. )[20:24])
  39. #Set variables for psiphon.proxy
  40. address = get_ip_address('eth1')
  41. proxyname = "administrative"
  42. login_url = "/001/"
  43. sql= """UPDATE "psiphon"."proxy" SET hostname = \"%s\" WHERE name = "administrative";""" % (address)
  44.  
  45. class MySQL:
  46. def __init__(self):
  47. system("mkdir -p /var/run/mysqld")
  48. system("chown mysql:root /var/run/mysqld")
  49.  
  50. self.selfstarted = False
  51. if not self._is_alive():
  52. self._start()
  53. self.selfstarted = True
  54.  
  55. def _is_alive(self):
  56. try:
  57. system('mysqladmin -s ping >/dev/null 2>&1')
  58. except ExecError:
  59. return False
  60.  
  61. return True
  62.  
  63. def _start(self):
  64. system("mysqld --skip-networking >/dev/null 2>&1 &")
  65. for i in range(6):
  66. if self._is_alive():
  67. return
  68.  
  69. time.sleep(1)
  70.  
  71. raise Error("could not start mysqld")
  72.  
  73. def _stop(self):
  74. if self.selfstarted:
  75. system("mysqladmin --defaults-file=%s shutdown" % DEBIAN_CNF)
  76.  
  77. def __del__(self):
  78. self._stop()
  79.  
  80. def execute(self, query):
  81. system("mysql --defaults-file=%s -B -e '%s'" % (DEBIAN_CNF, query))
  82.  
  83. def usage(s=None):
  84. if s:
  85. print >> sys.stderr, "Error:", s
  86. print >> sys.stderr, "Syntax: %s [options]" % sys.argv[0]
  87. print >> sys.stderr, __doc__
  88. sys.exit(1)
  89.  
  90. def main():
  91.  
  92. m = MySQL()
  93.  
  94. #Set Proxy URL
  95. m.execute(sql)
  96. #m.execute("""UPDATE "psiphon"."proxy" SET hostname = \"%s\" WHERE name = "administrative";""" , (address))
  97. #m.execute('UPDATE "psiphon"."proxy" SET hostname = \"%s\" WHERE name = "administrative";') % (address)
  98. #Correct query without variables: m.execute('update psiphon.proxy set hostname = "192.168.1.198" where name = "administrative";')
  99. #WORKS with Substitutions: m.execute('REPLACE INTO psiphon.proxy (hostname) VALUES (\"%s\") (name="administrative");') % (hostname)
  100. # set password
  101. #m.execute('update mysql.user set Password=PASSWORD(\"%s\") where User=\"%s\"; flush privileges;' % (escape_chars(password), username))
  102.  
  103. # edge case: update DEBIAN_CNF
  104. #if username == "debian-sys-maint":
  105. # old = file(DEBIAN_CNF).read()
  106. # new = re.sub("password = (.*)\n", "password = %s\n" % password, old)
  107. # file(DEBIAN_CNF, "w").write(new)
  108.  
  109.  
  110. if __name__ == "__main__":
  111. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement