Limit Login Attempts - Version 1.3.2

Version Description

Download this release

Release Info

Developer johanee
Plugin Icon wp plugin Limit Login Attempts
Version 1.3.2
Comparing to
See all releases

Code changes from version 2.0beta1 to 1.3.2

images/icon_bad.gif DELETED
Binary file
limit-login-attempts-bg_BG.mo ADDED
Binary file
limit-login-attempts-bg_BG.po ADDED
@@ -0,0 +1,278 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Limit Login Attempts German Translation
2
+ # Copyright (C) 2009 Johan Eenfeldt
3
+ # This file is distributed under the same license as the Wordpress package.
4
+ # Johan Eenfeldt <johan.eenfeldt@kostdoktorn.se>, 2009.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: limit-login-attempts 1.3\n"
9
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/limit-login-attempts\n"
10
+ "POT-Creation-Date: 2009-01-28 17:17+0000\n"
11
+ "PO-Revision-Date: 2009-06-11 18:42+0200\n"
12
+ "Last-Translator: Hristo Chakarov <mail@ickata.net>\n"
13
+ "Language-Team: iNetStudio <mail@ickata.net>\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "X-Poedit-Language: Bulgarian\n"
19
+ "X-Poedit-Country: BULGARIA\n"
20
+ "X-Poedit-KeywordsList: __;_e;_ngettext:1,2\n"
21
+
22
+ #: limit-login-attempts.php:372
23
+ #, php-format
24
+ msgid "%d hour"
25
+ msgid_plural "%d hours"
26
+ msgstr[0] "%d час"
27
+ msgstr[1] "%d часа"
28
+
29
+ #: limit-login-attempts.php:378
30
+ #, php-format
31
+ msgid "%d minute"
32
+ msgid_plural "%d minutes"
33
+ msgstr[0] "%d минута"
34
+ msgstr[1] "%d минути"
35
+
36
+ #: limit-login-attempts.php:381
37
+ #, php-format
38
+ msgid "[%s] Too many failed login attempts"
39
+ msgstr "[%s] Твърде много грешни опити за вход"
40
+
41
+ #: limit-login-attempts.php:383
42
+ #, php-format
43
+ msgid "%d failed login attempts (%d lockout(s)) from IP: %s"
44
+ msgstr "%d грешни опити за вход (%d заключвания) от IP: %s"
45
+
46
+ #: limit-login-attempts.php:387
47
+ #, php-format
48
+ msgid "Last user attempted: %s"
49
+ msgstr "Последно потребителя е опитал: %s"
50
+
51
+ #: limit-login-attempts.php:390
52
+ #, php-format
53
+ msgid "IP was blocked for %s"
54
+ msgstr "IP е блокирано за %s."
55
+
56
+ #: limit-login-attempts.php:445
57
+ msgid "<strong>ERROR</strong>: Too many failed login attempts."
58
+ msgstr "<strong>ГРЕШКА</strong>: Твърде много грешни опита за вход."
59
+
60
+ #: limit-login-attempts.php:449
61
+ msgid "Please try again later."
62
+ msgstr "Моля, опитайте отново по-късно."
63
+
64
+ #: limit-login-attempts.php:456
65
+ #, php-format
66
+ msgid "Please try again in %d hour."
67
+ msgid_plural "Please try again in %d hours."
68
+ msgstr[0] "Моля, опитайте пак след %d час."
69
+ msgstr[1] "Моля, опитайте пак след %d часа."
70
+
71
+ #: limit-login-attempts.php:458
72
+ #, php-format
73
+ msgid "Please try again in %d minute."
74
+ msgid_plural "Please try again in %d minutes."
75
+ msgstr[0] "Моля, опитайте пак след %d минута."
76
+ msgstr[1] "Моля, опитайте пак след %d минути."
77
+
78
+ #: limit-login-attempts.php:487
79
+ #, php-format
80
+ msgid "<strong>%d</strong> attempt remaining."
81
+ msgid_plural "<strong>%d</strong> attempts remaining."
82
+ msgstr[0] "Имате право на <strong>само %d</strong> опит!"
83
+ msgstr[1] "Имате право на още <strong>%d</strong> опита."
84
+
85
+ #: limit-login-attempts.php:551
86
+ msgid "<strong>ERROR</strong>: Incorrect username or password."
87
+ msgstr "<strong>ГРЕШКА</strong>: Грешно потребителско име или парола."
88
+
89
+ #: limit-login-attempts.php:714
90
+ msgid "IP|Internet address"
91
+ msgstr "IP"
92
+
93
+ #: limit-login-attempts.php:714
94
+ msgid "Tried to log in as"
95
+ msgstr "Опитва да влезе като"
96
+
97
+ #: limit-login-attempts.php:719
98
+ #, php-format
99
+ msgid "%d lockout"
100
+ msgid_plural "%d lockouts"
101
+ msgstr[0] "%d заключване"
102
+ msgstr[1] "%d заключвания"
103
+
104
+ #: limit-login-attempts.php:743
105
+ msgid "Cleared IP log"
106
+ msgstr "IP логът беше зачистен"
107
+
108
+ #: limit-login-attempts.php:751
109
+ msgid "Reset lockout count"
110
+ msgstr "Нулирай броя заключвания"
111
+
112
+ #: limit-login-attempts.php:759
113
+ msgid "Cleared current lockouts"
114
+ msgstr "Заключванията са изчистени"
115
+
116
+ #: limit-login-attempts.php:788
117
+ msgid "Options changed"
118
+ msgstr "Настройките са запазени"
119
+
120
+ #: limit-login-attempts.php:799
121
+ msgid "<strong>NOTE:</strong> Only works in Wordpress 2.7 or later"
122
+ msgstr "<strong>ЗАБЕЛЕЖКА:</strong> Работи само с WordPress версия 2.7+"
123
+
124
+ #: limit-login-attempts.php:815
125
+ #, php-format
126
+ msgid "It appears the site is reached directly (from your IP: %s)"
127
+ msgstr "Изглежда сайтът е достъпен директно (от IP: %s)"
128
+
129
+ #: limit-login-attempts.php:817
130
+ #, php-format
131
+ msgid "It appears the site is reached through a proxy server (proxy IP: %s, your IP: %s)"
132
+ msgstr "Изглежда сайтът е достъпен през прокси сървър (IP на прокси сървъра: %s, IP на сайта: %s)"
133
+
134
+ #: limit-login-attempts.php:825
135
+ #, php-format
136
+ msgid "<strong>Current setting appears to be invalid</strong>. Please make sure it is correct. Further information can be found <a href=\"%s\" title=\"FAQ\">here</a>"
137
+ msgstr "<strong>Настройките са невалидни</strong>. Повече информация <a href=\"%s\" title=\"FAQ\">тук</a>"
138
+
139
+ #: limit-login-attempts.php:833
140
+ msgid "Limit Login Attempts Settings"
141
+ msgstr "Limit Login Attempts Настройки"
142
+
143
+ #: limit-login-attempts.php:834
144
+ msgid "Statistics"
145
+ msgstr "Статистики"
146
+
147
+ #: limit-login-attempts.php:838
148
+ msgid "Total lockouts"
149
+ msgstr "Общо заключвания"
150
+
151
+ #: limit-login-attempts.php:841
152
+ msgid "Reset Counter"
153
+ msgstr "Нулирай брояча"
154
+
155
+ #: limit-login-attempts.php:842
156
+ #, php-format
157
+ msgid "%d lockout since last reset"
158
+ msgid_plural "%d lockouts since last reset"
159
+ msgstr[0] "%d заключване от последното нулиране"
160
+ msgstr[1] "%d заключвания от последното нулиране"
161
+
162
+ #: limit-login-attempts.php:843
163
+ msgid "No lockouts yet"
164
+ msgstr "Няма заключвания досега"
165
+
166
+ #: limit-login-attempts.php:848
167
+ msgid "Active lockouts"
168
+ msgstr "Активни заключвания"
169
+
170
+ #: limit-login-attempts.php:850
171
+ msgid "Restore Lockouts"
172
+ msgstr "Поднови заключванията"
173
+
174
+ #: limit-login-attempts.php:851
175
+ #, php-format
176
+ msgid "%d IP is currently blocked from trying to log in"
177
+ msgstr "%d IP е блокирано"
178
+
179
+ #: limit-login-attempts.php:857
180
+ msgid "Options"
181
+ msgstr "Настройки"
182
+
183
+ #: limit-login-attempts.php:861
184
+ msgid "Lockout"
185
+ msgstr "Заключване"
186
+
187
+ #: limit-login-attempts.php:863
188
+ msgid "allowed retries"
189
+ msgstr "позволени опити"
190
+
191
+ #: limit-login-attempts.php:864
192
+ msgid "minutes lockout"
193
+ msgstr "минути заключване"
194
+
195
+ #: limit-login-attempts.php:865
196
+ msgid "lockouts increase lockout time to"
197
+ msgstr "заключвания увеличават времето на заключване на "
198
+
199
+ #: limit-login-attempts.php:865
200
+ msgid "hours"
201
+ msgstr "часа"
202
+
203
+ #: limit-login-attempts.php:866
204
+ msgid "hours until retries are reset"
205
+ msgstr "часа грешните опити се нулират"
206
+
207
+ #: limit-login-attempts.php:870
208
+ msgid "Site connection"
209
+ msgstr "Връзка към сайта"
210
+
211
+ #: limit-login-attempts.php:876
212
+ msgid "Direct connection"
213
+ msgstr "Директна връзка"
214
+
215
+ #: limit-login-attempts.php:881
216
+ msgid "From behind a reversy proxy"
217
+ msgstr "През Прокси сървър"
218
+
219
+ #: limit-login-attempts.php:887
220
+ msgid "Handle cookie login"
221
+ msgstr "Наблюдавай cookie login"
222
+
223
+ #: limit-login-attempts.php:889
224
+ msgid "Yes"
225
+ msgstr "Да"
226
+
227
+ #: limit-login-attempts.php:889
228
+ msgid "No"
229
+ msgstr "Не"
230
+
231
+ #: limit-login-attempts.php:894
232
+ msgid "Notify on lockout"
233
+ msgstr "Уведомявай при заключване"
234
+
235
+ #: limit-login-attempts.php:896
236
+ msgid "Log IP"
237
+ msgstr "Log IP"
238
+
239
+ #: limit-login-attempts.php:897
240
+ msgid "Email to admin after"
241
+ msgstr "Прати Email до администратора след"
242
+
243
+ #: limit-login-attempts.php:897
244
+ msgid "lockouts"
245
+ msgstr "заключвания"
246
+
247
+ #: limit-login-attempts.php:902
248
+ msgid "Change Options"
249
+ msgstr "Обнови настройки"
250
+
251
+ #: limit-login-attempts.php:910
252
+ msgid "Lockout log"
253
+ msgstr "Лог на заключванията"
254
+
255
+ #: limit-login-attempts.php:914
256
+ msgid "Clear Log"
257
+ msgstr "Изчисти лог"
258
+
259
+ #. Plugin Name of an extension
260
+ msgid "Limit Login Attempts"
261
+ msgstr "Limit Login Attempts"
262
+
263
+ #. Plugin URI of an extension
264
+ msgid "http://devel.kostdoktorn.se/limit-login-attempts"
265
+ msgstr "http://devel.kostdoktorn.se/limit-login-attempts"
266
+
267
+ #. Description of an extension
268
+ msgid "Limit rate of login attempts, including by way of cookies, for each IP."
269
+ msgstr "Ограничава броя на опитите за вход, включително тези от cookies, за всяко различно IP."
270
+
271
+ #. Author of an extension
272
+ msgid "Johan Eenfeldt"
273
+ msgstr "Johan Eenfeldt"
274
+
275
+ #. Author URI of an extension
276
+ msgid "http://devel.kostdoktorn.se"
277
+ msgstr "http://devel.kostdoktorn.se"
278
+
limit-login-attempts-es_ES.mo ADDED
Binary file
limit-login-attempts-es_ES.po ADDED
@@ -0,0 +1,277 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Limit Login Attempts German Translation
2
+ # Copyright (C) 2009 Johan Eenfeldt
3
+ # This file is distributed under the same license as the Wordpress package.
4
+ # Johan Eenfeldt <johan.eenfeldt@kostdoktorn.se>, 2009.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: limit-login-attempts 1.3\n"
9
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/limit-login-attempts\n"
10
+ "POT-Creation-Date: 2009-01-28 17:17+0000\n"
11
+ "PO-Revision-Date: 2009-07-25 08:07-0300\n"
12
+ "Last-Translator: Marcelo Pedra <marcelo@ampm-soluciones.com.ar>\n"
13
+ "Language-Team: Español <marcelo@ampm-soluciones.com.ar>\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "X-Poedit-Language: Spanish\n"
19
+ "X-Poedit-Country: ARGENTINA\n"
20
+
21
+ #: limit-login-attempts.php:372
22
+ #, php-format
23
+ msgid "%d hour"
24
+ msgid_plural "%d hours"
25
+ msgstr[0] "%d hora"
26
+ msgstr[1] "%d horas"
27
+
28
+ #: limit-login-attempts.php:378
29
+ #, php-format
30
+ msgid "%d minute"
31
+ msgid_plural "%d minutes"
32
+ msgstr[0] "%d minuto"
33
+ msgstr[1] "%d minutos"
34
+
35
+ #: limit-login-attempts.php:381
36
+ #, php-format
37
+ msgid "[%s] Too many failed login attempts"
38
+ msgstr "[%s] Demasiados intentos de acceso fallidos"
39
+
40
+ #: limit-login-attempts.php:383
41
+ #, php-format
42
+ msgid "%d failed login attempts (%d lockout(s)) from IP: %s"
43
+ msgstr "%d intentos de acceso fallidos (%d bloqueo(s)) desde la IP: %s"
44
+
45
+ #: limit-login-attempts.php:387
46
+ #, php-format
47
+ msgid "Last user attempted: %s"
48
+ msgstr "Ultimo usuario probado: %s"
49
+
50
+ #: limit-login-attempts.php:390
51
+ #, php-format
52
+ msgid "IP was blocked for %s"
53
+ msgstr "La IP se ha bloqueado para %s"
54
+
55
+ #: limit-login-attempts.php:445
56
+ msgid "<strong>ERROR</strong>: Too many failed login attempts."
57
+ msgstr "<strong>ERROR</strong>: Demasiados intentos de acceso fallidos."
58
+
59
+ #: limit-login-attempts.php:449
60
+ msgid "Please try again later."
61
+ msgstr "Por favor inténtelo más tarde."
62
+
63
+ #: limit-login-attempts.php:456
64
+ #, php-format
65
+ msgid "Please try again in %d hour."
66
+ msgid_plural "Please try again in %d hours."
67
+ msgstr[0] "Por favor inténtelo dentro de %d hora."
68
+ msgstr[1] "Por favor inténtelo dentro de %d horas."
69
+
70
+ #: limit-login-attempts.php:458
71
+ #, php-format
72
+ msgid "Please try again in %d minute."
73
+ msgid_plural "Please try again in %d minutes."
74
+ msgstr[0] "Por favor inténtelo dentro de %d minuto."
75
+ msgstr[1] "Por favor inténtelo dentro de %d minutos."
76
+
77
+ #: limit-login-attempts.php:487
78
+ #, php-format
79
+ msgid "<strong>%d</strong> attempt remaining."
80
+ msgid_plural "<strong>%d</strong> attempts remaining."
81
+ msgstr[0] "Le queda <strong>%d</strong> intento más."
82
+ msgstr[1] "Le quedan <strong>%d</strong> intentos más."
83
+
84
+ #: limit-login-attempts.php:551
85
+ msgid "<strong>ERROR</strong>: Incorrect username or password."
86
+ msgstr "<strong>ERROR</strong>: Nombre de usuario o contraseña incorrectos."
87
+
88
+ #: limit-login-attempts.php:714
89
+ msgid "IP|Internet address"
90
+ msgstr "IP|Dirección de Internet"
91
+
92
+ #: limit-login-attempts.php:714
93
+ msgid "Tried to log in as"
94
+ msgstr "Intentó ingresar como"
95
+
96
+ #: limit-login-attempts.php:719
97
+ #, php-format
98
+ msgid "%d lockout"
99
+ msgid_plural "%d lockouts"
100
+ msgstr[0] "%d bloqueo"
101
+ msgstr[1] "%d bloqueos"
102
+
103
+ #: limit-login-attempts.php:743
104
+ msgid "Cleared IP log"
105
+ msgstr "Direcciones liberadas"
106
+
107
+ #: limit-login-attempts.php:751
108
+ msgid "Reset lockout count"
109
+ msgstr "Reiniciar contador de bloqueos"
110
+
111
+ #: limit-login-attempts.php:759
112
+ msgid "Cleared current lockouts"
113
+ msgstr "Bloqueos actuales liberados"
114
+
115
+ #: limit-login-attempts.php:788
116
+ msgid "Options changed"
117
+ msgstr "Opciones actualizadas"
118
+
119
+ #: limit-login-attempts.php:799
120
+ msgid "<strong>NOTE:</strong> Only works in Wordpress 2.7 or later"
121
+ msgstr "<strong>NOTA:</strong> Este plugin sólo funciona en Wordpress 2.7 o superior"
122
+
123
+ #: limit-login-attempts.php:815
124
+ #, php-format
125
+ msgid "It appears the site is reached directly (from your IP: %s)"
126
+ msgstr "Al parecer, el sitio está siendo accedido directamente (desde tu IP: %s)"
127
+
128
+ #: limit-login-attempts.php:817
129
+ #, php-format
130
+ msgid "It appears the site is reached through a proxy server (proxy IP: %s, your IP: %s)"
131
+ msgstr "Al parecer, el sitio está siendo accedido desde un servidor proxy (IP del proxy: %s, tu IP: %s)"
132
+
133
+ #: limit-login-attempts.php:825
134
+ #, php-format
135
+ msgid "<strong>Current setting appears to be invalid</strong>. Please make sure it is correct. Further information can be found <a href=\"%s\" title=\"FAQ\">here</a>"
136
+ msgstr "<strong>La configuración actual parece ser incorrecta</strong>. Asegúrate de verificarla. Para mayor información, <a href=\"%s\" title=\"FAQ\">click aquí</a>"
137
+
138
+ #: limit-login-attempts.php:833
139
+ msgid "Limit Login Attempts Settings"
140
+ msgstr "Preferencias del Limitador de Acceso"
141
+
142
+ #: limit-login-attempts.php:834
143
+ msgid "Statistics"
144
+ msgstr "Estadísticas"
145
+
146
+ #: limit-login-attempts.php:838
147
+ msgid "Total lockouts"
148
+ msgstr "Bloqueos totales"
149
+
150
+ #: limit-login-attempts.php:841
151
+ msgid "Reset Counter"
152
+ msgstr "Reiniciar contador"
153
+
154
+ #: limit-login-attempts.php:842
155
+ #, php-format
156
+ msgid "%d lockout since last reset"
157
+ msgid_plural "%d lockouts since last reset"
158
+ msgstr[0] "%d bloqueo desde el último reinicio."
159
+ msgstr[1] "%d bloqueos desde el último reinicio."
160
+
161
+ #: limit-login-attempts.php:843
162
+ msgid "No lockouts yet"
163
+ msgstr "Ningún bloqueo hasta ahora"
164
+
165
+ #: limit-login-attempts.php:848
166
+ msgid "Active lockouts"
167
+ msgstr "Bloqueos activos"
168
+
169
+ #: limit-login-attempts.php:850
170
+ msgid "Restore Lockouts"
171
+ msgstr "Restablecer bloqueos"
172
+
173
+ #: limit-login-attempts.php:851
174
+ #, php-format
175
+ msgid "%d IP is currently blocked from trying to log in"
176
+ msgstr "La IP %d actualmente tiene restringido el acceso"
177
+
178
+ #: limit-login-attempts.php:857
179
+ msgid "Options"
180
+ msgstr "Opciones"
181
+
182
+ #: limit-login-attempts.php:861
183
+ msgid "Lockout"
184
+ msgstr "Bloqueo"
185
+
186
+ #: limit-login-attempts.php:863
187
+ msgid "allowed retries"
188
+ msgstr "reintentos permitidos"
189
+
190
+ #: limit-login-attempts.php:864
191
+ msgid "minutes lockout"
192
+ msgstr "minutos por bloqueo"
193
+
194
+ #: limit-login-attempts.php:865
195
+ msgid "lockouts increase lockout time to"
196
+ msgstr "bloqueos incrementan el tiempo a"
197
+
198
+ #: limit-login-attempts.php:865
199
+ msgid "hours"
200
+ msgstr "horas"
201
+
202
+ #: limit-login-attempts.php:866
203
+ msgid "hours until retries are reset"
204
+ msgstr "horas hasta restablecer los reintentos"
205
+
206
+ #: limit-login-attempts.php:870
207
+ msgid "Site connection"
208
+ msgstr "Conexión"
209
+
210
+ #: limit-login-attempts.php:876
211
+ msgid "Direct connection"
212
+ msgstr "Connexión directa"
213
+
214
+ #: limit-login-attempts.php:881
215
+ msgid "From behind a reversy proxy"
216
+ msgstr "Detrás de un proxy"
217
+
218
+ #: limit-login-attempts.php:887
219
+ msgid "Handle cookie login"
220
+ msgstr "Gestionar cookies de login"
221
+
222
+ #: limit-login-attempts.php:889
223
+ msgid "Yes"
224
+ msgstr "Sí"
225
+
226
+ #: limit-login-attempts.php:889
227
+ msgid "No"
228
+ msgstr "No"
229
+
230
+ #: limit-login-attempts.php:894
231
+ msgid "Notify on lockout"
232
+ msgstr "Notificar al bloquear"
233
+
234
+ #: limit-login-attempts.php:896
235
+ msgid "Log IP"
236
+ msgstr "Registrar IP"
237
+
238
+ #: limit-login-attempts.php:897
239
+ msgid "Email to admin after"
240
+ msgstr "Enviar email al administrador cada"
241
+
242
+ #: limit-login-attempts.php:897
243
+ msgid "lockouts"
244
+ msgstr "bloqueos"
245
+
246
+ #: limit-login-attempts.php:902
247
+ msgid "Change Options"
248
+ msgstr "Cambiar opciones"
249
+
250
+ #: limit-login-attempts.php:910
251
+ msgid "Lockout log"
252
+ msgstr "Registro de bloqueos"
253
+
254
+ #: limit-login-attempts.php:914
255
+ msgid "Clear Log"
256
+ msgstr "Limpiar registro"
257
+
258
+ #. Plugin Name of an extension
259
+ msgid "Limit Login Attempts"
260
+ msgstr "Límitador de intentos de login"
261
+
262
+ #. Plugin URI of an extension
263
+ msgid "http://devel.kostdoktorn.se/limit-login-attempts"
264
+ msgstr "http://devel.kostdoktorn.se/limit-login-attempts"
265
+
266
+ #. Description of an extension
267
+ msgid "Limit rate of login attempts, including by way of cookies, for each IP."
268
+ msgstr "Limita la tasa de intentos de acceso, usando cookies por IP."
269
+
270
+ #. Author of an extension
271
+ msgid "Johan Eenfeldt"
272
+ msgstr "Johan Eenfeldt"
273
+
274
+ #. Author URI of an extension
275
+ msgid "http://devel.kostdoktorn.se"
276
+ msgstr "http://devel.kostdoktorn.se"
277
+
limit-login-attempts-fa_IR.mo ADDED
Binary file
limit-login-attempts-fa_IR.po ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: limit-login-attempts\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2009-08-02 10:44+0330\n"
6
+ "PO-Revision-Date: \n"
7
+ "Last-Translator: mostafa.s1990@gmail.com <mostafa.s1990@gmail.com>\n"
8
+ "Language-Team: <mostafa.s1990@gmail.com>\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Poedit-Language: Persian\n"
13
+ "X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
14
+ "X-Poedit-KeywordsList: __;_e\n"
15
+ "X-Poedit-Basepath: .\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+
18
+ #: F:\Program
19
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:383
20
+ #, php-format
21
+ msgid "[%s] Too many failed login attempts"
22
+ msgstr "[%s] حملات زیاد برای ورود ناموفق"
23
+
24
+ #: F:\Program
25
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:385
26
+ #, php-format
27
+ msgid "%d failed login attempts (%d lockout(s)) from IP: %s"
28
+ msgstr "%d حملات ورود ناموفق (%d تحریم(s)) از آی پی: %s"
29
+
30
+ #: F:\Program
31
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:389
32
+ #, php-format
33
+ msgid "Last user attempted: %s"
34
+ msgstr "آخرین حملات کاربر: %s"
35
+
36
+ #: F:\Program
37
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:392
38
+ #, php-format
39
+ msgid "IP was blocked for %s"
40
+ msgstr "آی پی شما برای %s قفل شده است"
41
+
42
+ #: F:\Program
43
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:447
44
+ msgid "<strong>ERROR</strong>: Too many failed login attempts."
45
+ msgstr "<strong>خطا</strong>: تلاش نا موفق برای ورود به سایت."
46
+
47
+ #: F:\Program
48
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:451
49
+ msgid "Please try again later."
50
+ msgstr "لطفا بعدا امتحان کنید."
51
+
52
+ #: F:\Program
53
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:553
54
+ msgid "<strong>ERROR</strong>: Incorrect username or password."
55
+ msgstr "<strong>خطا</strong>: نام کاربری یا رمز عبور اشتباه است."
56
+
57
+ #: F:\Program
58
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:716
59
+ msgid "Tried to log in as"
60
+ msgstr "برای ورود سعی کنید"
61
+
62
+ #: F:\Program
63
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:745
64
+ msgid "Cleared IP log"
65
+ msgstr "گزارش آی پی ها پاک شده"
66
+
67
+ #: F:\Program
68
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:753
69
+ msgid "Reset lockout count"
70
+ msgstr "ریست کردن تعداد بن شدگان"
71
+
72
+ #: F:\Program
73
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:761
74
+ msgid "Cleared current lockouts"
75
+ msgstr "پاک کردن تعداد بن شدگان"
76
+
77
+ #: F:\Program
78
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:790
79
+ msgid "Options changed"
80
+ msgstr "تنظیمات ذخیره شد"
81
+
82
+ #: F:\Program
83
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:801
84
+ msgid "<strong>NOTE:</strong> Only works in Wordpress 2.7 or later"
85
+ msgstr "<strong>نکته:</strong> فقط در وردپرس 2.7 یا بالاتر"
86
+
87
+ #: F:\Program
88
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:817
89
+ #, php-format
90
+ msgid "It appears the site is reached directly (from your IP: %s)"
91
+ msgstr "به نظر میرسد این سایت از یک پروکسی سرور رسیده است (از آی پی شما: %s)"
92
+
93
+ #: F:\Program
94
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:819
95
+ #, php-format
96
+ msgid "It appears the site is reached through a proxy server (proxy IP: %s, your IP: %s)"
97
+ msgstr "به نظر میرسد این سایت از یک پروکسی سرور رسیده است (از آی پی شما: %s)"
98
+
99
+ #: F:\Program
100
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:827
101
+ #, php-format
102
+ msgid "<strong>Current setting appears to be invalid</strong>. Please make sure it is correct. Further information can be found <a href=\"%s\" title=\"FAQ\">here</a>"
103
+ msgstr "<strong>تنظیمات فعلی معتبر نیست</strong>لطفا درستی را چک کنید. اطلاعات تکمیلی میتواند در بر داشته باشد در <a href=\"%s\" title=\"FAQ\">اینجا</a>"
104
+
105
+ #: F:\Program
106
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:835
107
+ msgid "Limit Login Attempts Settings"
108
+ msgstr "تنظیمات محافظت از حملات ورودی"
109
+
110
+ #: F:\Program
111
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:836
112
+ msgid "Statistics"
113
+ msgstr "وضعیت"
114
+
115
+ #: F:\Program
116
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:840
117
+ msgid "Total lockouts"
118
+ msgstr "کل تحریم ها"
119
+
120
+ #: F:\Program
121
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:843
122
+ msgid "Reset Counter"
123
+ msgstr "ریست کردن شمارنده"
124
+
125
+ #: F:\Program
126
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:845
127
+ msgid "No lockouts yet"
128
+ msgstr "هم اکنون کاربر تحریمی وجود ندارد"
129
+
130
+ #: F:\Program
131
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:850
132
+ msgid "Active lockouts"
133
+ msgstr "فعال کردن تحریم ها"
134
+
135
+ #: F:\Program
136
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:852
137
+ msgid "Restore Lockouts"
138
+ msgstr "بازگردانی تحریمی ها"
139
+
140
+ #: F:\Program
141
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:853
142
+ #, php-format
143
+ msgid "%d IP is currently blocked from trying to log in"
144
+ msgstr "در حال حاظر آی پی شما %d برای ورود به سایت مسدود شده است"
145
+
146
+ #: F:\Program
147
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:859
148
+ msgid "Options"
149
+ msgstr "تنظیمات"
150
+
151
+ #: F:\Program
152
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:863
153
+ msgid "Lockout"
154
+ msgstr "تحریم"
155
+
156
+ #: F:\Program
157
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:865
158
+ msgid "allowed retries"
159
+ msgstr "اجازه retries"
160
+
161
+ #: F:\Program
162
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:866
163
+ msgid "minutes lockout"
164
+ msgstr "دقیقه تحریم"
165
+
166
+ #: F:\Program
167
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:867
168
+ msgid "lockouts increase lockout time to"
169
+ msgstr "افزایش زمان تحریم برای بن شدگان"
170
+
171
+ #: F:\Program
172
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:867
173
+ msgid "hours"
174
+ msgstr "ساعت"
175
+
176
+ #: F:\Program
177
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:868
178
+ msgid "hours until retries are reset"
179
+ msgstr "ریست کردن ساعت بازنشانی ها"
180
+
181
+ #: F:\Program
182
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:872
183
+ msgid "Site connection"
184
+ msgstr "اتصال سایت"
185
+
186
+ #: F:\Program
187
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:878
188
+ msgid "Direct connection"
189
+ msgstr "هدایت اتصال"
190
+
191
+ #: F:\Program
192
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:883
193
+ msgid "From behind a reversy proxy"
194
+ msgstr "از قبل با پروکسی استفاده شده است"
195
+
196
+ #: F:\Program
197
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:889
198
+ msgid "Handle cookie login"
199
+ msgstr "به کار گرفتن کوکی ها برای ورود"
200
+
201
+ #: F:\Program
202
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:891
203
+ msgid "Yes"
204
+ msgstr "بله"
205
+
206
+ #: F:\Program
207
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:891
208
+ msgid "No"
209
+ msgstr "خیر"
210
+
211
+ #: F:\Program
212
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:896
213
+ msgid "Notify on lockout"
214
+ msgstr "آگاهی از تحریم"
215
+
216
+ #: F:\Program
217
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:898
218
+ msgid "Log IP"
219
+ msgstr "گزارش آی پی"
220
+
221
+ #: F:\Program
222
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:899
223
+ msgid "Email to admin after"
224
+ msgstr "رایانامه به مدیر"
225
+
226
+ #: F:\Program
227
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:899
228
+ msgid "lockouts"
229
+ msgstr "تحریم"
230
+
231
+ #: F:\Program
232
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:904
233
+ msgid "Change Options"
234
+ msgstr "ذخیره تغییرات"
235
+
236
+ #: F:\Program
237
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:912
238
+ msgid "Lockout log"
239
+ msgstr "گزارش تحریم"
240
+
241
+ #: F:\Program
242
+ #: Files\AppServ\www\wordpress\wp-content\plugins\limit-login-attempts/limit-login-attempts.php:916
243
+ msgid "Clear Log"
244
+ msgstr "پاک کردن گزارش"
245
+
limit-login-attempts-nb_NO.mo ADDED
Binary file
limit-login-attempts-nb_NO.po ADDED
@@ -0,0 +1,277 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Limit Login Attempts Swedish Translation
2
+ # Copyright (C) 2009 Johan Eenfeldt
3
+ # This file is distributed under the same license as the Wordpress package.
4
+ # Johan Eenfeldt <johan.eenfeldt@kostdoktorn.se>, 2009.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: limit-login-attempts 1.2\n"
9
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/limit-login-attempts\n"
10
+ "POT-Creation-Date: 2009-01-28 17:17+0000\n"
11
+ "PO-Revision-Date: 2009-07-15 13:14+0100\n"
12
+ "Last-Translator: Rune G <dev@bloggs.be>\n"
13
+ "Language-Team: DigitalHverdag <dev@bloggs.be>\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "X-Poedit-Language: Norwegian Bokmal\n"
19
+ "X-Poedit-Country: NORWAY\n"
20
+
21
+ #: limit-login-attempts.php:372
22
+ #, php-format
23
+ msgid "%d hour"
24
+ msgid_plural "%d hours"
25
+ msgstr[0] "%d time"
26
+ msgstr[1] "%d timer"
27
+
28
+ #: limit-login-attempts.php:378
29
+ #, php-format
30
+ msgid "%d minute"
31
+ msgid_plural "%d minutes"
32
+ msgstr[0] "%d minutt"
33
+ msgstr[1] "%d minutter"
34
+
35
+ #: limit-login-attempts.php:381
36
+ #, php-format
37
+ msgid "[%s] Too many failed login attempts"
38
+ msgstr "[%s] For mange påloggingsforsøk"
39
+
40
+ #: limit-login-attempts.php:383
41
+ #, php-format
42
+ msgid "%d failed login attempts (%d lockout(s)) from IP: %s"
43
+ msgstr "%d påloggingsforsøk (stoppet %d gang(er)) fra IP: %s"
44
+
45
+ #: limit-login-attempts.php:387
46
+ #, php-format
47
+ msgid "Last user attempted: %s"
48
+ msgstr "Siste brukernavn som feilet : %s"
49
+
50
+ #: limit-login-attempts.php:390
51
+ #, php-format
52
+ msgid "IP was blocked for %s"
53
+ msgstr "IP blokkert i %s"
54
+
55
+ #: limit-login-attempts.php:445
56
+ msgid "<strong>ERROR</strong>: Too many failed login attempts."
57
+ msgstr "<strong>Feil</strong>: For mange påloggingsforsøk."
58
+
59
+ #: limit-login-attempts.php:449
60
+ msgid "Please try again later."
61
+ msgstr "Prøv igjen senere"
62
+
63
+ #: limit-login-attempts.php:456
64
+ #, php-format
65
+ msgid "Please try again in %d hour."
66
+ msgid_plural "Please try again in %d hours."
67
+ msgstr[0] "Prøv igjen om %d time."
68
+ msgstr[1] "Prøv igjen om %d timer."
69
+
70
+ #: limit-login-attempts.php:458
71
+ #, php-format
72
+ msgid "Please try again in %d minute."
73
+ msgid_plural "Please try again in %d minutes."
74
+ msgstr[0] "Prøv igjen om %d minutt."
75
+ msgstr[1] "Prøv igjen om %d minutter."
76
+
77
+ #: limit-login-attempts.php:487
78
+ #, php-format
79
+ msgid "<strong>%d</strong> attempt remaining."
80
+ msgid_plural "<strong>%d</strong> attempts remaining."
81
+ msgstr[0] "<strong>%d</strong> forsøk gjenstår."
82
+ msgstr[1] "<strong>%d</strong> forsøk gjenstår."
83
+
84
+ #: limit-login-attempts.php:551
85
+ msgid "<strong>ERROR</strong>: Incorrect username or password."
86
+ msgstr "<strong>Feil</strong>: Feil brukernavn eller passord."
87
+
88
+ #: limit-login-attempts.php:714
89
+ msgid "IP|Internet address"
90
+ msgstr "IP"
91
+
92
+ #: limit-login-attempts.php:714
93
+ msgid "Tried to log in as"
94
+ msgstr "Prøvde å logge inn som"
95
+
96
+ #: limit-login-attempts.php:719
97
+ #, php-format
98
+ msgid "%d lockout"
99
+ msgid_plural "%d lockouts"
100
+ msgstr[0] "%d blokkering"
101
+ msgstr[1] "%d blokkeringer"
102
+
103
+ #: limit-login-attempts.php:743
104
+ msgid "Cleared IP log"
105
+ msgstr "Nullstill IP loggen"
106
+
107
+ #: limit-login-attempts.php:751
108
+ msgid "Reset lockout count"
109
+ msgstr "Nullstill antall blokkeringer"
110
+
111
+ #: limit-login-attempts.php:759
112
+ msgid "Cleared current lockouts"
113
+ msgstr "Fjernet gjeldende blokkeringer"
114
+
115
+ #: limit-login-attempts.php:788
116
+ msgid "Options changed"
117
+ msgstr "Innstillinger endret"
118
+
119
+ #: limit-login-attempts.php:799
120
+ msgid "<strong>NOTE:</strong> Only works in Wordpress 2.7 or later"
121
+ msgstr "<strong>NB:</strong> Du må bruker WordPress 2.7 eller nyere"
122
+
123
+ #: limit-login-attempts.php:815
124
+ #, php-format
125
+ msgid "It appears the site is reached directly (from your IP: %s)"
126
+ msgstr "Det ser ut som om du kan nå bloggen direkte (fra din IP: %s)"
127
+
128
+ #: limit-login-attempts.php:817
129
+ #, php-format
130
+ msgid "It appears the site is reached through a proxy server (proxy IP: %s, your IP: %s)"
131
+ msgstr "Det ser ut som om bloggen din er bak en proxy server (proxy IP: %s, din IP: %s)"
132
+
133
+ #: limit-login-attempts.php:825
134
+ #, php-format
135
+ msgid "<strong>Current setting appears to be invalid</strong>. Please make sure it is correct. Further information can be found <a href=\"%s\" title=\"FAQ\">here</a>"
136
+ msgstr "<strong>Dine innstillinger kan være feil</strong>. Sjekk at de er korrekte. Mer informasjon <a href=\"%s\" title=\"FAQ\">her</a>"
137
+
138
+ #: limit-login-attempts.php:833
139
+ msgid "Limit Login Attempts Settings"
140
+ msgstr "Limit Login Attempts Innstillinger"
141
+
142
+ #: limit-login-attempts.php:834
143
+ msgid "Statistics"
144
+ msgstr "Statistikk"
145
+
146
+ #: limit-login-attempts.php:838
147
+ msgid "Total lockouts"
148
+ msgstr "Totalt antall blokkeringer"
149
+
150
+ #: limit-login-attempts.php:841
151
+ msgid "Reset Counter"
152
+ msgstr "Nullstill teller"
153
+
154
+ #: limit-login-attempts.php:842
155
+ #, php-format
156
+ msgid "%d lockout since last reset"
157
+ msgid_plural "%d lockouts since last reset"
158
+ msgstr[0] "%d blokkering siden siste nullstilling"
159
+ msgstr[1] "%d blokkeringer siden siste nullstilling"
160
+
161
+ #: limit-login-attempts.php:843
162
+ msgid "No lockouts yet"
163
+ msgstr "Ingen blokkeringer enda"
164
+
165
+ #: limit-login-attempts.php:848
166
+ msgid "Active lockouts"
167
+ msgstr "Aktive blokkeringer"
168
+
169
+ #: limit-login-attempts.php:850
170
+ msgid "Restore Lockouts"
171
+ msgstr "Fjern blokkeringer"
172
+
173
+ #: limit-login-attempts.php:851
174
+ #, php-format
175
+ msgid "%d IP is currently blocked from trying to log in"
176
+ msgstr "%d IP står på blokkeringslisten"
177
+
178
+ #: limit-login-attempts.php:857
179
+ msgid "Options"
180
+ msgstr "Innstillinger"
181
+
182
+ #: limit-login-attempts.php:861
183
+ msgid "Lockout"
184
+ msgstr "Blokkering"
185
+
186
+ #: limit-login-attempts.php:863
187
+ msgid "allowed retries"
188
+ msgstr "Antall påloggingsforsøk"
189
+
190
+ #: limit-login-attempts.php:864
191
+ msgid "minutes lockout"
192
+ msgstr "minutters blokkering"
193
+
194
+ #: limit-login-attempts.php:865
195
+ msgid "lockouts increase lockout time to"
196
+ msgstr "Blokkeringer øker blokkeringstiden til"
197
+
198
+ #: limit-login-attempts.php:865
199
+ msgid "hours"
200
+ msgstr "timer"
201
+
202
+ #: limit-login-attempts.php:866
203
+ msgid "hours until retries are reset"
204
+ msgstr "timer til nullstilling"
205
+
206
+ #: limit-login-attempts.php:870
207
+ msgid "Site connection"
208
+ msgstr "Blogg forbindelse"
209
+
210
+ #: limit-login-attempts.php:876
211
+ msgid "Direct connection"
212
+ msgstr "Direkte forbindelse"
213
+
214
+ #: limit-login-attempts.php:881
215
+ msgid "From behind a reversy proxy"
216
+ msgstr "Bak en omvendt proxy"
217
+
218
+ #: limit-login-attempts.php:887
219
+ msgid "Handle cookie login"
220
+ msgstr "Behandle pålogginger med cookies"
221
+
222
+ #: limit-login-attempts.php:889
223
+ msgid "Yes"
224
+ msgstr "Ja"
225
+
226
+ #: limit-login-attempts.php:889
227
+ msgid "No"
228
+ msgstr "Nei"
229
+
230
+ #: limit-login-attempts.php:894
231
+ msgid "Notify on lockout"
232
+ msgstr "Gi melding om blokkering"
233
+
234
+ #: limit-login-attempts.php:896
235
+ msgid "Log IP"
236
+ msgstr "Logg IP"
237
+
238
+ #: limit-login-attempts.php:897
239
+ msgid "Email to admin after"
240
+ msgstr "Send epost til admin etter"
241
+
242
+ #: limit-login-attempts.php:897
243
+ msgid "lockouts"
244
+ msgstr "blokkeringer"
245
+
246
+ #: limit-login-attempts.php:902
247
+ msgid "Change Options"
248
+ msgstr "Endre innstillinger"
249
+
250
+ #: limit-login-attempts.php:910
251
+ msgid "Lockout log"
252
+ msgstr "Blokkerings logg"
253
+
254
+ #: limit-login-attempts.php:914
255
+ msgid "Clear Log"
256
+ msgstr "Nullstill loggen"
257
+
258
+ #. Plugin Name of an extension
259
+ msgid "Limit Login Attempts"
260
+ msgstr "Begrense påloggingsforsøk"
261
+
262
+ #. Plugin URI of an extension
263
+ msgid "http://devel.kostdoktorn.se/limit-login-attempts"
264
+ msgstr "http://devel.kostdoktorn.se/limit-login-attempts"
265
+
266
+ #. Description of an extension
267
+ msgid "Limit rate of login attempts, including by way of cookies, for each IP."
268
+ msgstr "Begrenser antall påloggingsforsøk, inkludert forsøk med cookies, for alle IPer"
269
+
270
+ #. Author of an extension
271
+ msgid "Johan Eenfeldt"
272
+ msgstr "Johan Eenfeldt"
273
+
274
+ #. Author URI of an extension
275
+ msgid "http://devel.kostdoktorn.se"
276
+ msgstr "http://devel.kostdoktorn.se"
277
+
limit-login-attempts-ru_RU.mo ADDED
Binary file
limit-login-attempts-ru_RU.po ADDED
@@ -0,0 +1,277 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Limit Login Attempts German Translation
2
+ # Copyright (C) 2009 Johan Eenfeldt
3
+ # This file is distributed under the same license as the Wordpress package.
4
+ # Johan Eenfeldt <johan.eenfeldt@kostdoktorn.se>, 2009.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: limit-login-attempts 1.3\n"
9
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/limit-login-attempts\n"
10
+ "POT-Creation-Date: 2009-01-28 17:17+0000\n"
11
+ "PO-Revision-Date: 2009-08-03 15:55+0200\n"
12
+ "Last-Translator: Studio-XL.com <webmaster@studio-xl.com>\n"
13
+ "Language-Team: Catalan <rbuj@wanadoo.es>\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "X-Poedit-Language: Catalan\n"
19
+ "X-Poedit-Country: SPAIN\n"
20
+
21
+ #: limit-login-attempts.php:372
22
+ #, php-format
23
+ msgid "%d hour"
24
+ msgid_plural "%d hours"
25
+ msgstr[0] "%d час"
26
+ msgstr[1] "%d часов"
27
+
28
+ #: limit-login-attempts.php:378
29
+ #, php-format
30
+ msgid "%d minute"
31
+ msgid_plural "%d minutes"
32
+ msgstr[0] "%d минута"
33
+ msgstr[1] "%d минут"
34
+
35
+ #: limit-login-attempts.php:381
36
+ #, php-format
37
+ msgid "[%s] Too many failed login attempts"
38
+ msgstr "[%s] Превышен максимальный лимит попыток авторизации"
39
+
40
+ #: limit-login-attempts.php:383
41
+ #, php-format
42
+ msgid "%d failed login attempts (%d lockout(s)) from IP: %s"
43
+ msgstr "%d неудачных попыток авторизации (%d изоляция(ий)) с адреса IP: %s"
44
+
45
+ #: limit-login-attempts.php:387
46
+ #, php-format
47
+ msgid "Last user attempted: %s"
48
+ msgstr "Последняя попытка пользователя: %s"
49
+
50
+ #: limit-login-attempts.php:390
51
+ #, php-format
52
+ msgid "IP was blocked for %s"
53
+ msgstr "IP заблокирован для %s"
54
+
55
+ #: limit-login-attempts.php:445
56
+ msgid "<strong>ERROR</strong>: Too many failed login attempts."
57
+ msgstr "<strong>ВНИМАНИЕ</strong>: превышен лимит попыток авторизации."
58
+
59
+ #: limit-login-attempts.php:449
60
+ msgid "Please try again later."
61
+ msgstr "Пожалуйста попробуйте позже."
62
+
63
+ #: limit-login-attempts.php:456
64
+ #, php-format
65
+ msgid "Please try again in %d hour."
66
+ msgid_plural "Please try again in %d hours."
67
+ msgstr[0] "Пожалуйста попробуйте через %d час."
68
+ msgstr[1] " Пожалуйста попробуйте через %d часов."
69
+
70
+ #: limit-login-attempts.php:458
71
+ #, php-format
72
+ msgid "Please try again in %d minute."
73
+ msgid_plural "Please try again in %d minutes."
74
+ msgstr[0] "Пожалуйста попробуйте через %d минуту."
75
+ msgstr[1] "Пожалуйста попробуйте через %d минут."
76
+
77
+ #: limit-login-attempts.php:487
78
+ #, php-format
79
+ msgid "<strong>%d</strong> attempt remaining."
80
+ msgid_plural "<strong>%d</strong> attempts remaining."
81
+ msgstr[0] "<strong>%d</strong> intent restant."
82
+ msgstr[1] "Осталось <strong>%d</strong> попыток."
83
+
84
+ #: limit-login-attempts.php:551
85
+ msgid "<strong>ERROR</strong>: Incorrect username or password."
86
+ msgstr "<strong>ОШИБКА</strong>: Неверное имя пользователя или пароль."
87
+
88
+ #: limit-login-attempts.php:714
89
+ msgid "IP|Internet address"
90
+ msgstr "IP|Интернет-адрес"
91
+
92
+ #: limit-login-attempts.php:714
93
+ msgid "Tried to log in as"
94
+ msgstr "Пытался войти как"
95
+
96
+ #: limit-login-attempts.php:719
97
+ #, php-format
98
+ msgid "%d lockout"
99
+ msgid_plural "%d lockouts"
100
+ msgstr[0] "%d изоляция"
101
+ msgstr[1] "%d изоляций"
102
+
103
+ #: limit-login-attempts.php:743
104
+ msgid "Cleared IP log"
105
+ msgstr "Чистый IP лог"
106
+
107
+ #: limit-login-attempts.php:751
108
+ msgid "Reset lockout count"
109
+ msgstr "Сброс счетчика изоляций"
110
+
111
+ #: limit-login-attempts.php:759
112
+ msgid "Cleared current lockouts"
113
+ msgstr "Существующие изоляции очищены"
114
+
115
+ #: limit-login-attempts.php:788
116
+ msgid "Options changed"
117
+ msgstr "Опции изменены"
118
+
119
+ #: limit-login-attempts.php:799
120
+ msgid "<strong>NOTE:</strong> Only works in Wordpress 2.7 or later"
121
+ msgstr "<strong>Внимание:</strong> Работает только в версии Wordpress 2.7 или выше"
122
+
123
+ #: limit-login-attempts.php:815
124
+ #, php-format
125
+ msgid "It appears the site is reached directly (from your IP: %s)"
126
+ msgstr "Сайт доступен напрямую (с вашего IP: %s)"
127
+
128
+ #: limit-login-attempts.php:817
129
+ #, php-format
130
+ msgid "It appears the site is reached through a proxy server (proxy IP: %s, your IP: %s)"
131
+ msgstr "Сайт досупен через прокси-сервер (proxy IP: %s, ваш IP: %s)"
132
+
133
+ #: limit-login-attempts.php:825
134
+ #, php-format
135
+ msgid "<strong>Current setting appears to be invalid</strong>. Please make sure it is correct. Further information can be found <a href=\"%s\" title=\"FAQ\">here</a>"
136
+ msgstr "<strong>Данные настройки недействительны</strong>. Пожалуйста проверьте их. Дополнительная информация доступна <a href=\"%s\" title=\"FAQ\">здесь</a>"
137
+
138
+ #: limit-login-attempts.php:833
139
+ msgid "Limit Login Attempts Settings"
140
+ msgstr "Ограничение попыток авторизации"
141
+
142
+ #: limit-login-attempts.php:834
143
+ msgid "Statistics"
144
+ msgstr "Статистика"
145
+
146
+ #: limit-login-attempts.php:838
147
+ msgid "Total lockouts"
148
+ msgstr "Всего изоляций"
149
+
150
+ #: limit-login-attempts.php:841
151
+ msgid "Reset Counter"
152
+ msgstr "Сброс счетчика"
153
+
154
+ #: limit-login-attempts.php:842
155
+ #, php-format
156
+ msgid "%d lockout since last reset"
157
+ msgid_plural "%d lockouts since last reset"
158
+ msgstr[0] "%d изоляция с последнего сброса счетчика."
159
+ msgstr[1] "%d изоляций с последнего сброса счетчика."
160
+
161
+ #: limit-login-attempts.php:843
162
+ msgid "No lockouts yet"
163
+ msgstr "Пока без изоляций"
164
+
165
+ #: limit-login-attempts.php:848
166
+ msgid "Active lockouts"
167
+ msgstr "Активные изоляции"
168
+
169
+ #: limit-login-attempts.php:850
170
+ msgid "Restore Lockouts"
171
+ msgstr "Восстановить изоляции"
172
+
173
+ #: limit-login-attempts.php:851
174
+ #, php-format
175
+ msgid "%d IP is currently blocked from trying to log in"
176
+ msgstr "IP %d в данный момент заблокирован от попыток авторизации"
177
+
178
+ #: limit-login-attempts.php:857
179
+ msgid "Options"
180
+ msgstr "Опции"
181
+
182
+ #: limit-login-attempts.php:861
183
+ msgid "Lockout"
184
+ msgstr "Изоляция"
185
+
186
+ #: limit-login-attempts.php:863
187
+ msgid "allowed retries"
188
+ msgstr "разрешено дополнительных попыток"
189
+
190
+ #: limit-login-attempts.php:864
191
+ msgid "minutes lockout"
192
+ msgstr "изоляция в минутах"
193
+
194
+ #: limit-login-attempts.php:865
195
+ msgid "lockouts increase lockout time to"
196
+ msgstr "изоляций повысят время изоляции до"
197
+
198
+ #: limit-login-attempts.php:865
199
+ msgid "hours"
200
+ msgstr "часов"
201
+
202
+ #: limit-login-attempts.php:866
203
+ msgid "hours until retries are reset"
204
+ msgstr "часов до сброса количества попыток"
205
+
206
+ #: limit-login-attempts.php:870
207
+ msgid "Site connection"
208
+ msgstr "Подключение к сайту"
209
+
210
+ #: limit-login-attempts.php:876
211
+ msgid "Direct connection"
212
+ msgstr "Прямое подключение"
213
+
214
+ #: limit-login-attempts.php:881
215
+ msgid "From behind a reversy proxy"
216
+ msgstr "За прокси (reversy proxy)"
217
+
218
+ #: limit-login-attempts.php:887
219
+ msgid "Handle cookie login"
220
+ msgstr "Обрабатывать кукис логина"
221
+
222
+ #: limit-login-attempts.php:889
223
+ msgid "Yes"
224
+ msgstr "Да"
225
+
226
+ #: limit-login-attempts.php:889
227
+ msgid "No"
228
+ msgstr "Нет"
229
+
230
+ #: limit-login-attempts.php:894
231
+ msgid "Notify on lockout"
232
+ msgstr "Сообщать об изоляциях"
233
+
234
+ #: limit-login-attempts.php:896
235
+ msgid "Log IP"
236
+ msgstr "Записывать IP"
237
+
238
+ #: limit-login-attempts.php:897
239
+ msgid "Email to admin after"
240
+ msgstr "Отправлять имейл админу после"
241
+
242
+ #: limit-login-attempts.php:897
243
+ msgid "lockouts"
244
+ msgstr "изоляций"
245
+
246
+ #: limit-login-attempts.php:902
247
+ msgid "Change Options"
248
+ msgstr "Изменить настройки"
249
+
250
+ #: limit-login-attempts.php:910
251
+ msgid "Lockout log"
252
+ msgstr "Лог изоляций"
253
+
254
+ #: limit-login-attempts.php:914
255
+ msgid "Clear Log"
256
+ msgstr "Очистить лог"
257
+
258
+ #. Plugin Name of an extension
259
+ msgid "Limit Login Attempts"
260
+ msgstr "Ограничение попыток авторизации"
261
+
262
+ #. Plugin URI of an extension
263
+ msgid "http://devel.kostdoktorn.se/limit-login-attempts"
264
+ msgstr "http://devel.kostdoktorn.se/limit-login-attempts"
265
+
266
+ #. Description of an extension
267
+ msgid "Limit rate of login attempts, including by way of cookies, for each IP."
268
+ msgstr "Лимит количества попыток авторизации, включая поддержку куки, по IP."
269
+
270
+ #. Author of an extension
271
+ msgid "Johan Eenfeldt"
272
+ msgstr "Johan Eenfeldt"
273
+
274
+ #. Author URI of an extension
275
+ msgid "http://devel.kostdoktorn.se"
276
+ msgstr "http://devel.kostdoktorn.se"
277
+
limit-login-attempts.php CHANGED
@@ -5,7 +5,7 @@
5
  Description: Limit rate of login attempts, including by way of cookies, for each IP.
