You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-- app passwords are only available for imap, smtp, sieve and pop3 when using sasl
177
-
if req.service == "smtp" or req.service == "imap" or req.service == "sieve" or req.service == "pop3" then
178
-
local cur,errorString = con:execute(string.format([[SELECT app_passwd.id, %s_access AS has_prot_access, app_passwd.password FROM app_passwd
179
-
INNER JOIN mailbox ON mailbox.username = app_passwd.mailbox
180
-
WHERE mailbox = '%s'
181
-
AND app_passwd.active = '1'
182
-
AND mailbox.active = '1'
183
-
AND app_passwd.domain IN (SELECT domain FROM domain WHERE domain='%s' AND active='1')]], con:escape(req.service), con:escape(req.user), con:escape(req.domain)))
184
-
local row = cur:fetch ({}, "a")
185
-
while row do
186
-
if req.password_verify(req, row.password, pass) == 1 then
187
-
-- if password is valid and protocol access is 1 OR real_rip matches SOGo, proceed
188
-
if tostring(req.real_rip) == "__IPV4_SOGO__" then
189
-
cur:close()
190
-
con:close()
191
-
return dovecot.auth.PASSDB_RESULT_OK, ""
192
-
elseif row.has_prot_access == "1" then
193
-
con:execute(string.format([[REPLACE INTO sasl_log (service, app_password, username, real_rip)
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS}${DBNAME} -B -e "DELETE FROM _sogo_static_view WHERE c_uid NOT IN (SELECT username FROM mailbox WHERE active = '1')"
90
-
else
91
-
echo"Waiting for database initialization..."
92
-
sleep 3
93
-
fi
94
-
done
95
-
else
96
-
while [[ ${STATIC_VIEW_OK}!='OK' ]];do
97
-
if [[ !-z$(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS}${DBNAME} -B -e "SELECT 'OK' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '_sogo_static_view'") ]];then
98
-
STATIC_VIEW_OK=OK
99
-
else
100
-
echo"Waiting for database initialization by master..."
101
-
sleep 3
102
-
fi
103
-
done
104
-
fi
105
-
106
-
107
-
# Recreate password update trigger
108
-
if [[ "${MASTER}"=~ ^([yY][eE][sS]|[yY])+$ ]];then
109
-
echo"We are master, preparing update trigger..."
110
-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS}${DBNAME} -e "DROP TRIGGER IF EXISTS sogo_update_password"
111
-
while [[ ${TRIGGER_OK}!='OK' ]];do
112
-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS}${DBNAME}<<EOF
113
-
DELIMITER -
114
-
CREATE TRIGGER sogo_update_password AFTER UPDATE ON _sogo_static_view
115
-
FOR EACH ROW
116
-
BEGIN
117
-
UPDATE mailbox SET password = NEW.c_password WHERE NEW.c_uid = username;
118
-
END;
119
-
-
120
-
DELIMITER ;
121
-
EOF
122
-
if [[ !-z$(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS}${DBNAME} -B -e "SELECT 'OK' FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME = 'sogo_update_password'") ]];then
123
-
TRIGGER_OK=OK
124
-
else
125
-
echo"Will retry to setup SOGo password update trigger in 3s"
126
-
sleep 3
127
-
fi
128
-
done
129
-
fi
130
-
131
27
# cat /dev/urandom seems to hang here occasionally and is not recommended anyway, better use openssl
done<<(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS}${DBNAME} -e "SELECT domain, CASE gal WHEN '1' THEN 'YES' ELSE 'NO' END AS gal FROM domain;" -B -N)
0 commit comments