1 /*
2  * $Id: voracle.h 1014 2011-02-03 16:04:37Z volz0r $
3  * Copyright (C) 1999-2009 Inter7 Internet Technologies, Inc.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18  */
19 #ifndef VPOPMAIL_ORACLE_H
20 #define VPOPMAIL_ORACLE_H
21 
22 /* Edit to match your set up */
23 #define ORACLE_SERVICE       "service"
24 #define ORACLE_USER          "user"
25 #define ORACLE_PASSWD        "password"
26 #define ORACLE_DATABASE      "orcl1"
27 #define ORACLE_HOME          "ORACLE_HOME=/db/u01/app/oracle/product/8.1.7"
28 /* End of setup section*/
29 
30 /* defaults - no need to change */
31 #define ORACLE_DEFAULT_TABLE "vpopmail"
32 #define ORACLE_DOT_CHAR '_'
33 #define ORACLE_LARGE_USERS_TABLE "users"
34 
35 #ifdef MANY_DOMAINS
36 #ifdef CLEAR_PASS
37 #define TABLE_LAYOUT "pw_name char(32) not null, \
38 pw_domain char(96) not NULL, \
39 pw_passwd char(40), \
40 pw_uid int, pw_gid int, \
41 pw_gecos char(48), \
42 pw_dir char(160), \
43 pw_shell char(20), \
44 pw_clear_passwd char(16), \
45 primary key (pw_name, pw_domain ) "
46 #else
47 #define TABLE_LAYOUT "pw_name char(32) not null, \
48 pw_domain char(96) not null, \
49 pw_passwd char(40), \
50 pw_uid int, pw_gid int, \
51 pw_gecos char(48), \
52 pw_dir char(160), \
53 pw_shell char(20), \
54 primary key (pw_name, pw_domain ) "
55 #endif
56 #else
57 #ifdef CLEAR_PASS
58 #define TABLE_LAYOUT "pw_name char(32) not null, \
59 pw_passwd char(40), \
60 pw_uid int, pw_gid int, \
61 pw_gecos char(48), \
62 pw_dir char(160), \
63 pw_shell char(20), \
64 pw_clear_passwd char(16), \
65 primary key (pw_name ) "
66 #else
67 #define TABLE_LAYOUT "pw_name char(32) not null, \
68 pw_passwd char(40), \
69 pw_uid int, pw_gid int, \
70 pw_gecos char(48), \
71 pw_dir char(160), \
72 pw_shell char(20), \
73 primary key (pw_name ) "
74 #endif
75 #endif
76 
77 #define RELAY_TABLE_LAYOUT "ip_addr char(18) not null, \
78 timestamp char(12), primary key (ip_addr)"
79 
80 #define LASTAUTH_TABLE_LAYOUT \
81 "pw_user char(32) NOT NULL, \
82 pw_domain char(96) NOT NULL,\
83 remote_ip char(18) not null,  \
84 timestamp int default 0 NOT NULL, \
85 primary key (pw_user, pw_domain)"
86 
87 char *vauth_munch_domain(char *);
88 
89 int vauth_adddomain_size(char *, int);
90 int vauth_deldomain_size(char *, int);
91 int vauth_adduser_size(char *, char *, char *, char *, char *, int, int);
92 int vauth_deluser_size(char *, char *, int);
93 int vauth_vpasswd_size( char *, char *, char *, int, int);
94 int vauth_setquota_size( char *, char *, char *, int);
95 struct vqpasswd *vauth_getpw_size(char *, char *, int);
96 struct vqpasswd *vauth_user_size(char *, char *, char*, char *, int);
97 struct vqpasswd *vauth_getall_size(char *, int, int, int);
98 int vauth_setpw_size( struct vqpasswd *, char *, int);
99 
100 #ifdef MANY_DOMAINS
101 #ifdef CLEAR_PASS
102 #define INSERT "insert into %s \
103 ( pw_name, pw_domain, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell \
104 , pw_clear_passwd ) values ( '%s', '%s', \
105 '%s', %d, 0, '%s', '%s', '%s' ,'%s' )"
106 #else
107 #define INSERT "insert into %s \
108 ( pw_name, pw_domain, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell \
109 ) values ( '%s', '%s', \
110 '%s', %d, 0, '%s', '%s', '%s' )"
111 #endif
112 #else
113 #ifdef CLEAR_PASS
114 #define INSERT "insert into %s \
115 ( pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell \
116 , pw_clear_passwd ) values ( '%s', \
117 '%s', %d, 0, '%s', '%s', '%s' ,'%s' )"
118 #else
119 #define INSERT "insert into %s \
120 ( pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell \
121  ) values ( '%s', \
122 '%s', %d, 0, '%s', '%s', '%s' )"
123 #endif
124 #endif
125 
126 #ifdef MANY_DOMAINS
127 #define DELETE_USER "delete from %s where pw_name = '%s' \
128 and pw_domain = '%s' "
129 #else
130 #define DELETE_USER "delete from %s where pw_name = '%s' "
131 #endif
132 
133 
134 #ifdef MANY_DOMAINS
135 #define SETQUOTA "update %s set pw_shell = '%s' where pw_name = '%s' \
136 and pw_domain = '%s' "
137 #else
138 #define SETQUOTA "update %s set pw_shell = '%s' where pw_name = '%s' "
139 #endif
140 
141 #ifdef MANY_DOMAINS
142 #ifdef CLEAR_PASS
143 #define USER_SELECT "select pw_name, pw_passwd, pw_uid, pw_gid, \
144 pw_gecos, pw_dir, pw_shell , pw_clear_passwd \
145 from %s where pw_name = '%s' and pw_domain = '%s' "
146 #else
147 #define USER_SELECT "select pw_name, pw_passwd, pw_uid, pw_gid, \
148 pw_gecos, pw_dir, pw_shell \
149 from %s where pw_name = '%s' and pw_domain = '%s' "
150 #endif
151 #else
152 #ifdef CLEAR_PASS
153 #define USER_SELECT "select pw_name, pw_passwd, pw_uid, pw_gid, \
154 pw_gecos, pw_dir, pw_shell , pw_clear_passwd \
155 from %s where pw_name = '%s' "
156 #else
157 #define USER_SELECT "select pw_name, pw_passwd, pw_uid, pw_gid, \
158 pw_gecos, pw_dir, pw_shell \
159 from %s where pw_name = '%s'  "
160 #endif
161 #endif
162 
163 #ifdef MANY_DOMAINS
164 #ifdef CLEAR_PASS
165 #define GETALL "select pw_name, \
166 pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell, \
167 pw_clear_passwd from %s where pw_domain = '%s'"
168 #else
169 #define GETALL "select pw_name, \
170 pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell \
171 from %s where pw_domain = '%s'"
172 #endif
173 #else
174 #ifdef CLEAR_PASS
175 #define GETALL "select pw_name, \
176 pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell, \
177 pw_clear_passwd from %s"
178 #else
179 #define GETALL "select pw_name, \
180 pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell from %s "
181 #endif
182 #endif
183 
184 #ifdef MANY_DOMAINS
185 #ifdef CLEAR_PASS
186 #define SETPW "update %s set pw_passwd = '%s', \
187 pw_uid = %d, pw_gid = %d, pw_gecos = '%s', pw_dir = '%s', \
188 pw_shell = '%s' \
189 , pw_clear_passwd = '%s' \
190 where pw_name = '%s' \
191 and pw_domain = '%s' "
192 #else
193 #define SETPW "update %s set pw_passwd = '%s', \
194 pw_uid = %d, pw_gid = %d, pw_gecos = '%s', pw_dir = '%s', \
195 pw_shell = '%s' \
196 where pw_name = '%s' \
197 and pw_domain = '%s' "
198 #endif
199 #else
200 #ifdef CLEAR_PASS
201 #define SETPW "update %s set pw_passwd = '%s', \
202 pw_uid = %d, pw_gid = %d, pw_gecos = '%s', pw_dir = '%s', \
203 pw_shell = '%s' \
204 , pw_clear_passwd = '%s' \
205 where pw_name = '%s' "
206 #else
207 #define SETPW "update %s set pw_passwd = '%s', \
208 pw_uid = %d, pw_gid = %d, pw_gecos = '%s', pw_dir = '%s', \
209 pw_shell = '%s' \
210 where pw_name = '%s' "
211 #endif
212 #endif
213 
214 #ifdef IP_ALIAS_DOMAINS
215 #define IP_ALIAS_TABLE_LAYOUT "ip_addr char(18) not null, domain char(96),  primary key(ip_addr)"
216 #endif
217 
218 #define DIR_CONTROL_TABLE_LAYOUT "domain char(96) not null, cur_users int, \
219 level_cur int, level_max int, \
220 level_start0 int, level_start1 int, level_start2 int, \
221 level_end0 int, level_end1 int, level_end2 int, \
222 level_mod0 int, level_mod1 int, level_mod2 int, \
223 level_index0 int , level_index1 int, level_index2 int, the_dir char(160), \
224 primary key (domain) "
225 
226 #define DIR_CONTROL_SELECT "cur_users, \
227 level_cur, level_max, \
228 level_start0, level_start1, level_start2, \
229 level_end0, level_end1, level_end2, \
230 level_mod0, level_mod1, level_mod2, \
231 level_index0, level_index1, level_index2, the_dir"
232 
233 #define VALIAS_TABLE_LAYOUT "alias char(32) not null, \
234 domain char(96) not null, \
235 valias_line varchar(255) not null "
236 
237 #endif
238 
239 #ifdef ENABLE_SQL_LOGGING
240 #define VLOG_TABLE_LAYOUT "id BIGINT PRIMARY KEY AUTO_INCREMENT, \
241       user char(32), passwd CHAR(32), \
242       domain CHAR(96), logon VARCHAR(200), \
243       remoteip char(18), message VARCHAR(255), \
244       timestamp int default 0 NOT NULL, error INT, \
245       INDEX user_idx (user), \
246       INDEX domain_idx (domain), INDEX remoteip_idx (remoteip), \
247       INDEX error_idx (error), INDEX message_idx (message)"
248 #endif
249 
250 #ifdef ENABLE_ORACLE_LIMITS
251 #define LIMITS_TABLE_LAYOUT "domain CHAR(96) PRIMARY KEY, \
252       maxpopaccounts          INT(10) NOT NULL DEFAULT -1, \
253       maxaliases              INT(10) NOT NULL DEFAULT -1, \
254       maxforwards             INT(10) NOT NULL DEFAULT -1, \
255       maxautoresponders       INT(10) NOT NULL DEFAULT -1, \
256       maxmailinglists         INT(10) NOT NULL DEFAULT -1, \
257       diskquota               INT(12) NOT NULL DEFAULT 0, \
258       defaultquota            INT(12) NOT NULL DEFAULT 0, \
259       disablepop              TINYINT(1) NOT NULL DEFAULT 0, \
260       disableimap             TINYINT(1) NOT NULL DEFAULT 0, \
261       disabledialup           TINYINT(1) NOT NULL DEFAULT 0, \
262       disablepasswordchanging TINYINT(1) NOT NULL DEFAULT 0, \
263       disablewebmail          TINYINT(1) NOT NULL DEFAULT 0, \
264       disablerelay            TINYINT(1) NOT NULL DEFAULT 0, \
265       disablesmtp             TINYINT(1) NOT NULL DEFAULT 0"
266 #endif
267 
268 
269 
270