Last active 1756736771 Unlisted

modification.patch Raw
1diff --git a/src/cyrsasl.erl b/src/cyrsasl.erl
2index 23f1721..f8bc2e5 100644
3--- a/src/cyrsasl.erl
4+++ b/src/cyrsasl.erl
5@@ -53,7 +53,7 @@ start() ->
6 public,
7 {keypos, #sasl_mechanism.mechanism}]),
8 cyrsasl_plain:start([]),
9- cyrsasl_digest:start([]),
10+% cyrsasl_digest:start([]),
11 cyrsasl_scram:start([]),
12 cyrsasl_anonymous:start([]),
13 ok.
14diff --git a/src/ejabberd_auth_odbc.erl b/src/ejabberd_auth_odbc.erl
15index 8ef4c68..b0781df 100644
16--- a/src/ejabberd_auth_odbc.erl
17+++ b/src/ejabberd_auth_odbc.erl
18@@ -69,7 +69,7 @@ check_password(User, Server, Password) ->
19 LUser ->
20 Username = ejabberd_odbc:escape(LUser),
21 LServer = jlib:nameprep(Server),
22- try odbc_queries:get_password(LServer, Username) of
23+ try odbc_queries:check_password(LServer, Username, Password) of
24 {selected, ["password"], [{Password}]} ->
25 Password /= ""; %% Password is correct, and not empty
26 {selected, ["password"], [{_Password2}]} ->
27@@ -92,7 +92,7 @@ check_password(User, Server, Password, Digest, DigestGen) ->
28 LUser ->
29 Username = ejabberd_odbc:escape(LUser),
30 LServer = jlib:nameprep(Server),
31- try odbc_queries:get_password(LServer, Username) of
32+ try odbc_queries:check_password(LServer, Username, Password) of
33 %% Account exists, check if password is valid
34 {selected, ["password"], [{Passwd}]} ->
35 DigRes = if
36diff --git a/src/odbc/mysql.sql b/src/odbc/mysql.sql
37index c2611b0..bb02e78 100644
38--- a/src/odbc/mysql.sql
39+++ b/src/odbc/mysql.sql
40@@ -273,3 +273,28 @@ CREATE TABLE motd (
41 xml text,
42 created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
43 ) CHARACTER SET utf8;
44+
45+DELIMITER $$
46+DROP FUNCTION IF EXISTS ejabberdPW;
47+CREATE FUNCTION ejabberdPW(pw VARCHAR(255)) RETURNS CHAR(34)
48+BEGIN
49+ DECLARE salt CHAR(12) DEFAULT "$1$";
50+ DECLARE i SMALLINT DEFAULT 0;
51+ salt_loop: LOOP
52+ SET salt=CONCAT(salt,
53+ ELT(FLOOR(RAND() * 1000) % 62 +1,
54+ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
55+ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
56+ '0','1','2','3','4','5','6','7','8','9'));
57+ SET i = i + 1;
58+ IF i = 9 THEN
59+ LEAVE salt_loop;
60+ END IF;
61+ END LOOP salt_loop;
62+ RETURN ENCRYPT(pw, salt);
63+END$$
64+DROP FUNCTION IF EXISTS check_password;
65+CREATE FUNCTION check_password(U VARCHAR(255), P VARCHAR(255)) RETURNS BOOLEAN
66+BEGIN
67+ RETURN (SELECT COUNT(*) FROM users WHERE username = U and password = ENCRYPT(P, password) LIMIT 1);
68+END$$
69diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl
70index 3ec3b1b..917160b 100644
71--- a/src/odbc/odbc_queries.erl
72+++ b/src/odbc/odbc_queries.erl
73@@ -33,6 +33,7 @@
74 get_last/2,
75 set_last_t/4,
76 del_last/2,
77+ check_password/3,
78 get_password/2,
79 set_password_t/3,
80 add_user/3,
81@@ -164,6 +165,12 @@ del_last(LServer, Username) ->
82 LServer,
83 ["delete from last where username='", Username, "'"]).
84
85+check_password(LServer, Username, Password) ->
86+ ejabberd_odbc:sql_query(
87+ LServer,
88+ ["select if ((select count(*) from users where username = '", Username, "' AND "
89+ "password = encrypt('", Password, "', password) LIMIT 1) = 1,'", Password, "', NULL) as password"]).
90+
91 get_password(LServer, Username) ->
92 ejabberd_odbc:sql_query(
93 LServer,
94@@ -171,19 +178,15 @@ get_password(LServer, Username) ->
95 "where username='", Username, "';"]).
96
97 set_password_t(LServer, Username, Pass) ->
98- ejabberd_odbc:sql_transaction(
99- LServer,
100- fun() ->
101- update_t("users", ["username", "password"],
102- [Username, Pass],
103- ["username='", Username ,"'"])
104- end).
105+ ejabberd_odbc:sql_query(
106+ LServer,
107+ ["update users set password = ejabberdPW('", Pass, "') where username = '", Username, "'"]).
108
109 add_user(LServer, Username, Pass) ->
110 ejabberd_odbc:sql_query(
111 LServer,
112 ["insert into users(username, password) "
113- "values ('", Username, "', '", Pass, "');"]).
114+ "values ('", Username, "', ejabberdPW('", Pass, "'));"]).
115
116 del_user(LServer, Username) ->
117 ejabberd_odbc:sql_query(
118
queries.sql Raw
1INSERT INTO
2 users
3 SELECT
4 username,
5 password,
6 FROM_UNIXTIME(time)
7 FROM
8 authreg LEFT JOIN active ON CONCAT(authreg.username, '@', authreg.realm) = active.`collection-owner`;
9INSERT INTO
10 last
11 SELECT
12 username,
13 time AS seconds,
14 "" AS state
15 FROM
16 authreg, logout
17 WHERE
18 `collection-owner` = CONCAT(username, "@", realm);
19INSERT INTO
20 rosterusers
21 SELECT
22 SUBSTRING_INDEX(`roster-items`.`collection-owner`,"@",1) AS username,
23 `roster-items`.jid AS jid,
24 `roster-items`.name AS nick,
25 IF(`roster-items`.`to` = 1 AND `roster-items`.`from` = 1, 'B', IF(`roster-items`.`to` = 1,'T','F')) AS suscription,
26 CASE `roster-items`.ask WHEN 0 THEN 'N' WHEN 1 THEN 'O' ELSE 'I' END AS ask,
27 '' AS askmessage,
28 'N' as server,
29 '' as subscribe,
30 'item' as `type`,
31 CURRENT_TIMESTAMP as created_at
32 FROM
33 `roster-items`
34 ORDER BY jid;
35INSERT INTO
36 rostergroups
37 SELECT
38 SUBSTRING_INDEX(`collection-owner`,"@", 1) AS username,
39 jid,
40 `group` AS grp
41 FROM
42 `roster-groups`;
43