6
  Author: Johan Eenfeldt
7
  Author URI: http://devel.kostdoktorn.se
8
- Version: 2.0beta1
9
 
10
  Copyright 2008, 2009 Johan Eenfeldt
11
 
@@ -76,38 +76,12 @@ $limit_login_options =
76
 
77
  /* If notify by email, do so after this number of lockouts */
78
  , 'notify_email_after' => 4
79
-
80
- /* Enforce limit on new user registrations for IP */
81
- , 'register_enforce' => false
82
-
83
- /* Allow this many new user registrations ... */
84
- , 'register_allowed' => 3
85
-
86
- /* ... during this time */
87
- , 'register_duration' => 86400 // 24 hours
88
-
89
- /* Allow password reset using login name? */
90
- , 'disable_pwd_reset_username' => false
91
-
92
- /* ... for capability level_xx or higher */
93
- , 'pwd_reset_username_limit' => 1
94
-
95
- /* Allow password resets at all? */
96
- , 'disable_pwd_reset' => true
97
-
98
- /* ... for capability level_xx or higher */
99
- , 'pwd_reset_limit' => 1
100
  );
101
 
102
  $limit_login_my_error_shown = false; /* have we shown our stuff? */
103
  $limit_login_just_lockedout = false; /* started this pageload??? */
