#pragma implementation #include #include "mailsql.h" #include "mailsql.m" #include #include #include #include extern HELP_FILE help_mailsql; MODULE_DEFINE_VERSION(mailsql); static const char *accounts=NULL; static const char *mailaliases=NULL; static const char *vdomains=NULL; static const char K_MAILSQL[]="mailsql"; static const char K_DBSERV[]="dbserv"; static const char K_DB[]="db"; static const char K_DBUSER[]="dbuser"; static const char K_DBPASS[]="dbpass"; static void mailsql_editpref() { SSTRING dbserv(linuxconf_getval (K_MAILSQL,K_DBSERV,"localhost")); SSTRING db(linuxconf_getval (K_MAILSQL,K_DB,"mailsql")); SSTRING dbuser(linuxconf_getval (K_MAILSQL,K_DBUSER,"")); DIALOG dia; dia.newf_str (MSG_U(F_DBSERV,"Database server"),dbserv); dia.newf_str (MSG_U(F_DBNAME,"Database name"),db); dia.newf_str (MSG_U(F_DBUSER,"User name"),dbuser); SSTRING pass1,pass2; dia.newf_pass (MSG_U(F_PASS1,"Password"),pass1); dia.newf_pass (MSG_U(F_PASS2,"Password (confirm)"),pass2); int nof = 0; while (1){ MENU_STATUS code = dia.edit (MSG_U(T_PREFS,"MailSql settings") ,"",help_nil,nof); if (code == MENU_CANCEL || code == MENU_ESCAPE){ break; }else if (pass1.cmp(pass2)!=0){ xconf_error (MSG_R(E_PASSDIFFER)); }else{ linuxconf_replace (K_MAILSQL,K_DBSERV,dbserv); linuxconf_replace (K_MAILSQL,K_DB,db); linuxconf_replace (K_MAILSQL,K_DBUSER,dbuser); if (pass1.is_filled()){ linuxconf_replace (K_MAILSQL,K_DBPASS,pass1); } linuxconf_save(); mailsql_initdb(); break; } } } void mailsql_initdb() { const char *dbserv = linuxconf_getval (K_MAILSQL,K_DBSERV,"localhost"); const char *db = linuxconf_getval (K_MAILSQL,K_DB,"mailsql"); const char *dbuser = linuxconf_getval (K_MAILSQL,K_DBUSER,NULL); const char *dbpass = linuxconf_getval (K_MAILSQL,K_DBPASS,NULL); query_setdefaultdb (dbserv,db,dbuser,dbpass); } ("mailsql",PACKAGE_REV); tlmp_initmod(); #if 0 module_register_api (USERACCT_API_KEY,USERACCT_API_REV ,sqlusers_useracct_api_get ,sqlusers_useracct_api_release); #endif tb.add (new SSTRING(MSG_U(T_USAGE ,"linuxconf --modulemain mailsql usage\n" "\n" "--deldomain: delete a domain from the database\n" "\n" "Without option, start the main menu\n" ))); if (context == MENU_USER_SPC){ accounts = MSG_U(M_ACCOUNTS,"Virtual mail account (SQL)"); dia.new_menuitem ("",accounts); }else if (context == MENU_USER_ALIAS){ mailaliases = MSG_U(M_ALIASES,"Virtual mail aliases (SQL)"); dia.new_menuitem ("",mailaliases); }else if (context == MENU_MAILCONF){ vdomains = MSG_U(M_DOMAINS,"Virtual mail domains (SQL)"); dia.new_menuitem ("",vdomains); } if (context == MENU_USER_SPC){ if (key == accounts && dialog_mode != DIALOG_TREE){ mailsql_initdb (); vdomain_editusers(); } }else if (context == MENU_USER_ALIAS){ if (key == mailaliases && dialog_mode != DIALOG_TREE){ mailsql_initdb (); vdomain_editaliases(); } }else if (context == MENU_MAILCONF){ if (key == vdomains){ mailsql_initdb (); static const char *tb[]={ "", MSG_U(M_SETTINGS,"settings"), "", MSG_U(M_DOMLIST,"Domains"), NULL }; (MSG_R(M_DOMAINS),"",help_mailsql,tb); if (dialog_mode != DIALOG_TREE){ if (no == 0){ mailsql_editpref(); }else if (no == 1){ vdomain_edit(); } } } } return 0; int ret = LNCF_NOT_APPLICABLE; if (strcmp(msg,"listspc")==0){ mailsql_initdb (); vdomain_listspc (); ret = 0; }else if (strcmp(msg,"mailconf:defclass")==0){ ret = 0; mailsql_initdb (); vdomain_defclass((SSTREAM*)argv[0]); }else if (strcmp(msg,"mailconf:complex_s0")==0){ ret = 0; mailsql_initdb (); vdomain_defrules0 ((SSTREAM*)argv[0]); }else if (strcmp(msg,"mailconf:defmailer")==0){ ret = 0; mailsql_initdb (); vdomain_defmailer((SSTREAM*)argv[0]); } return ret; int ret = LNCF_NOT_APPLICABLE; #if 0 // ### Check the variable key to provide your own html hook ret = 0; #endif return ret; int ret = -1; if (argc == 1){ static const char *menuopt[]={ MSG_U(M_CONFIG,"Configure"),MSG_R(M_SETTINGS), "",MSG_R(M_DOMAINS), "",MSG_R(M_ACCOUNTS), "",MSG_R(M_ALIASES), NULL }; ("","",help_mailsql,menuopt); if (perm_rootaccess (MSG_U(P_VDOMAINS,"manage SQL email domains"))){ mailsql_initdb(); if (no == 0){ mailsql_editpref(); }else if (no == 1){ vdomain_edit(); }else if (no == 2){ vdomain_editusers(); }else if (no == 3){ vdomain_editaliases(); } } }else if (argc == 3 && strcmp(argv[1],"--deldomain")==0){ if (perm_rootaccess (MSG_R(P_VDOMAINS))){ mailsql_initdb(); ret = vdomain_delete (argv[2]); } }else{ printusage(); } return ret;