def do_check_fix(self, args): fix = True if "fix" in args else False check = True if "check" in args else False silent = True if "silent" in args else False failed = [] fixed = [] if check or fix: for element in self.install_list: if not self.checker_lu[element["type"]](element): failed.append(element) if fix: self.fixer_lu[element["type"]](element) fixed.append(element) if not silent: L.info( t("Fixed: the %(type)s %(name)s") % {"type": element["type"], "name": element["name"]} ) else: if not silent: L.error( t("Check failed for the %(type)s %(name)s") % {"type": element["type"], "name": element["name"]} ) return failed, fixed
def to_dev(self, args): completed = False args.remove("todev") site_name = self.ask_site_name(self.get_next_arg(args)) if not self.is_conf_exists(site_name): completed = True print t("Sorry, the site '%s' does not exists.") % site_name return completed self.load(site_name) site_path, root_path, log_path, upload_tmp_path = self.generate_dir() errors = False if self.conf.get("mysql", "enabled"): schema = self.conf.get("mysql", "schema") # user = self.conf.get('mysql', 'user') # password = self.conf.get('mysql', 'pass') if inputs.get_input_yesno(t("The schema '%s' will be converted. Continue?") % schema): filename = "/tmp/site_convert_todev_%s" % uuid.uuid4() if not (self.dump_bd(filename) and self.schema_todev(filename) and self.restore_bd(filename)): L.error(t("Fail to convert schema")) errors = True files.rm(filename) if errors and not inputs.get_input_yesno(t("There was some errors. Continue?")): completed = False return completed if inputs.get_input_yesno(t("The files under %s will be converted. Continue??") % root_path): site_name = self.conf.get("main", "site_name") site_dev_name = self.conf.get("main", "site_dev_name") site_name_escape = site_name.replace(".", "\.") file_list = self.get_file_list(root_path) for f in file_list: print t("Converting file %s") % f files.re_replace_in(f, site_name_escape, site_dev_name) files.re_replace_in(f, "(dev\.)*%s" % site_name_escape, site_dev_name) robot = root_path + "/robots.txt" prodrobot = root_path + "/robots.txt.prod" if files.exists(robot): self.show_file(t("------- ROBOTS.TXT --------"), robot) if files.exists(prodrobot): self.show_file(t("------- ROBOTS.TXT.PROD --------"), prodrobot) if files.exists(robot) and inputs.get_input_yesno( t("Do you want to backup current robots.txt to robots.txt.prod?") ): if not files.exists(prodrobot) or ( files.exists(prodrobot) and inputs.get_input_noyes(t("The robots.txt.prod exists. Overwrite?")) ): files.cp(robot, prodrobot) if inputs.get_input_yesno(t("Do you want create a dev robots.txt that disallow all?")): with open(files.get_rel_path("data/dev.robots.txt")) as devbot_tpl: files.create(robot, devbot_tpl.read()) completed = True return completed
def graceful(): cmd_list = [ "apache2ctl graceful", ] completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(pinfo['stdout'] + '\n' + pinfo['stderr']) raise Exception(t("Error in site.graceful!"))
def to_prod(self, args): completed = False args.remove("toprod") site_name = self.ask_site_name(self.get_next_arg(args)) if not self.is_conf_exists(site_name): completed = True print t("Sorry, the site '%s' does not exists.") % site_name return completed self.load(site_name) site_path, root_path, log_path, upload_tmp_path = self.generate_dir() errors = False if self.conf.get("mysql", "enabled"): schema = self.conf.get("mysql", "schema") if inputs.get_input_yesno(t("The schema '%s' will be converted. Continue?") % schema): filename = "/tmp/site_convert_toprod_%s" % uuid.uuid4() if not (self.dump_bd(filename) and self.schema_toprod(filename) and self.restore_bd(filename)): L.error(t("Fail to convert schema")) errors = True files.rm(filename) if errors and not inputs.get_input_yesno(t("There was some errors. Continue?")): completed = False return completed if inputs.get_input_yesno(t("The files under %s will be converted. Continue??") % root_path): site_name = self.conf.get("main", "site_name") site_name_escape = site_name.replace(".", "\.") file_list = self.get_file_list(root_path) for f in file_list: print t("Converting file %s") % f files.re_replace_in(f, "(dev\.)*%s" % site_name_escape, site_name) robot = root_path + "/robots.txt" prodrobot = root_path + "/robots.txt.prod" if files.exists(robot): self.show_file(t("------- ROBOTS.TXT --------"), robot) if files.exists(prodrobot): self.show_file(t("------- ROBOTS.TXT.PROD --------"), prodrobot) if files.exists(prodrobot) and inputs.get_input_yesno( t("The file robots.txt.prod exists. Do you want to replace robots.txt with it?") ): files.cp(prodrobot, robot) if ( not files.exists(prodrobot) and files.exists(robot) and inputs.get_input_yesno( t("Warning the %s files DOES NOT exists. Answer Yes to DELETE robots.txt") % prodrobot ) ): files.rm(robot) completed = True return completed
def ldap_centrify_refresh(self, ldap_group=None, ldap_user=None): cmd_list = ['adflush','adreload','sleep 15','adinfo'] if ldap_user: cmd_list.append('adquery user -A %s' % ldap_user) if ldap_group: cmd_list.append('adquery group -A %s' % ldap_group) completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(t("Cannot reload AD after LDAP user/group creation!"))
def restore_bd(self, filename): schema = self.conf.get("mysql", "schema") user = self.conf.get("mysql", "user") password = self.conf.get("mysql", "pass") cmd_list = [ { "command": "bash -c 'mysql -u %s -p%s %s < %s'" % (user, password, schema, filename), "anonymous": "bash -c 'mysql -u %s -p%s %s < %s'" % (user, "XXXXX", schema, filename), } ] completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(t("Failed to restore schema %s!") % schema) return completed
def create_user(username, usermail, password=None): if password is None: password = inputs.gen_password(inputs.PASS_CHARS_UNIX) cmd_list = [ { 'command': 'bash -c "useradd -s /bin/bash -U -p $(mkpasswd \"%s\") %s"' % (password, username), 'anonymous': 'bash -c "useradd -s /bin/bash -U -p $(mkpasswd XXXXXX) %s"' % username, } ] completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(pinfo['stdout'] + '\n' + pinfo['stderr']) raise Exception(t("Error in user creation!")) return password
def dump_bd(self, filename): schema = self.conf.get("mysql", "schema") user = self.conf.get("mysql", "user") password = self.conf.get("mysql", "pass") cmd_list = [ { "command": "bash -c 'mysqldump -u%s -p%s --single-transaction --routines --triggers %s > %s'" % (user, password, schema, filename), "anonymous": "bash -c 'mysqldump -u%s -p%s --single-transaction --routines --triggers %s > %s'" % (user, "XXXXX", schema, filename), } ] completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(t("Failed to dump schema %s!") % schema) return completed
def try_acl_activation(self): unix_group = self.conf.get('access','unix_group') ldap_group = self.conf.get('access','ldap_group') cmd_list = [] if unix_group: #unix_acl = self.generate_acl(unix_group) cron_fullpath = "/etc/cron.acl/%s" % self.get_safe_name(unix_group) cmd_list.append(cron_fullpath) if ldap_group: #ldap_acl = self.generate_acl(ldap_group) cron_fullpath = "/etc/cron.acl/%s" % self.get_safe_name(ldap_group) cmd_list.append(cron_fullpath) if len(cmd_list) > 0: completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(t("ACL not applied properly, probably because centrify is not updated. " "You will need to apply them manually or wait the auto apply..."))
def fix_path(self, args): completed = False args.remove("fixpath") old_path = self.get_next_path(args) args.remove(old_path) site_name = self.ask_site_name(self.get_next_arg(args)) if not self.is_conf_exists(site_name): completed = True print t("Sorry, the site '%s' does not exists.") % site_name return completed self.load(site_name) site_path, root_path, log_path, upload_tmp_path = self.generate_dir() errors = False if self.conf.get("mysql", "enabled"): schema = self.conf.get("mysql", "schema") if inputs.get_input_yesno(t("The paths in schema '%s' will be converted. Continue?") % schema): filename = "/tmp/site_convert_fixpath_%s" % uuid.uuid4() if not ( self.dump_bd(filename) and self.schema_fix_webroot_path(filename, old_path_name=old_path) and self.restore_bd(filename) ): L.error(t("Fail to convert schema")) errors = True files.rm(filename) if errors and not inputs.get_input_yesno(t("There was some errors. Continue?")): completed = False return completed if inputs.get_input_yesno(t("The files under %s will be converted. Continue??") % root_path): file_list = self.get_file_list(root_path) for f in file_list: print t("Converting file %s") % f files.re_replace_in(f, old_path, root_path)
if ( not is_admin and unix.is_notunix_user(pam_user) and CONF_MAP("ldap", "enabled") and CONF_MAP("centrify", "pam_allow_workaround") ): is_allowed_to_login = False with open("/etc/centrifydc/groups.allow", "r") as f: for group in f: group = group.strip() if group: print pam_user, group, ldap.is_member_of(pam_user, group, "") is_allowed_to_login |= ldap.is_member_of(pam_user, group, "") if not is_allowed_to_login: L.error(t("%s is not allowed here! Bye!") % pam_user) exit(1) if not is_admin: cmd_list = [ "mkdir -p /home/%(user)s" % {"user": pam_user}, "chown root:%(user)s /home/%(user)s" % {"user": pam_user}, "chmod g+rx /home/%(user)s" % {"user": pam_user}, "run-parts --report %s" % CONF_MAP("libpam_script", "auto_mount_dir"), ] completed, pinfo = core.exec_cmd_list(cmd_list) # if not completed: # L.error(t("Chrooting is NOT working! %s") % pinfo) else: print t("Hi!")
def create_wordpress(self): if self.conf.get('wordpress','enabled'): site_path, root_path, log_path, upload_tmp_path = self.generate_dir() wp_tpl_webroot = CONF_MAP('site','wordpress_template_path') + "/webroot" wp_tpl_schema = CONF_MAP('site','wordpress_template_path') + "/schema/wordpress_tpl_schema.sql" wp_webroot_conf = root_path + "/wp-config.php" mysql_user = self.conf.get('mysql','user') mysql_pass = self.conf.get('mysql','pass') mysql_schema = self.conf.get('mysql','schema') site_name = self.conf.get('main','site_name') if inputs.get_input_noyes(t("Do you want deploy the default wordpress template under %s?") % root_path): if files.exists(wp_tpl_webroot): cmd_list = [ "bash -c 'cp -fr %s/* %s/'" % (wp_tpl_webroot, root_path), ] completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(t("Cannot deploy the template.")) else: L.info(t("There is no template under %s") % wp_tpl_webroot) elif inputs.get_input_yesno(t("Do you want to only deploy default plugins?")): if files.exists(wp_tpl_webroot): cmd_list = [ "bash -c 'mkdir -p %s/wp-content/plugins'" % root_path, "bash -c 'cp -fr %s/wp-content/plugins/* %s/wp-content/plugins/'" % (wp_tpl_webroot, root_path), ] completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(t("Cannot deploy plugins.")) else: L.info(t("There is no template under %s") % wp_tpl_webroot) if files.exists(wp_webroot_conf): params_dict = { 'DB_NAME': mysql_schema, 'DB_USER': mysql_user, 'DB_PASSWORD': mysql_pass, 'DB_HOST':'localhost', } for key in params_dict: pattern = "define\(\s*?['\"]%s['\"].*;" % key target = "define('%s', '%s');" % (key, params_dict[key]) files.re_replace_in(wp_webroot_conf, pattern, target) else: L.info(t("There is no wp-config.php under %s") % root_path) if files.exists(wp_tpl_schema) and inputs.get_input_noyes(t("Do you want to restore default database?")): L.info(t("Restoring default schema %s.") % mysql_schema) tmp_file = "/tmp/uwsa_wp_schema_%s" % uuid.uuid4() files.cp(wp_tpl_schema, tmp_file) files.re_replace_in(tmp_file,'UWSA_SCHEMA_NAME', mysql_schema) files.replace_in_php_database(tmp_file,'UWSA_SITE_NAME', site_name) cmd_list = [ { 'command': "bash -c 'mysql -u %s -p%s %s < %s'" % (mysql_user, mysql_pass, mysql_schema, tmp_file), 'anonymous': "bash -c 'mysql -u %s -p%s %s < %s'" % (mysql_user, "XXXXX", mysql_schema, tmp_file), }, ] completed, pinfo = core.exec_cmd_list(cmd_list) if not completed: L.error(t("Failed to restore schema %s!") % mysql_schema) os.remove(tmp_file)