104
  $limit_login_nonempty_credentials = false; /* user and pwd nonempty */
105
 
106
- /* Level of the different roles. Used for descriptive purposes only */
107
- $limit_login_level_role =
108
- array(0 => 'Subscriber', 1 => 'Contributor', 2 => 'Author', 7 => 'Editor'
109
- , 10 => 'Administrator');
110
-
111
 
112
  /*
113
  * Startup
@@ -139,12 +113,17 @@ function limit_login_setup() {
139
  add_action('login_head', 'limit_login_add_error_message');
140
  add_action('login_errors', 'limit_login_fixup_error_messages');
141
  add_action('admin_menu', 'limit_login_admin_menu');
142
- if (limit_login_option('register_enforce')) {
143
- add_filter('registration_errors', 'limit_login_filter_registration');
144
- add_filter('login_message', 'limit_login_filter_login_message');
145
- }
146
- if (limit_login_option('disable_pwd_reset') || limit_login_option('disable_pwd_reset_username')) {
147
- add_filter('allow_password_reset', 'limit_login_filter_pwd_reset', 10, 2);
 
 
 
 
 
148
  }
149
  }
150
 
@@ -193,24 +172,6 @@ function is_limit_login_ok() {
193
  }
194
 
195
 
196
- /* Check if it is ok to register new user */
197
- function is_limit_login_reg_ok() {
198
- if (!limit_login_option('register_enforce')) {
199
- return true;
200
- }
201
-
202
- $ip = limit_login_get_address();
203
-
204
- /* too many registrations? */
205
- $regs = get_option('limit_login_registrations');
206
- $valid = get_option('limit_login_registrations_valid');
207
- return (!is_array($regs) || !isset($regs[$ip])
208
- || !is_array($valid) || !isset($valid[$ip])
209
- || time() >= $valid[$ip]
210
- || $regs[$ip] < limit_login_option('register_allowed'));
211
- }
212
-
213
-
214
  /* Filter: allow login attempt? (called from wp_authenticate()) */
215
  function limit_login_wp_authenticate_user($user, $password) {
216
  if (is_wp_error($user) || is_limit_login_ok() ) {
@@ -364,209 +325,29 @@ function limit_login_cleanup($retries = null, $lockouts = null, $valid = null) {
364
  /* remove retries that are no longer valid */
365
  $valid = !is_null($valid) ? $valid : get_option('limit_login_retries_valid');
366
  $retries = !is_null($retries) ? $retries : get_option('limit_login_retries');
367
- if (is_array($valid) && !empty($valid) && is_array($retries) && !empty($retries)) {
368
- foreach ($valid as $ip => $lockout) {
369
- if ($lockout < $now) {
370
- unset($valid[$ip]);
371
- unset($retries[$ip]);
372
- }
373
- }
374
-
375
- /* go through retries directly, if for some reason they've gone out of sync */
376
- foreach ($retries as $ip => $retry) {
377
- if (!isset($valid[$ip])) {
378
- unset($retries[$ip]);
379
- }
380
- }
381
-
382
- update_option('limit_login_retries', $retries);
383
- update_option('limit_login_retries_valid', $valid);
384
- }
385
-
386
- /* do the same for the registration arrays, if necessary */
387
- $valid = get_option('limit_login_registrations_valid');
388
- $retries = get_option('limit_login_registrations');
389
- if (is_array($valid) && !empty($valid) && is_array($retries) && !empty($retries)) {
390
- foreach ($valid as $ip => $lockout) {
391
- if ($lockout < $now) {
392
- unset($valid[$ip]);
393
- unset($retries[$ip]);
394
- }
395
- }
396
-
397
- /* go through retries directly, if for some reason they've gone out of sync */
398
- foreach ($retries as $ip => $retry) {
399
- if (!isset($valid[$ip])) {
400
- unset($retries[$ip]);
401
- }
402
- }
403
-
404
- update_option('limit_login_registrations', $retries);
405
- update_option('limit_login_registrations_valid', $valid);
406
- }
407
- }
408
-
409
- /*
410
- * Handle bookkeeping when new user is registered
411
- *
412
- * Increase nr of registrations and reset valid value.
413
- */
414
- function limit_login_reg_add() {
415
- if (!limit_login_option('register_enforce')) {
416
  return;
417
  }
418
 
419
- $ip = limit_login_get_address();
420
-
421
- /* Get the arrays with registrations and valid information */
422
- $regs = get_option('limit_login_registrations');
423
- $valid = get_option('limit_login_registrations_valid');
424
- if ($regs === false) {
425
- $regs = array();
426
- add_option('limit_login_registrations', $regs, '', 'no');
427
- }
428
- if ($valid === false) {
429
- $valid = array();
430
- add_option('limit_login_registrations_valid', $valid, '', 'no');
431
- }
432
-
433
- /* Check validity and add one registration */
434
- if (isset($regs[$ip]) && isset($valid[$ip]) && time() < $valid[$ip]) {
435
- $regs[$ip] ++;
436
- } else {
437
- $regs[$ip] = 1;
438
- }
439
- $valid[$ip] = time() + limit_login_option('register_duration');
440
-
441
- update_option('limit_login_registrations', $regs);
442
- update_option('limit_login_registrations_valid', $valid);
443
-
444
- /* increase statistics? */
445
- if ($regs[$ip] >= limit_login_option('register_allowed')) {
446
- $total = get_option('limit_login_reg_lockouts_total');
447
- if ($total === false) {
448
- add_option('limit_login_reg_lockouts_total', 1, '', 'no');
449
- } else {
450
- update_option('limit_login_reg_lockouts_total', $total + 1);
451
- }
452
- }
453
-
454
- /* do housecleaning */
455
- limit_login_cleanup();
456
- }
457
-
458
-
459
- /*
460
- * Filter: check if new registration is allowed, and filter error messages
461
- * to remove possibility to brute force user login
462
- */
463
- function limit_login_filter_registration($errors) {
464
- global $limit_login_my_error_shown;
465
-
466
- $limit_login_my_error_shown = true;
467
-
468
- if (!is_limit_login_reg_ok()) {
469
- $errors = new WP_Error();
470
- $errors->add('lockout', limit_login_reg_error_msg());
471
- return $errors;
472
- }
473
-
474
- /*
475
- * Not locked out. Now enforce error msg filter and, count attempt if there
476
- * are no errors.
477
- */
478
-
479
- if (!is_wp_error($errors)) {
480
- limit_login_reg_add();
481
- return $errors;
482
- }
483
-
484
- $codes = $errors->get_error_codes();
485
-
486
- if (count($codes) <= 1) {
487
- if (count($codes) == 0) {
488
- limit_login_reg_add();
489
- }
490
- return $errors;
491
- }
492
-
493
- /*
494
- * If more than one error message (meaning both login and email was
495
- * invalid) we strip any 'username_exists' message.
496
- *
497
- * This is to stop someone from trying different usernames with a known
498
- * bad / empty email address.
499
- */
500
-
501
- $key = array_search('username_exists', $codes);
502
-
503
- if ($key !== false) {
504
- unset($codes[$key]);
505
-
506
- $old_errors = $errors;
507
- $errors = new WP_Error();
508
- foreach ($codes as $key => $code) {
509
- $errors->add($code, $old_errors->get_error_message($code));
510
  }
511
  }
512
 
513
- return $errors;
514
- }
515
-
516
-
517
- /* Check if user have level capability */
518
- function limit_login_user_has_level($userid, $level) {
519
- $userid = intval($userid);
520
- $level = intval($level);
521
-
522
- if ($userid == 0) {
523
- return false;
524
- }
525
-
526
- $user = new WP_User($userid);
527
-
528
- return ($user && $user->has_cap($level));
529
- }
530
-
531
-
532
- /* Filter: enforce that password reset is allowed */
533
- function limit_login_filter_pwd_reset($b, $userid) {
534
- $limit = null;
535
-
536
- /* What limit to use, if any */
537
- if (limit_login_option('disable_pwd_reset')) {
538
- $limit = intval(limit_login_option('pwd_reset_limit'));
539
- }
540
-
541
- if (limit_login_option('disable_pwd_reset_username') && !strpos($_POST['user_login'], '@')) {
542
- $limit2 = intval(limit_login_option('pwd_reset_username_limit'));
543
-
544
- if (is_null($limit) || $limit > $limit2) {
545
- $limit = $limit2;
546
  }
547
  }
548
 
549
- if (is_null($limit)) {
550
- /* Current reset not limited */
551
- return $b;
552
- }
553
-
554
- /* Test if user have this level */
555
- if (!limit_login_user_has_level($userid, $limit)) {
556
- return $b;
557
- }
558
-
559
- /* Not allowed -- use same error as retrieve_password() */
560
- $error = new WP_Error();
561
- $error->add('invalidcombo', __('<strong>ERROR</strong>: Invalid username or e-mail.'));
562
- return $error;
563
  }
564
 
565
 
566
- /*
567
- * Notification functions
568
- */
569
-
570
  /* Email notification of lockout to admin (if configured) */
571
  function limit_login_notify_email($user) {
572
  $ip = limit_login_get_address();
@@ -658,39 +439,16 @@ function limit_login_notify($user) {
658
  }
659
 
660
 
661
- /*
662
- * Handle (och filter) messages and errors shown
663
- */
664
-
665
- /* Construct message for registration lockout */
666
- function limit_login_reg_error_msg() {
667
- $msg = __('<strong>ERROR</strong>: Too many new user registrations.', 'limit-login-attempts') . ' ';
668
- return limit_login_error_msg('limit_login_registrations_valid', $msg);
669
- }
670
-
671
-
672
- /* Filter: remove other registration error messages */
673
- function limit_login_filter_login_message($content) {
674
- if (is_limit_login_reg_page() && !is_limit_login_reg_ok()) {
675
- return '';
676
- }
677
-
678
- return $content;
679
- }
680
-
681
-
682
  /* Construct informative error message */
683
- function limit_login_error_msg($lockout_option = 'limit_login_lockouts', $msg = '') {
684
  $ip = limit_login_get_address();
685
- $lockouts = get_option($lockout_option);
686
 
687
- if ($msg == '') {
688
- $msg = __('<strong>ERROR</strong>: Too many failed login attempts.', 'limit-login-attempts') . ' ';
689
- }
690
 
691
  if (!is_array($lockouts) || !isset($lockouts[$ip]) || time() >= $lockouts[$ip]) {
692
- /* Huh? No lockout? */
693
- $msg .= __('Please try again later.', 'limit-login-attempts');
694
  return $msg;
695
  }
696
 
@@ -757,19 +515,6 @@ function should_limit_login_show_msg() {
757
  }
758
 
759
 
760
- /* Should we show errors and messages on this page? */
761
- function is_limit_login_reg_page() {
762
- if (isset($_GET['key'])) {
763
- /* reset password */
764
- return false;
765
- }
766
-
767
- $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
768
-
769
- return ( $action == 'register' );
770
- }
771
-
772
-
773
  /* Fix up the error message before showing it */
774
  function limit_login_fixup_error_messages($content) {
775
  global $limit_login_just_lockedout, $limit_login_nonempty_credentials, $limit_login_my_error_shown;
@@ -830,12 +575,6 @@ function limit_login_fixup_error_messages($content) {
830
  function limit_login_add_error_message() {
831
  global $error, $limit_login_my_error_shown;
832
 
833
- if (is_limit_login_reg_page() && !is_limit_login_reg_ok()
834
- && !$limit_login_my_error_shown) {
835
- $error = limit_login_reg_error_msg();
836
- return;
837
- }
838
-
839
  if (!should_limit_login_show_msg() || $limit_login_my_error_shown) {
840
  return;
841
  }
@@ -859,6 +598,10 @@ function limit_login_track_credentials($user, $password) {
859
  }
860
 
861
 
 
 
 
 
862
  /* Does wordpress version support cookie option? */
863
  function limit_login_support_cookie_option() {
864
  global $wp_version;
@@ -866,19 +609,10 @@ function limit_login_support_cookie_option() {
866
  }
867
 
868
 
869
- /*
870
- * Handle plugin options
871
- */
872
-
873
- /* Get current option value */
874
- function limit_login_option($option_name) {
875
- global $limit_login_options;
876
-
877
- if (isset($limit_login_options[$option_name])) {
878
- return $limit_login_options[$option_name];
879
- } else {
880
- return null;
881
- }
882
  }
883
 
884
 
@@ -889,14 +623,6 @@ function limit_login_get_option($option, $var_name) {
889
  if ($a !== false) {
890
  global $limit_login_options;
891
 
892
- if (is_bool($limit_login_options[$var_name])) {
893
- $a = !!$a;
894
- } elseif (is_numeric($limit_login_options[$var_name])) {
895
- $a = intval($a);
896
- } else {
897
- $a = (string) $a;
898
- }
899
-
900
  $limit_login_options[$var_name] = $a;
901
  }
902
  }
@@ -904,11 +630,15 @@ function limit_login_get_option($option, $var_name) {
904
 
905
  /* Setup global variables from options */
906
  function limit_login_setup_options() {
907
- global $limit_login_options;
908
-
909
- foreach ($limit_login_options as $name => $value) {
910
- limit_login_get_option('limit_login_' . $name, $name);
911
- }
 
 
 
 
912
 
913
  limit_login_sanitize_variables();
914
  }
@@ -916,14 +646,23 @@ function limit_login_setup_options() {
916
 
917
  /* Update options in db from global variables */
918
  function limit_login_update_options() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
919
  global $limit_login_options;
920
 
921
- foreach ($limit_login_options as $name => $value) {
922
- if (is_bool($value)) {
923
- $value = $value ? '1' : '0';
924
- }
925
- update_option('limit_login_' . $name, $value);
926
- }
927
  }
928
 
929
 
@@ -931,6 +670,12 @@ function limit_login_update_options() {
931
  function limit_login_sanitize_variables() {
932
  global $limit_login_options;
933
 
 
 
 
 
 
 
934
  $notify_email_after = max(1, intval(limit_login_option('notify_email_after')));
935
  $limit_login_options['notify_email_after'] = min(limit_login_option('allowed_lockouts'), $notify_email_after);
936
 
@@ -956,23 +701,12 @@ function limit_login_sanitize_variables() {
956
  }
957
 
958
 
959
- /*
960
- * Admin page stuff
961
- */
962
-
963
  /* Add admin options page */
964
  function limit_login_admin_menu() {
965
  add_options_page('Limit Login Attempts', 'Limit Login Attempts', 8, 'limit-login-attempts', 'limit_login_option_page');
966
  }
967
 
968
 
969
- /* Make a guess if we are behind a proxy or not */
970
- function limit_login_guess_proxy() {
971
- return isset($_SERVER[LIMIT_LOGIN_PROXY_ADDR])
972
- ? LIMIT_LOGIN_PROXY_ADDR : LIMIT_LOGIN_DIRECT_ADDR;
973
- }
974
-
975
-
976
  /* Show log on admin page */
977
  function limit_login_show_log($log) {
978
  if (!is_array($log) || count($log) == 0) {
@@ -996,144 +730,6 @@ function limit_login_show_log($log) {
996
  }
997
  }
998
 
999
-
1000
- /* Show privileged users various names, and warn if equal to login name */
1001
- function limit_login_show_users() {
1002
- global $wpdb;
1003
-
1004
- $sql = "SELECT u.ID, u.user_login, u.user_nicename, u.display_name"
1005
- . " , um.meta_value AS role, um2.meta_value AS nickname"
1006
- . " FROM $wpdb->users u"
1007
- . " INNER JOIN $wpdb->usermeta um ON u.ID = um.user_id"
1008
- . " LEFT JOIN $wpdb->usermeta um2 ON u.ID = um2.user_id"
1009
- . " WHERE um.meta_key = '{$wpdb->prefix}capabilities'"
1010
- . " AND NOT um.meta_value LIKE '%subscriber%'"
1011
- . " AND um2.meta_key = 'nickname'";
1012
-
1013
- $users = $wpdb->get_results($sql);
1014
-
1015
- if (!$users || count($users) == 0) {
1016
- return;
1017
- }
1018
-
1019
- $r = '';
1020
- foreach ($users as $user) {
1021
- $login_ok = strcasecmp($user->user_login, 'admin');
1022
- $display_ok = strcasecmp($user->user_login, $user->display_name);
1023
- $nicename_ok = strcasecmp($user->user_login, $user->user_nicename);
1024
- $nickname_ok = strcasecmp($user->user_login, $user->nickname);
1025
-
1026
- if ($login_ok && $display_ok && $nicename_ok && $nickname_ok) {
1027
- continue;
1028
- }
1029
-
1030
- $role = implode(',', array_keys(maybe_unserialize($user->role)));
1031
- $login = limit_login_show_maybe_warning(!$login_ok, $user->user_login
1032
- , __("Account named admin should not have privileges", 'limit-login-attempts'));
1033
- $display = limit_login_show_maybe_warning(!$display_ok, $user->display_name
1034
- , __("Make display name different from login name", 'limit-login-attempts'));
1035
- $nicename = limit_login_show_maybe_warning(!$nicename_ok, $user->user_nicename
1036
- , __("Make url name different from login name", 'limit-login-attempts'));
1037
- $nickname = limit_login_show_maybe_warning(!$nickname_ok, $user->nickname
1038
- , __("Make nickname different from login name", 'limit-login-attempts'));
1039
-
1040
- $r .= '<tr><td>' . $login . '</td>'
1041
- . '<td>' . $role . '</td>'
1042
- . '<td>' . $display . '</td>'
1043
- . '<td>' . $nicename . '</td>'
1044
- . '<td>' . $nickname . '</td>'
1045
- . '</tr>';
1046
- }
1047
-
1048
- if ($r == '') {
1049
- echo(sprintf('<tr><td>%s</tr></td>'
1050
- , __("Privileged usernames, display names, url names and nicknames ok", 'limit-login-attempts')));
1051
- return;
1052
- }
1053
-
1054
- echo('<tr>'
1055
- . '<th scope="col">'
1056
- . __("User Login", 'limit-login-attempts')
1057
- . '</th><th scope="col">'
1058
- . __('Role', 'limit-login-attempts')
1059
- . '</th><th scope="col">'
1060
- . __('Display Name', 'limit-login-attempts')
1061
- . '</th><th scope="col">'
1062
- . __('URL Name <small>("nicename")</small>', 'limit-login-attempts')
1063
- . '</th><th scope="col">'
1064
- . __('Nickname', 'limit-login-attempts')
1065
- . '</th></tr>'
1066
- . $r);
1067
- }
1068
-
1069
-
1070
- function limit_login_show_maybe_warning($is_warn, $name, $title) {
1071
- static $alt, $bad_img_url;
1072
-
1073
- if (!$is_warn) {
1074
- return $name;
1075
- }
1076
-
1077
- if (empty($alt)) {
1078
- $alt = __("bad name", 'limit-login-attempts');
1079
- }
1080
-
1081
- if (empty($bad_img_url)) {
1082
- if ( !defined('WP_PLUGIN_URL') )
1083
- $plugin_url = get_option('siteurl') . '/wp-content/plugins';
1084
- else
1085
- $plugin_url = WP_PLUGIN_URL;
1086
-
1087
- $bad_img_url = $plugin_url . '/limit-login-attempts/images/icon_bad.gif';
1088
- }
1089
-
1090
- return sprintf('<img src="%s" alt="%s" title="%s" />%s'
1091
- , $bad_img_url, $alt, $title, $name);
1092
- }
1093
-
1094
-
1095
- /* Show all role levels <select> */
1096
- function limit_login_select_level($current) {
1097
- global $limit_login_level_role;
1098
-
1099
- for ($i = 0; $i <= 10; $i++) {
1100
- $selected = ($i == $current) ? ' SELECTED ' : '';
1101
- $name = (array_key_exists($i, $limit_login_level_role)) ? ' - ' . $limit_login_level_role[$i] : '';
1102
- echo("<option value=\"$i\" $selected>$i$name</option>");
1103
- }
1104
- }
1105
-
1106
-
1107
- /* Get most options from $_POST[] (not lockout_notify) */
1108
- function limit_login_get_options_from_post() {
1109
- global $limit_login_options;
1110
-
1111
- $option_multiple =
1112
- array('lockout_duration' => 60, 'valid_duration' => 3600
1113
- , 'long_duration' => 3600, 'register_duration' => 3600);
1114
-
1115
- foreach ($limit_login_options as $name => $oldvalue) {
1116
- if (is_bool($oldvalue)) {
1117
- $value = isset($_POST[$name]) && $_POST[$name] == '1';
1118
- } else {
1119
- if (!isset($_POST[$name])) {
1120
- continue;
1121
- }
1122
-
1123
- $value = $_POST[$name];
1124
- if (is_numeric($oldvalue)) {
1125
- $value = intval($value);
1126
- }
1127
- if (array_key_exists($name, $option_multiple)) {
1128
- $value = $value * $option_multiple[$name];
1129
- }
1130
- }
1131
-
1132
- $limit_login_options[$name] = $value;
1133
- }
1134
- }
1135
-
1136
-
1137
  /* Actual admin page */
1138
  function limit_login_option_page() {
1139
  limit_login_cleanup();
@@ -1170,7 +766,14 @@ function limit_login_option_page() {
1170
  if (isset($_POST['update_options'])) {
1171
  global $limit_login_options;
1172
 
1173
- limit_login_get_options_from_post();
 
 
 
 
 
 
 
1174
 
1175
  $v = array();
1176
  if (isset($_POST['lockout_notify_log'])) {
@@ -1202,6 +805,7 @@ function limit_login_option_page() {
1202
  $cookies_note = '';
1203
  }
1204
  $cookies_yes = limit_login_option('cookies') ? ' checked ' : '';
 
1205
 
1206
  $client_type = limit_login_option('client_type');
1207
  $client_type_direct = $client_type == LIMIT_LOGIN_DIRECT_ADDR ? ' checked ' : '';
@@ -1226,37 +830,7 @@ function limit_login_option_page() {
1226
  $v = explode(',', limit_login_option('lockout_notify'));
1227
  $log_checked = in_array('log', $v) ? ' checked ' : '';
1228
  $email_checked = in_array('email', $v) ? ' checked ' : '';
1229
-
1230
- $disable_pwd_reset_username_yes = limit_login_option('disable_pwd_reset_username') ? ' checked ' : '';
1231
- $disable_pwd_reset_yes = limit_login_option('disable_pwd_reset') ? ' checked ' : '';
1232
-
1233
- $register_enforce_yes = limit_login_option('register_enforce') ? ' checked ' : '';
1234
-
1235
  ?>
1236
- <style type="text/css" media="screen">
1237
- table.limit-login {
1238
- width: 100%;
1239
- border-collapse: collapse;
1240
- }
1241
- .limit-login th {
1242
- font-size: 12px;
1243
- font-weight: bold;
1244
- text-align: left;
1245
- padding: 0;
1246
- }
1247
- .limit-login td {
1248
- font-size: 11px;
1249
- line-height: 11px;
1250
- padding: 1px 5px 1px 0;
1251
- }
1252
- td.limit-login-ip {
1253
- font-family: "Courier New", Courier, monospace;
1254
- vertical-align: top;
1255
- }
1256
- td.limit-login-max {
1257
- width: 100%;
1258
- }
1259
- </style>
1260
  <div class="wrap">
1261
  <h2><?php echo __('Limit Login Attempts Settings','limit-login-attempts'); ?></h2>
1262
  <h3><?php echo __('Statistics','limit-login-attempts'); ?></h3>
@@ -1294,13 +868,6 @@ function limit_login_option_page() {
1294
  <input type="text" size="3" maxlength="4" value="<?php echo(limit_login_option('valid_duration')/3600); ?>" name="valid_duration" /> <?php echo __('hours until retries are reset','limit-login-attempts'); ?>
1295
  </td>
1296
  </tr>
1297
- <tr>
1298
- <th scope="row" valign="top"><?php echo __('User cookie login','limit-login-attempts'); ?></th>
1299
- <td>
1300
- <label><input type="checkbox" name="cookies" <?php echo $cookies_disabled . $cookies_yes; ?> value="1" /> <?php echo __('Handle cookie login','limit-login-attempts'); ?></label>
1301
- <?php echo $cookies_note ?>
1302
- </td>
1303
- </tr>
1304
  <tr>
1305
  <th scope="row" valign="top"><?php echo __('Site connection','limit-login-attempts'); ?></th>
1306
  <td>
@@ -1319,24 +886,17 @@ function limit_login_option_page() {
1319
  </td>
1320
  </tr>
1321
  <tr>
1322
- <th scope="row" valign="top"><?php echo __('Notify on lockout','limit-login-attempts'); ?></th>
1323
- <td>
1324
- <input type="checkbox" name="lockout_notify_log" <?php echo $log_checked; ?> value="log" /> <?php echo __('Log IP','limit-login-attempts'); ?><br />
1325
- <input type="checkbox" name="lockout_notify_email" <?php echo $email_checked; ?> value="email" /> <?php echo __('Email to admin after','limit-login-attempts'); ?> <input type="text" size="3" maxlength="4" value="<?php echo(limit_login_option('notify_email_after')); ?>" name="email_after" /> <?php echo __('lockouts','limit-login-attempts'); ?>
1326
- </td>
1327
- </tr>
1328
- <tr>
1329
- <th scope="row" valign="top"><?php echo __('Password reset','limit-login-attempts'); ?></th>
1330
  <td>
1331
- <label><input type="checkbox" name="disable_pwd_reset_username" <?php echo $disable_pwd_reset_username_yes; ?> value="1" /> <?php echo __('Disable password reset using login name for user this level or higher','limit-login-attempts'); ?></label> <select name="pwd_reset_username_limit"><?php limit_login_select_level(limit_login_option('pwd_reset_username_limit')); ?></select>
1332
- <br />
1333
- <label><input type="checkbox" name="disable_pwd_reset" <?php echo $disable_pwd_reset_yes; ?> value="1" /> <?php echo __('Disable password reset for users this level or higher','limit-login-attempts'); ?></label> <select name="pwd_reset_limit"><?php limit_login_select_level(limit_login_option('pwd_reset_limit')); ?></select>
1334
  </td>
1335
  </tr>
1336
  <tr>
1337
- <th scope="row" valign="top"><?php echo __('New user registration','limit-login-attempts'); ?></th>
1338
  <td>
1339
- <input type="checkbox" name="register_enforce" <?php echo $register_enforce_yes; ?> value="1" /> <?php echo __('Only allow','limit-login-attempts'); ?> <input type="text" size="3" maxlength="4" value="<?php echo(limit_login_option('register_allowed')); ?>" name="register_allowed" /> <?php echo __('user registrations every','limit-login-attempts'); ?> <input type="text" size="3" maxlength="4" value="<?php echo(limit_login_option('register_duration')/3600); ?>" name="register_duration" /> <?php echo __('hours','limit-login-attempts'); ?>
 
1340
  </td>
1341
  </tr>
1342
  </table>
@@ -1344,30 +904,42 @@ function limit_login_option_page() {
1344
  <input name="update_options" value="<?php echo __('Change Options','limit-login-attempts'); ?>" type="submit" />
1345
  </p>
1346
  </form>
1347
- <h3><?php echo __('Privileged users','limit-login-attempts'); ?></h3>
1348
- <table class="limit-login">
1349
- <?php limit_login_show_users(); ?>
1350
- </table>
1351
  <?php
1352
  $log = get_option('limit_login_logged');
1353
 
1354
  if (is_array($log) && count($log) > 0) {
1355
  ?>
1356
  <h3><?php echo __('Lockout log','limit-login-attempts'); ?></h3>
1357
- <div class="limit-login">
1358
- <table>
1359
- <?php limit_login_show_log($log); ?>
1360
- </table>
1361
- </div>
1362
  <form action="options-general.php?page=limit-login-attempts" method="post">
1363
  <input type="hidden" value="true" name="clear_log" />
1364
  <p class="submit">
1365
  <input name="submit" value="<?php echo __('Clear Log','limit-login-attempts'); ?>" type="submit" />
1366
  </p>
1367
  </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1368
  <?php
1369
  } /* if showing $log */
1370
  ?>
 
1371
  </div>
1372
  <?php
1373
  }
5
  Description: Limit rate of login attempts, including by way of cookies, for each IP.
6
  Author: Johan Eenfeldt
7
  Author URI: http://devel.kostdoktorn.se
8
+ Version: 1.3.2
9
 
10
  Copyright 2008, 2009 Johan Eenfeldt
11
 
76
 
77
  /* If notify by email, do so after this number of lockouts */
78
  , 'notify_email_after' => 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  );
80
 
81
  $limit_login_my_error_shown = false; /* have we shown our stuff? */
82
  $limit_login_just_lockedout = false; /* started this pageload??? */
83
  $limit_login_nonempty_credentials = false; /* user and pwd nonempty */
84
 
 
 
 
 
 
85
 
86
  /*
87
  * Startup
113
  add_action('login_head', 'limit_login_add_error_message');
114
  add_action('login_errors', 'limit_login_fixup_error_messages');
115
  add_action('admin_menu', 'limit_login_admin_menu');
116
+ }
117
+
118
+
119
+ /* Get current option value */
120
+ function limit_login_option($option_name) {
121
+ global $limit_login_options;
122
+
123
+ if (isset($limit_login_options[$option_name])) {
124
+ return $limit_login_options[$option_name];
125
+ } else {
126
+ return null;
127
  }
128
  }
129
 
172
  }
173
 
174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  /* Filter: allow login attempt? (called from wp_authenticate()) */
176
  function limit_login_wp_authenticate_user($user, $password) {
177
  if (is_wp_error($user) || is_limit_login_ok() ) {
325
  /* remove retries that are no longer valid */
326
  $valid = !is_null($valid) ? $valid : get_option('limit_login_retries_valid');
327
  $retries = !is_null($retries) ? $retries : get_option('limit_login_retries');
328
+ if (!is_array($valid) || !is_array($retries)) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  return;
330
  }
331
 
332
+ foreach ($valid as $ip => $lockout) {
333
+ if ($lockout < $now) {
334
+ unset($valid[$ip]);
335
+ unset($retries[$ip]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
  }
337
  }
338
 
339
+ /* go through retries directly, if for some reason they've gone out of sync */
340
+ foreach ($retries as $ip => $retry) {
341
+ if (!isset($valid[$ip])) {
342
+ unset($retries[$ip]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  }
344
  }
345
 
346
+ update_option('limit_login_retries', $retries);
347
+ update_option('limit_login_retries_valid', $valid);
 
 
 
 
 
 
 
 
 
 
 
 
348
  }
349
 
350
 
 
 
 
 
351
  /* Email notification of lockout to admin (if configured) */
352
  function limit_login_notify_email($user) {
353
  $ip = limit_login_get_address();
439
  }
440
 
441
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  /* Construct informative error message */
443
+ function limit_login_error_msg() {
444
  $ip = limit_login_get_address();
445
+ $lockouts = get_option('limit_login_lockouts');
446
 
447
+ $msg = __('<strong>ERROR</strong>: Too many failed login attempts.', 'limit-login-attempts') . ' ';
 
 
448
 
449
  if (!is_array($lockouts) || !isset($lockouts[$ip]) || time() >= $lockouts[$ip]) {
450
+ /* Huh? No timeout active? */
451
+ $msg .= __('Please try again later.', 'limit-login-attempts');
452
  return $msg;
453
  }
454
 
515
  }
516
 
517
 
 
 
 
 
 
 
 
 
 
 
 
 
 
518
  /* Fix up the error message before showing it */
519
  function limit_login_fixup_error_messages($content) {
520
  global $limit_login_just_lockedout, $limit_login_nonempty_credentials, $limit_login_my_error_shown;
575
  function limit_login_add_error_message() {
576
  global $error, $limit_login_my_error_shown;
577
 
 
 
 
 
 
 
578
  if (!should_limit_login_show_msg() || $limit_login_my_error_shown) {
579
  return;
580
  }
598
  }
599
 
600
 
601
+ /*
602
+ * Admin stuff
603
+ */
604
+
605
  /* Does wordpress version support cookie option? */
606
  function limit_login_support_cookie_option() {
607
  global $wp_version;
609
  }
610
 
611
 
612
+ /* Make a guess if we are behind a proxy or not */
613
+ function limit_login_guess_proxy() {
614
+ return isset($_SERVER[LIMIT_LOGIN_PROXY_ADDR])
615
+ ? LIMIT_LOGIN_PROXY_ADDR : LIMIT_LOGIN_DIRECT_ADDR;
 
 
 
 
 
 
 
 
 
616
  }
617
 
618
 
623
  if ($a !== false) {
624
  global $limit_login_options;
625
 
 
 
 
 
 
 
 
 
626
  $limit_login_options[$var_name] = $a;
627
  }
628
  }
630
 
631
  /* Setup global variables from options */
632
  function limit_login_setup_options() {
633
+ limit_login_get_option('limit_login_client_type', 'client_type');
634
+ limit_login_get_option('limit_login_allowed_retries', 'allowed_retries');
635
+ limit_login_get_option('limit_login_lockout_duration', 'lockout_duration');
636
+ limit_login_get_option('limit_login_valid_duration', 'valid_duration');
637
+ limit_login_get_option('limit_login_cookies', 'cookies');
638
+ limit_login_get_option('limit_login_lockout_notify', 'lockout_notify');
639
+ limit_login_get_option('limit_login_allowed_lockouts', 'allowed_lockouts');
640
+ limit_login_get_option('limit_login_long_duration', 'long_duration');
641
+ limit_login_get_option('limit_login_notify_email_after', 'notify_email_after');
642
 
643
  limit_login_sanitize_variables();
644
  }
646
 
647
  /* Update options in db from global variables */
648
  function limit_login_update_options() {
649
+ update_option('limit_login_client_type', limit_login_option('client_type'));
650
+ update_option('limit_login_allowed_retries', limit_login_option('allowed_retries'));
651
+ update_option('limit_login_lockout_duration', limit_login_option('lockout_duration'));
652
+ update_option('limit_login_allowed_lockouts', limit_login_option('allowed_lockouts'));
653
+ update_option('limit_login_long_duration', limit_login_option('long_duration'));
654
+ update_option('limit_login_valid_duration', limit_login_option('valid_duration'));
655
+ update_option('limit_login_lockout_notify', limit_login_option('lockout_notify'));
656
+ update_option('limit_login_notify_email_after', limit_login_option('notify_email_after'));
657
+ update_option('limit_login_cookies', limit_login_option('cookies') ? '1' : '0');
658
+ }
659
+
660
+
661
+ /* Make sure the variables make sense -- simple integer */
662
+ function limit_login_sanitize_simple_int($var_name) {
663
  global $limit_login_options;
664
 
665
+ $limit_login_options[$var_name] = max(1, intval(limit_login_option($var_name)));
 
 
 
 
 
666
  }
667
 
668
 
670
  function limit_login_sanitize_variables() {
671
  global $limit_login_options;
672
 
673
+ limit_login_sanitize_simple_int('allowed_retries');
674
+ limit_login_sanitize_simple_int('lockout_duration');
675
+ limit_login_sanitize_simple_int('valid_duration');
676
+ limit_login_sanitize_simple_int('allowed_lockouts');
677
+ limit_login_sanitize_simple_int('long_duration');
678
+
679
  $notify_email_after = max(1, intval(limit_login_option('notify_email_after')));
680
  $limit_login_options['notify_email_after'] = min(limit_login_option('allowed_lockouts'), $notify_email_after);
681
 
701
  }
702
 
703
 
 
 
 
 
704
  /* Add admin options page */
705
  function limit_login_admin_menu() {
706
  add_options_page('Limit Login Attempts', 'Limit Login Attempts', 8, 'limit-login-attempts', 'limit_login_option_page');
707
  }
708
 
709
 
 
 
 
 
 
 
 
710
  /* Show log on admin page */
711
  function limit_login_show_log($log) {
712
  if (!is_array($log) || count($log) == 0) {
730
  }
731
  }
732
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
733
  /* Actual admin page */
734
  function limit_login_option_page() {
735
  limit_login_cleanup();
766
  if (isset($_POST['update_options'])) {
767
  global $limit_login_options;
768
 
769
+ $limit_login_options['client_type'] = $_POST['client_type'];
770
+ $limit_login_options['allowed_retries'] = $_POST['allowed_retries'];
771
+ $limit_login_options['lockout_duration'] = $_POST['lockout_duration'] * 60;
772
+ $limit_login_options['valid_duration'] = $_POST['valid_duration'] * 3600;
773
+ $limit_login_options['allowed_lockouts'] = $_POST['allowed_lockouts'];
774
+ $limit_login_options['long_duration'] = $_POST['long_duration'] * 3600;
775
+ $limit_login_options['notify_email_after'] = $_POST['email_after'];
776
+ $limit_login_options['cookies'] = (isset($_POST['cookies']) && $_POST['cookies'] == '1');
777
 
778
  $v = array();
779
  if (isset($_POST['lockout_notify_log'])) {
805
  $cookies_note = '';
806
  }
807
  $cookies_yes = limit_login_option('cookies') ? ' checked ' : '';
808
+ $cookies_no = limit_login_option('cookies') ? '' : ' checked ';
809
 
810
  $client_type = limit_login_option('client_type');
811
  $client_type_direct = $client_type == LIMIT_LOGIN_DIRECT_ADDR ? ' checked ' : '';
830
  $v = explode(',', limit_login_option('lockout_notify'));
831
  $log_checked = in_array('log', $v) ? ' checked ' : '';
832
  $email_checked = in_array('email', $v) ? ' checked ' : '';
 
 
 
 
 
 
833
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
834
  <div class="wrap">
835
  <h2><?php echo __('Limit Login Attempts Settings','limit-login-attempts'); ?></h2>
836
  <h3><?php echo __('Statistics','limit-login-attempts'); ?></h3>
868
  <input type="text" size="3" maxlength="4" value="<?php echo(limit_login_option('valid_duration')/3600); ?>" name="valid_duration" /> <?php echo __('hours until retries are reset','limit-login-attempts'); ?>
869
  </td>
870
  </tr>
 
 
 
 
 
 
 
871
  <tr>
872
  <th scope="row" valign="top"><?php echo __('Site connection','limit-login-attempts'); ?></th>
873
  <td>
886
  </td>
887
  </tr>
888
  <tr>
889
+ <th scope="row" valign="top"><?php echo __('Handle cookie login','limit-login-attempts'); ?></th>
 
 
 
 
 
 
 
890
  <td>
891
+ <label><input type="radio" name="cookies" <?php echo $cookies_disabled . $cookies_yes; ?> value="1" /> <?php echo __('Yes','limit-login-attempts'); ?></label> <label><input type="radio" name="cookies" <?php echo $cookies_disabled . $cookies_no; ?> value="0" /> <?php echo __('No','limit-login-attempts'); ?></label>
892
+ <?php echo $cookies_note ?>
 
893
  </td>
894
  </tr>
895
  <tr>
896
+ <th scope="row" valign="top"><?php echo __('Notify on lockout','limit-login-attempts'); ?></th>
897
  <td>
898
+ <input type="checkbox" name="lockout_notify_log" <?php echo $log_checked; ?> value="log" /> <?php echo __('Log IP','limit-login-attempts'); ?><br />
899
+ <input type="checkbox" name="lockout_notify_email" <?php echo $email_checked; ?> value="email" /> <?php echo __('Email to admin after','limit-login-attempts'); ?> <input type="text" size="3" maxlength="4" value="<?php echo(limit_login_option('notify_email_after')); ?>" name="email_after" /> <?php echo __('lockouts','limit-login-attempts'); ?>
900
  </td>
901
  </tr>
902
  </table>
904
  <input name="update_options" value="<?php echo __('Change Options','limit-login-attempts'); ?>" type="submit" />
905
  </p>
906
  </form>
 
 
 
 
907
  <?php
908
  $log = get_option('limit_login_logged');
909
 
910
  if (is_array($log) && count($log) > 0) {
911
  ?>
912
  <h3><?php echo __('Lockout log','limit-login-attempts'); ?></h3>
 
 
 
 
 
913
  <form action="options-general.php?page=limit-login-attempts" method="post">
914
  <input type="hidden" value="true" name="clear_log" />
915
  <p class="submit">
916
  <input name="submit" value="<?php echo __('Clear Log','limit-login-attempts'); ?>" type="submit" />
917
  </p>
918
  </form>
919
+ <style type="text/css" media="screen">
920
+ .limit-login-log th {
921
+ font-weight: bold;
922
+ }
923
+ .limit-login-log td, .limit-login-log th {
924
+ padding: 1px 5px 1px 5px;
925
+ }
926
+ td.limit-login-ip {
927
+ font-family: "Courier New", Courier, monospace;
928
+ vertical-align: top;
929
+ }
930
+ td.limit-login-max {
931
+ width: 100%;
932
+ }
933
+ </style>
934
+ <div class="limit-login-log">
935
+ <table class="form-table">
936
+ <?php limit_login_show_log($log); ?>
937
+ </table>
938
+ </div>
939
  <?php
940
  } /* if showing $log */
941
  ?>
942
+
943
  </div>
944
  <?php
945
  }
readme.txt CHANGED
@@ -2,15 +2,13 @@
2
  Contributors: johanee
3
  Tags: login, security, authentication
4
  Requires at least: 2.5
5
- Tested up to: 2.7.1
6
- Stable tag: 1.3.1
7
 
8
- Limit rate of login attempts, including by way of cookies, for each IP. (BETA VERSION)
9
 
10
  == Description ==
11
 
12
- THIS IS A BETA VERSION!
13
-
14
  Limit the number of login attempts possible both through normal login as well as (WordPress 2.7+) using auth cookies.
15
 
16
  By default WordPress allows unlimited login attempts either through the login page or by sending special cookies. This allows passwords (or hashes) to be brute-force cracked with relative ease.
@@ -20,12 +18,12 @@ Limit Login Attempts blocks an Internet address from making further attempts aft
20
  Features
21
 
22
  * Limit the number of retry attempts when logging in (for each IP). Fully customizable
 
23
  * Informs user about remaining retries or lockout time on login page
24
  * Optional logging, optional email notification
25
  * Handles server behind reverse proxy
26
- * (WordPress 2.7+) Also handles attempts to log in using auth cookies
27
- * Helps hide user login names
28
- * Optional restriction on password reset attempts for privileged users, and rate limit new user registration
29
 
30
  Plugin uses standard actions and filters only.
31
 
@@ -37,12 +35,6 @@ Plugin uses standard actions and filters only.
37
 
38
  If you have any questions or problems please make a post here: http://wordpress.org/tags/limit-login-attempts
39
 
40
- == Todo ==
41
-
42
- * There is no built in way to change user login name or nicename.
43
- * Smarter matching vs login name
44
- * Translations
45
-
46
  == Frequently Asked Questions ==
47
 
48
  = What is this option about site connection and reverse proxy? =
@@ -63,20 +55,6 @@ If you have ftp / ssh access to the site rename the file "wp-content/plugins/lim
63
 
64
  If you have access to the database (for example through phpMyAdmin) you can clear the limit_login_lockouts option in the wordpress options table. In a default setup this would work: "UPDATE wp_options SET option_value = '' WHERE option_name = 'limit_login_lockouts'"
65
 
66
- = Why the privileged users list? Why are some names marked? =
67
-
68
- These are the various names WordPress has for each user. To increase security the login name should not be the same as any of these.
69
-
70
- = What is URL Name / "nicename"? =
71
-
72
- "Nicename" is what WordPress calls it (internally). It is constructed directly from the login name and is used in the public author url (among other things).
73
-
74
- = I disabled password reset for administrators and forgot my password, what do I do? =
75
-
76
- If you have ftp / ssh access look at the answer regarding being locked out above.
77
-
78
- If you have access to the database (for example through phpMyAdmin) you can clear the limit_login_reset_min_role option in the wordpress options table. In a default setup this would work: "UPDATE wp_options SET option_value = '' WHERE option_name = 'limit_login_reset_min_role'"
79
-
80
  == Screenshots ==
81
 
82
  1. Loginscreen after failed login with retries remaining
@@ -86,13 +64,12 @@ If you have access to the database (for example through phpMyAdmin) you can clea
86
 
87
  == Version History ==
88
 
89
- * Version 2.0beta1
90
- * Added a number of options that when activated make it harder to find login names of users
91
- * disable password reset using username (accept user email only) for users with a specified role or higher
92
- * disable password reset for users with a specified role or higher
93
- * restrict rate of new user registrations
94
- * filter registration error messages to avoid possible way to brute force find user login name
95
- * list of privileged users show which login names can be discovered from user displayname, nickname or "url name"/nicename
96
  * Version 1.3.1
97
  * Added Catalan translation, thanks to Robert Buj
98
  * Added Romanian translation, thanks to Robert Tudor
2
  Contributors: johanee
3
  Tags: login, security, authentication
4
  Requires at least: 2.5
5
+ Tested up to: 2.8.4
6
+ Stable tag: 1.3.2
7
 
8
+ Limit rate of login attempts, including by way of cookies, for each IP.
9
 
10
  == Description ==
11
 
 
 
12
  Limit the number of login attempts possible both through normal login as well as (WordPress 2.7+) using auth cookies.
13
 
14
  By default WordPress allows unlimited login attempts either through the login page or by sending special cookies. This allows passwords (or hashes) to be brute-force cracked with relative ease.
18
  Features
19
 
20
  * Limit the number of retry attempts when logging in (for each IP). Fully customizable
21
+ * (WordPress 2.7+) Limit the number of attempts to log in using auth cookies in same way
22
  * Informs user about remaining retries or lockout time on login page
23
  * Optional logging, optional email notification
24
  * Handles server behind reverse proxy
25
+
26
+ Translations: Bulgarian, Catalan, German, Norwegian, Persian, Romanian, Russian, Spanish, Swedish
 
27
 
28
  Plugin uses standard actions and filters only.
29
 
35
 
36
  If you have any questions or problems please make a post here: http://wordpress.org/tags/limit-login-attempts
37
 
 
 
 
 
 
 
38
  == Frequently Asked Questions ==
39
 
40
  = What is this option about site connection and reverse proxy? =
55
 
56
  If you have access to the database (for example through phpMyAdmin) you can clear the limit_login_lockouts option in the wordpress options table. In a default setup this would work: "UPDATE wp_options SET option_value = '' WHERE option_name = 'limit_login_lockouts'"
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  == Screenshots ==
59
 
60
  1. Loginscreen after failed login with retries remaining
64
 
65
  == Version History ==
66
 
67
+ * Version 1.3.2
68
+ * Added Bulgarian translation, thanks to Hristo Chakarov
69
+ * Added Norwegian translation, thanks to Rune Gulbrands�y
70
+ * Added Spanish translation, thanks to Marcelo Pedra
71
+ * Added Persian translation, thanks to Mostafa Soufi
72
+ * Added Russian translation, thanks to Jack Leonid (http://studio-xl.com)
 
73
  * Version 1.3.1
74
  * Added Catalan translation, thanks to Robert Buj
75
  * Added Romanian translation, thanks to Robert Tudor