Merge lp:~stewart/percona-server/5.5.23-pam into lp:percona-server/5.5
- 5.5.23-pam
- Merge into 5.5
Proposed by
Stewart Smith
Status: | Merged |
---|---|
Approved by: | Laurynas Biveinis |
Approved revision: | no longer in the source branch. |
Merged at revision: | 245 |
Proposed branch: | lp:~stewart/percona-server/5.5.23-pam |
Merge into: | lp:percona-server/5.5 |
Prerequisite: | lp:~stewart/percona-server/5.5.23 |
Diff against target: |
5171 lines (+4911/-0) 38 files modified
Percona-Server/plugin/percona-pam-for-mysql/.bzrignore (+21/-0) Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt (+30/-0) Percona-Server/plugin/percona-pam-for-mysql/LICENSE (+339/-0) Percona-Server/plugin/percona-pam-for-mysql/Makefile.am (+19/-0) Percona-Server/plugin/percona-pam-for-mysql/README (+40/-0) Percona-Server/plugin/percona-pam-for-mysql/bootstrap (+18/-0) Percona-Server/plugin/percona-pam-for-mysql/build/build-binary.sh.in (+122/-0) Percona-Server/plugin/percona-pam-for-mysql/build/percona-pam-plugin.spec.in (+66/-0) Percona-Server/plugin/percona-pam-for-mysql/configure.ac (+95/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile (+130/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/make.bat (+170/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/conf.py (+245/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/faq.rst (+51/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/glossary.rst (+8/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/index.rst (+51/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/installation.rst (+50/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/intro.rst (+23/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/manual.rst (+38/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html (+499/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html (+22/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t (+469/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js (+154/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css (+271/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js (+269/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js (+151/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf (+32/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/release-notes.rst (+8/-0) Percona-Server/plugin/percona-pam-for-mysql/src/Makefile.am (+37/-0) Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.c (+249/-0) Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.h (+74/-0) Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam.c (+175/-0) Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.c (+190/-0) Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h (+71/-0) Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_compat.c (+131/-0) Percona-Server/plugin/percona-pam-for-mysql/src/dialog.c (+351/-0) Percona-Server/plugin/percona-pam-for-mysql/src/lib_auth_pam_client.c (+80/-0) Percona-Server/plugin/percona-pam-for-mysql/src/lib_auth_pam_client.h (+80/-0) Percona-Server/plugin/percona-pam-for-mysql/src/test_auth_pam_client.c (+82/-0) |
To merge this branch: | bzr merge lp:~stewart/percona-server/5.5.23-pam |
Related bugs: | |
Related blueprints: |
Integrate the plugin with Percona Server
(Essential)
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Laurynas Biveinis (community) | Approve | ||
Review via email: mp+105034@code.launchpad.net |
Commit message
Description of the change
Add PAM plugin to 5.5.23 build, adapt CMakeLists to work in tree.
To post a comment you must log in.
Revision history for this message
Stewart Smith (stewart) wrote : | # |
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : | # |
OK if Jenkins testing passes.
After the merge please update all the relevant percona-server-5.5 Jenkins jobs to include the testing part of percona-pam-trunk.
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql' |
2 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/.bzrignore' |
3 | --- Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 1970-01-01 00:00:00 +0000 |
4 | +++ Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 2012-05-08 06:39:22 +0000 |
5 | @@ -0,0 +1,21 @@ |
6 | +aclocal.m4 |
7 | +autom4te.cache |
8 | +config.* |
9 | +configure |
10 | +install-sh |
11 | +ltmain.sh |
12 | +libtool |
13 | +missing |
14 | +Makefile.in |
15 | +*.la |
16 | +*.lo |
17 | +depcomp |
18 | +Makefile |
19 | +.deps |
20 | +.libs |
21 | +stamp-h1 |
22 | +build/percona-pam-plugin.spec |
23 | +build/build-binary.sh |
24 | +*.tar.gz |
25 | +m4/*.m4 |
26 | +doc/build |
27 | |
28 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt' |
29 | --- Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
30 | +++ Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 2012-05-08 06:39:22 +0000 |
31 | @@ -0,0 +1,30 @@ |
32 | +# (C) 2011 Percona Inc. |
33 | +# |
34 | +# This program is free software; you can redistribute it and/or modify |
35 | +# it under the terms of the GNU General Public License as published by |
36 | +# the Free Software Foundation; version 2 of the License. |
37 | +# |
38 | +# This program is distributed in the hope that it will be useful, |
39 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
40 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
41 | +# GNU General Public License for more details. |
42 | +# |
43 | +# You should have received a copy of the GNU General Public License |
44 | +# along with this program; if not, write to the Free Software |
45 | +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
46 | +# |
47 | +INCLUDE (CheckLibraryExists) |
48 | +CHECK_LIBRARY_EXISTS(pam pam_authenticate "" HAVE_PAM) |
49 | +CHECK_LIBRARY_EXISTS(mysqlclient mysql_init "" HAVE_MYSQLCLIENT) |
50 | +CHECK_SYMBOL_EXISTS(getpwnam_r "pwd.h" HAVE_GETPWNAM_R) |
51 | +CHECK_SYMBOL_EXISTS(getgrgid_r "grp.h" HAVE_GETGRGID_R) |
52 | +IF(HAVE_PAM AND HAVE_MYSQLCLIENT AND HAVE_GETPWNAM_R AND HAVE_GETGRGID_R) |
53 | + SET(AUTH_PAM_COMMON_SOURCES |
54 | + src/auth_pam_common.c src/lib_auth_pam_client.c src/lib_auth_pam_client.h |
55 | + src/auth_mapping.h src/auth_mapping.c) |
56 | + SET(AUTH_PAM_SOURCES ${AUTH_PAM_COMMON_SOURCES} src/auth_pam.c) |
57 | + SET(AUTH_PAM_COMPAT_SOURCES ${AUTH_PAM_COMMON_SOURCES} src/auth_pam_compat.c) |
58 | + MYSQL_ADD_PLUGIN(auth_pam ${AUTH_PAM_SOURCES} LINK_LIBRARIES pam MODULE_ONLY) |
59 | + MYSQL_ADD_PLUGIN(auth_pam_compat ${AUTH_PAM_COMPAT_SOURCES} LINK_LIBRARIES pam MODULE_ONLY) |
60 | + MYSQL_ADD_PLUGIN(dialog src/dialog.c LINK_LIBRARIES mysqlclient MODULE_ONLY) |
61 | +ENDIF(HAVE_PAM AND HAVE_MYSQLCLIENT AND HAVE_GETPWNAM_R AND HAVE_GETGRGID_R) |
62 | |
63 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/LICENSE' |
64 | --- Percona-Server/plugin/percona-pam-for-mysql/LICENSE 1970-01-01 00:00:00 +0000 |
65 | +++ Percona-Server/plugin/percona-pam-for-mysql/LICENSE 2012-05-08 06:39:22 +0000 |
66 | @@ -0,0 +1,339 @@ |
67 | + GNU GENERAL PUBLIC LICENSE |
68 | + Version 2, June 1991 |
69 | + |
70 | + Copyright (C) 1989, 1991 Free Software Foundation, Inc., |
71 | + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
72 | + Everyone is permitted to copy and distribute verbatim copies |
73 | + of this license document, but changing it is not allowed. |
74 | + |
75 | + Preamble |
76 | + |
77 | + The licenses for most software are designed to take away your |
78 | +freedom to share and change it. By contrast, the GNU General Public |
79 | +License is intended to guarantee your freedom to share and change free |
80 | +software--to make sure the software is free for all its users. This |
81 | +General Public License applies to most of the Free Software |
82 | +Foundation's software and to any other program whose authors commit to |
83 | +using it. (Some other Free Software Foundation software is covered by |
84 | +the GNU Lesser General Public License instead.) You can apply it to |
85 | +your programs, too. |
86 | + |
87 | + When we speak of free software, we are referring to freedom, not |
88 | +price. Our General Public Licenses are designed to make sure that you |
89 | +have the freedom to distribute copies of free software (and charge for |
90 | +this service if you wish), that you receive source code or can get it |
91 | +if you want it, that you can change the software or use pieces of it |
92 | +in new free programs; and that you know you can do these things. |
93 | + |
94 | + To protect your rights, we need to make restrictions that forbid |
95 | +anyone to deny you these rights or to ask you to surrender the rights. |
96 | +These restrictions translate to certain responsibilities for you if you |
97 | +distribute copies of the software, or if you modify it. |
98 | + |
99 | + For example, if you distribute copies of such a program, whether |
100 | +gratis or for a fee, you must give the recipients all the rights that |
101 | +you have. You must make sure that they, too, receive or can get the |
102 | +source code. And you must show them these terms so they know their |
103 | +rights. |
104 | + |
105 | + We protect your rights with two steps: (1) copyright the software, and |
106 | +(2) offer you this license which gives you legal permission to copy, |
107 | +distribute and/or modify the software. |
108 | + |
109 | + Also, for each author's protection and ours, we want to make certain |
110 | +that everyone understands that there is no warranty for this free |
111 | +software. If the software is modified by someone else and passed on, we |
112 | +want its recipients to know that what they have is not the original, so |
113 | +that any problems introduced by others will not reflect on the original |
114 | +authors' reputations. |
115 | + |
116 | + Finally, any free program is threatened constantly by software |
117 | +patents. We wish to avoid the danger that redistributors of a free |
118 | +program will individually obtain patent licenses, in effect making the |
119 | +program proprietary. To prevent this, we have made it clear that any |
120 | +patent must be licensed for everyone's free use or not licensed at all. |
121 | + |
122 | + The precise terms and conditions for copying, distribution and |
123 | +modification follow. |
124 | + |
125 | + GNU GENERAL PUBLIC LICENSE |
126 | + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
127 | + |
128 | + 0. This License applies to any program or other work which contains |
129 | +a notice placed by the copyright holder saying it may be distributed |
130 | +under the terms of this General Public License. The "Program", below, |
131 | +refers to any such program or work, and a "work based on the Program" |
132 | +means either the Program or any derivative work under copyright law: |
133 | +that is to say, a work containing the Program or a portion of it, |
134 | +either verbatim or with modifications and/or translated into another |
135 | +language. (Hereinafter, translation is included without limitation in |
136 | +the term "modification".) Each licensee is addressed as "you". |
137 | + |
138 | +Activities other than copying, distribution and modification are not |
139 | +covered by this License; they are outside its scope. The act of |
140 | +running the Program is not restricted, and the output from the Program |
141 | +is covered only if its contents constitute a work based on the |
142 | +Program (independent of having been made by running the Program). |
143 | +Whether that is true depends on what the Program does. |
144 | + |
145 | + 1. You may copy and distribute verbatim copies of the Program's |
146 | +source code as you receive it, in any medium, provided that you |
147 | +conspicuously and appropriately publish on each copy an appropriate |
148 | +copyright notice and disclaimer of warranty; keep intact all the |
149 | +notices that refer to this License and to the absence of any warranty; |
150 | +and give any other recipients of the Program a copy of this License |
151 | +along with the Program. |
152 | + |
153 | +You may charge a fee for the physical act of transferring a copy, and |
154 | +you may at your option offer warranty protection in exchange for a fee. |
155 | + |
156 | + 2. You may modify your copy or copies of the Program or any portion |
157 | +of it, thus forming a work based on the Program, and copy and |
158 | +distribute such modifications or work under the terms of Section 1 |
159 | +above, provided that you also meet all of these conditions: |
160 | + |
161 | + a) You must cause the modified files to carry prominent notices |
162 | + stating that you changed the files and the date of any change. |
163 | + |
164 | + b) You must cause any work that you distribute or publish, that in |
165 | + whole or in part contains or is derived from the Program or any |
166 | + part thereof, to be licensed as a whole at no charge to all third |
167 | + parties under the terms of this License. |
168 | + |
169 | + c) If the modified program normally reads commands interactively |
170 | + when run, you must cause it, when started running for such |
171 | + interactive use in the most ordinary way, to print or display an |
172 | + announcement including an appropriate copyright notice and a |
173 | + notice that there is no warranty (or else, saying that you provide |
174 | + a warranty) and that users may redistribute the program under |
175 | + these conditions, and telling the user how to view a copy of this |
176 | + License. (Exception: if the Program itself is interactive but |
177 | + does not normally print such an announcement, your work based on |
178 | + the Program is not required to print an announcement.) |
179 | + |
180 | +These requirements apply to the modified work as a whole. If |
181 | +identifiable sections of that work are not derived from the Program, |
182 | +and can be reasonably considered independent and separate works in |
183 | +themselves, then this License, and its terms, do not apply to those |
184 | +sections when you distribute them as separate works. But when you |
185 | +distribute the same sections as part of a whole which is a work based |
186 | +on the Program, the distribution of the whole must be on the terms of |
187 | +this License, whose permissions for other licensees extend to the |
188 | +entire whole, and thus to each and every part regardless of who wrote it. |
189 | + |
190 | +Thus, it is not the intent of this section to claim rights or contest |
191 | +your rights to work written entirely by you; rather, the intent is to |
192 | +exercise the right to control the distribution of derivative or |
193 | +collective works based on the Program. |
194 | + |
195 | +In addition, mere aggregation of another work not based on the Program |
196 | +with the Program (or with a work based on the Program) on a volume of |
197 | +a storage or distribution medium does not bring the other work under |
198 | +the scope of this License. |
199 | + |
200 | + 3. You may copy and distribute the Program (or a work based on it, |
201 | +under Section 2) in object code or executable form under the terms of |
202 | +Sections 1 and 2 above provided that you also do one of the following: |
203 | + |
204 | + a) Accompany it with the complete corresponding machine-readable |
205 | + source code, which must be distributed under the terms of Sections |
206 | + 1 and 2 above on a medium customarily used for software interchange; or, |
207 | + |
208 | + b) Accompany it with a written offer, valid for at least three |
209 | + years, to give any third party, for a charge no more than your |
210 | + cost of physically performing source distribution, a complete |
211 | + machine-readable copy of the corresponding source code, to be |
212 | + distributed under the terms of Sections 1 and 2 above on a medium |
213 | + customarily used for software interchange; or, |
214 | + |
215 | + c) Accompany it with the information you received as to the offer |
216 | + to distribute corresponding source code. (This alternative is |
217 | + allowed only for noncommercial distribution and only if you |
218 | + received the program in object code or executable form with such |
219 | + an offer, in accord with Subsection b above.) |
220 | + |
221 | +The source code for a work means the preferred form of the work for |
222 | +making modifications to it. For an executable work, complete source |
223 | +code means all the source code for all modules it contains, plus any |
224 | +associated interface definition files, plus the scripts used to |
225 | +control compilation and installation of the executable. However, as a |
226 | +special exception, the source code distributed need not include |
227 | +anything that is normally distributed (in either source or binary |
228 | +form) with the major components (compiler, kernel, and so on) of the |
229 | +operating system on which the executable runs, unless that component |
230 | +itself accompanies the executable. |
231 | + |
232 | +If distribution of executable or object code is made by offering |
233 | +access to copy from a designated place, then offering equivalent |
234 | +access to copy the source code from the same place counts as |
235 | +distribution of the source code, even though third parties are not |
236 | +compelled to copy the source along with the object code. |
237 | + |
238 | + 4. You may not copy, modify, sublicense, or distribute the Program |
239 | +except as expressly provided under this License. Any attempt |
240 | +otherwise to copy, modify, sublicense or distribute the Program is |
241 | +void, and will automatically terminate your rights under this License. |
242 | +However, parties who have received copies, or rights, from you under |
243 | +this License will not have their licenses terminated so long as such |
244 | +parties remain in full compliance. |
245 | + |
246 | + 5. You are not required to accept this License, since you have not |
247 | +signed it. However, nothing else grants you permission to modify or |
248 | +distribute the Program or its derivative works. These actions are |
249 | +prohibited by law if you do not accept this License. Therefore, by |
250 | +modifying or distributing the Program (or any work based on the |
251 | +Program), you indicate your acceptance of this License to do so, and |
252 | +all its terms and conditions for copying, distributing or modifying |
253 | +the Program or works based on it. |
254 | + |
255 | + 6. Each time you redistribute the Program (or any work based on the |
256 | +Program), the recipient automatically receives a license from the |
257 | +original licensor to copy, distribute or modify the Program subject to |
258 | +these terms and conditions. You may not impose any further |
259 | +restrictions on the recipients' exercise of the rights granted herein. |
260 | +You are not responsible for enforcing compliance by third parties to |
261 | +this License. |
262 | + |
263 | + 7. If, as a consequence of a court judgment or allegation of patent |
264 | +infringement or for any other reason (not limited to patent issues), |
265 | +conditions are imposed on you (whether by court order, agreement or |
266 | +otherwise) that contradict the conditions of this License, they do not |
267 | +excuse you from the conditions of this License. If you cannot |
268 | +distribute so as to satisfy simultaneously your obligations under this |
269 | +License and any other pertinent obligations, then as a consequence you |
270 | +may not distribute the Program at all. For example, if a patent |
271 | +license would not permit royalty-free redistribution of the Program by |
272 | +all those who receive copies directly or indirectly through you, then |
273 | +the only way you could satisfy both it and this License would be to |
274 | +refrain entirely from distribution of the Program. |
275 | + |
276 | +If any portion of this section is held invalid or unenforceable under |
277 | +any particular circumstance, the balance of the section is intended to |
278 | +apply and the section as a whole is intended to apply in other |
279 | +circumstances. |
280 | + |
281 | +It is not the purpose of this section to induce you to infringe any |
282 | +patents or other property right claims or to contest validity of any |
283 | +such claims; this section has the sole purpose of protecting the |
284 | +integrity of the free software distribution system, which is |
285 | +implemented by public license practices. Many people have made |
286 | +generous contributions to the wide range of software distributed |
287 | +through that system in reliance on consistent application of that |
288 | +system; it is up to the author/donor to decide if he or she is willing |
289 | +to distribute software through any other system and a licensee cannot |
290 | +impose that choice. |
291 | + |
292 | +This section is intended to make thoroughly clear what is believed to |
293 | +be a consequence of the rest of this License. |
294 | + |
295 | + 8. If the distribution and/or use of the Program is restricted in |
296 | +certain countries either by patents or by copyrighted interfaces, the |
297 | +original copyright holder who places the Program under this License |
298 | +may add an explicit geographical distribution limitation excluding |
299 | +those countries, so that distribution is permitted only in or among |
300 | +countries not thus excluded. In such case, this License incorporates |
301 | +the limitation as if written in the body of this License. |
302 | + |
303 | + 9. The Free Software Foundation may publish revised and/or new versions |
304 | +of the General Public License from time to time. Such new versions will |
305 | +be similar in spirit to the present version, but may differ in detail to |
306 | +address new problems or concerns. |
307 | + |
308 | +Each version is given a distinguishing version number. If the Program |
309 | +specifies a version number of this License which applies to it and "any |
310 | +later version", you have the option of following the terms and conditions |
311 | +either of that version or of any later version published by the Free |
312 | +Software Foundation. If the Program does not specify a version number of |
313 | +this License, you may choose any version ever published by the Free Software |
314 | +Foundation. |
315 | + |
316 | + 10. If you wish to incorporate parts of the Program into other free |
317 | +programs whose distribution conditions are different, write to the author |
318 | +to ask for permission. For software which is copyrighted by the Free |
319 | +Software Foundation, write to the Free Software Foundation; we sometimes |
320 | +make exceptions for this. Our decision will be guided by the two goals |
321 | +of preserving the free status of all derivatives of our free software and |
322 | +of promoting the sharing and reuse of software generally. |
323 | + |
324 | + NO WARRANTY |
325 | + |
326 | + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
327 | +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
328 | +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
329 | +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
330 | +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
331 | +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
332 | +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
333 | +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
334 | +REPAIR OR CORRECTION. |
335 | + |
336 | + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
337 | +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
338 | +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
339 | +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
340 | +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
341 | +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
342 | +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
343 | +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
344 | +POSSIBILITY OF SUCH DAMAGES. |
345 | + |
346 | + END OF TERMS AND CONDITIONS |
347 | + |
348 | + How to Apply These Terms to Your New Programs |
349 | + |
350 | + If you develop a new program, and you want it to be of the greatest |
351 | +possible use to the public, the best way to achieve this is to make it |
352 | +free software which everyone can redistribute and change under these terms. |
353 | + |
354 | + To do so, attach the following notices to the program. It is safest |
355 | +to attach them to the start of each source file to most effectively |
356 | +convey the exclusion of warranty; and each file should have at least |
357 | +the "copyright" line and a pointer to where the full notice is found. |
358 | + |
359 | + <one line to give the program's name and a brief idea of what it does.> |
360 | + Copyright (C) <year> <name of author> |
361 | + |
362 | + This program is free software; you can redistribute it and/or modify |
363 | + it under the terms of the GNU General Public License as published by |
364 | + the Free Software Foundation; either version 2 of the License, or |
365 | + (at your option) any later version. |
366 | + |
367 | + This program is distributed in the hope that it will be useful, |
368 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
369 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
370 | + GNU General Public License for more details. |
371 | + |
372 | + You should have received a copy of the GNU General Public License along |
373 | + with this program; if not, write to the Free Software Foundation, Inc., |
374 | + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
375 | + |
376 | +Also add information on how to contact you by electronic and paper mail. |
377 | + |
378 | +If the program is interactive, make it output a short notice like this |
379 | +when it starts in an interactive mode: |
380 | + |
381 | + Gnomovision version 69, Copyright (C) year name of author |
382 | + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
383 | + This is free software, and you are welcome to redistribute it |
384 | + under certain conditions; type `show c' for details. |
385 | + |
386 | +The hypothetical commands `show w' and `show c' should show the appropriate |
387 | +parts of the General Public License. Of course, the commands you use may |
388 | +be called something other than `show w' and `show c'; they could even be |
389 | +mouse-clicks or menu items--whatever suits your program. |
390 | + |
391 | +You should also get your employer (if you work as a programmer) or your |
392 | +school, if any, to sign a "copyright disclaimer" for the program, if |
393 | +necessary. Here is a sample; alter the names: |
394 | + |
395 | + Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
396 | + `Gnomovision' (which makes passes at compilers) written by James Hacker. |
397 | + |
398 | + <signature of Ty Coon>, 1 April 1989 |
399 | + Ty Coon, President of Vice |
400 | + |
401 | +This General Public License does not permit incorporating your program into |
402 | +proprietary programs. If your program is a subroutine library, you may |
403 | +consider it more useful to permit linking proprietary applications with the |
404 | +library. If this is what you want to do, use the GNU Lesser General |
405 | +Public License instead of this License. |
406 | |
407 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/Makefile.am' |
408 | --- Percona-Server/plugin/percona-pam-for-mysql/Makefile.am 1970-01-01 00:00:00 +0000 |
409 | +++ Percona-Server/plugin/percona-pam-for-mysql/Makefile.am 2012-05-08 06:39:22 +0000 |
410 | @@ -0,0 +1,19 @@ |
411 | +# (C) 2011 Percona Inc. |
412 | +# |
413 | +# This program is free software; you can redistribute it and/or modify |
414 | +# it under the terms of the GNU General Public License as published by |
415 | +# the Free Software Foundation; version 2 of the License. |
416 | +# |
417 | +# This program is distributed in the hope that it will be useful, |
418 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
419 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
420 | +# GNU General Public License for more details. |
421 | +# |
422 | +# You should have received a copy of the GNU General Public License |
423 | +# along with this program; if not, write to the Free Software |
424 | +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
425 | +# |
426 | + |
427 | +ACLOCAL_AMFLAGS = -I m4 |
428 | + |
429 | +SUBDIRS = src |
430 | |
431 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/README' |
432 | --- Percona-Server/plugin/percona-pam-for-mysql/README 1970-01-01 00:00:00 +0000 |
433 | +++ Percona-Server/plugin/percona-pam-for-mysql/README 2012-05-08 06:39:22 +0000 |
434 | @@ -0,0 +1,40 @@ |
435 | +Percona PAM Authentication Plugin for MySQL |
436 | +------------------------------------------- |
437 | + |
438 | +(C) 2011 Percona Inc. |
439 | + |
440 | +This is a Authentication plugin written for the MySQL 5.5 Authentication plugin |
441 | +API enabling MySQL to perform authentication using PAM. Examples could include |
442 | +authenticating MySQL users using system accounts or two-factor authentication |
443 | +systems. |
444 | + |
445 | +Compiling |
446 | +--------- |
447 | + |
448 | +You will need both the PAM and MySQL headers installed. |
449 | + |
450 | +The first command (bootstrap) is only needed if building from the source |
451 | +code as checked out from the source repository, source tarballs don't require |
452 | +this step. |
453 | + |
454 | +$ ./bootstrap |
455 | +$ ./configure |
456 | +$ make |
457 | +# make install |
458 | + |
459 | +Development |
460 | +----------- |
461 | + |
462 | +All development is hosted on Launchpad: |
463 | +http://launchpad.net/percona-pam-for-mysql |
464 | + |
465 | +Bugs |
466 | +---- |
467 | + |
468 | +http://bugs.launchpad.net/percona-pam-for-mysql |
469 | + |
470 | + |
471 | +License |
472 | +------- |
473 | +GPLv2, see LICENSE for full text of GPLv2. |
474 | + |
475 | |
476 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/bootstrap' |
477 | --- Percona-Server/plugin/percona-pam-for-mysql/bootstrap 1970-01-01 00:00:00 +0000 |
478 | +++ Percona-Server/plugin/percona-pam-for-mysql/bootstrap 2012-05-08 06:39:22 +0000 |
479 | @@ -0,0 +1,18 @@ |
480 | +#!/bin/bash |
481 | + |
482 | +# (C) 2011 Percona Inc. |
483 | +# |
484 | +# This program is free software; you can redistribute it and/or modify |
485 | +# it under the terms of the GNU General Public License as published by |
486 | +# the Free Software Foundation; version 2 of the License. |
487 | +# |
488 | +# This program is distributed in the hope that it will be useful, |
489 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
490 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
491 | +# GNU General Public License for more details. |
492 | +# |
493 | +# You should have received a copy of the GNU General Public License |
494 | +# along with this program; if not, write to the Free Software |
495 | +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
496 | + |
497 | +autoreconf -i -I m4 -W all,no-obsolete |
498 | |
499 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/build' |
500 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/build/build-binary.sh.in' |
501 | --- Percona-Server/plugin/percona-pam-for-mysql/build/build-binary.sh.in 1970-01-01 00:00:00 +0000 |
502 | +++ Percona-Server/plugin/percona-pam-for-mysql/build/build-binary.sh.in 2012-05-08 06:39:22 +0000 |
503 | @@ -0,0 +1,122 @@ |
504 | +#!/bin/sh |
505 | +# |
506 | +# (C) 2011 Percona Inc. |
507 | +# |
508 | +# This program is free software; you can redistribute it and/or modify |
509 | +# it under the terms of the GNU General Public License as published by |
510 | +# the Free Software Foundation; version 2 of the License. |
511 | +# |
512 | +# This program is distributed in the hope that it will be useful, |
513 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
514 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
515 | +# GNU General Public License for more details. |
516 | +# |
517 | +# You should have received a copy of the GNU General Public License |
518 | +# along with this program; if not, write to the Free Software |
519 | +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
520 | +# |
521 | + |
522 | +# Bail out on errors, be strict |
523 | +set -ue |
524 | + |
525 | +# Examine parameters |
526 | +TARGET="$(uname -m)" |
527 | +TARGET_CFLAGS='' |
528 | + |
529 | +# Some programs that may be overriden |
530 | +TAR=${TAR:-tar} |
531 | + |
532 | +# Check if we have a functional getopt(1) |
533 | +if ! getopt --test |
534 | +then |
535 | + go_out="$(getopt --options="i" --longoptions=i686 \ |
536 | + --name="$(basename "$0")" -- "$@")" |
537 | + test $? -eq 0 || exit 1 |
538 | + eval set -- $go_out |
539 | +fi |
540 | + |
541 | +for arg |
542 | +do |
543 | + case "$arg" in |
544 | + -- ) shift; break;; |
545 | + -i | --i686 ) |
546 | + shift |
547 | + TARGET="i686" |
548 | + TARGET_CFLAGS="-m32 -march=i686" |
549 | + ;; |
550 | + esac |
551 | +done |
552 | + |
553 | +# Working directory |
554 | +if test "$#" -eq 0 |
555 | +then |
556 | + WORKDIR="$(pwd)" |
557 | + |
558 | + # Check that the current directory is not empty |
559 | + if test "x$(echo *)" != "x*" |
560 | + then |
561 | + echo >&2 \ |
562 | + "Current directory is not empty. Use $0 . to force build in ." |
563 | + exit 1 |
564 | + fi |
565 | + |
566 | +elif test "$#" -eq 1 |
567 | +then |
568 | + WORKDIR="$1" |
569 | + |
570 | + # Check that the provided directory exists and is a directory |
571 | + if ! test -d "$WORKDIR" |
572 | + then |
573 | + echo >&2 "$WORKDIR is not a directory" |
574 | + exit 1 |
575 | + fi |
576 | + |
577 | + WORKDIR_ABS="$(cd "$WORKDIR"; pwd)" |
578 | + |
579 | +else |
580 | + echo >&2 "Usage: $0 [target dir]" |
581 | + exit 1 |
582 | + |
583 | +fi |
584 | + |
585 | +SOURCEDIR="$(cd $(dirname "$0"); cd ..; pwd)" |
586 | +test -e "$SOURCEDIR/Makefile" || exit 2 |
587 | + |
588 | +# Extract version from the Makefile |
589 | + |
590 | +# Build information |
591 | + |
592 | +# Compilation flags |
593 | +export CFLAGS="$TARGET_CFLAGS ${CFLAGS:-}" |
594 | +export MAKE_JFLAG=-j4 |
595 | + |
596 | +# Create a temporary working directory |
597 | +INSTALLDIR="$(cd "$WORKDIR" && TMPDIR="$WORKDIR_ABS" mktemp -d percona-pam-build.XXXXXX)" |
598 | +INSTALLDIR="$WORKDIR_ABS/$INSTALLDIR" # Make it absolute |
599 | + |
600 | +# Build |
601 | +( |
602 | + cd "$SOURCEDIR" |
603 | + |
604 | + # Build the product |
605 | + ./configure CFLAGS="$CFLAGS" |
606 | + make clean all |
607 | + |
608 | + make DESTDIR="$INSTALLDIR" install |
609 | + |
610 | +) |
611 | + |
612 | +# Package the archive |
613 | +( |
614 | + cd "$INSTALLDIR" |
615 | + |
616 | + mv "$(find -name auth_pam.so)" . |
617 | + |
618 | + $TAR czf "$WORKDIR_ABS/@PACKAGE@-@VERSION@-@REVISION@.$TARGET.tar.gz" \ |
619 | + --owner=0 --group=0 auth_pam.so |
620 | + |
621 | +) |
622 | + |
623 | +# Clean up |
624 | +rm -rf "$INSTALLDIR" |
625 | + |
626 | |
627 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/build/percona-pam-plugin.spec.in' |
628 | --- Percona-Server/plugin/percona-pam-for-mysql/build/percona-pam-plugin.spec.in 1970-01-01 00:00:00 +0000 |
629 | +++ Percona-Server/plugin/percona-pam-for-mysql/build/percona-pam-plugin.spec.in 2012-05-08 06:39:22 +0000 |
630 | @@ -0,0 +1,66 @@ |
631 | +# (C) 2011 Percona Inc. |
632 | +# |
633 | +# This program is free software; you can redistribute it and/or modify |
634 | +# it under the terms of the GNU General Public License as published by |
635 | +# the Free Software Foundation; version 2 of the License. |
636 | +# |
637 | +# This program is distributed in the hope that it will be useful, |
638 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
639 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
640 | +# GNU General Public License for more details. |
641 | +# |
642 | +# You should have received a copy of the GNU General Public License |
643 | +# along with this program; if not, write to the Free Software |
644 | +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
645 | +# |
646 | + |
647 | +Name: Percona-PAM-plugin |
648 | +Version: @VERSION@ |
649 | +Release: @REVISION@%{?dist} |
650 | +Summary: PAM authentication plugin for MySQL |
651 | + |
652 | +Group: Applications/Databases |
653 | +License: GPLv2 |
654 | +URL: http://www.percona.com/ |
655 | +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) |
656 | +Source: percona-pam-plugin-%{version}.tar.gz |
657 | +BuildRequires: /usr/bin/mysql_config, mysql-devel >= 5.5, pam-devel |
658 | +Requires: mysql-server >= 5.5 |
659 | + |
660 | +%description |
661 | +The Percona PAM plugin enables users to authenticate to the MySQL server via |
662 | +PAM. This package contains the plugin library, you need to enable this |
663 | +behaviour in your server by issuing the following command: |
664 | + |
665 | +INSTALL PLUGIN auth_pam_server SONAME 'auth_pam.so'; |
666 | + |
667 | +%prep |
668 | +%setup -q -n percona-pam-plugin-%{version} |
669 | + |
670 | + |
671 | +%build |
672 | +%configure --disable-static |
673 | +make %{?_smp_mflags} |
674 | + |
675 | + |
676 | +%install |
677 | +rm -rf $RPM_BUILD_ROOT |
678 | +make install DESTDIR=$RPM_BUILD_ROOT |
679 | + |
680 | + |
681 | +%clean |
682 | +rm -rf $RPM_BUILD_ROOT |
683 | + |
684 | + |
685 | +%files |
686 | +%defattr(-,root,root,-) |
687 | +/usr/lib64/mysql/plugin/auth_pam.so |
688 | +%exclude /usr/lib64/mysql/plugin/auth_pam.la |
689 | +%exclude /usr/lib64/mysql/plugin/test_auth_pam_client.la |
690 | +%exclude /usr/lib64/mysql/plugin/test_auth_pam_client.so |
691 | + |
692 | +%changelog |
693 | + |
694 | +* Wed Oct 20 2011 Ignacio Nin <ignacio.nin@percona.com> |
695 | + |
696 | +- Creation of the original .spec file |
697 | |
698 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/configure.ac' |
699 | --- Percona-Server/plugin/percona-pam-for-mysql/configure.ac 1970-01-01 00:00:00 +0000 |
700 | +++ Percona-Server/plugin/percona-pam-for-mysql/configure.ac 2012-05-08 06:39:22 +0000 |
701 | @@ -0,0 +1,95 @@ |
702 | +# -*- Autoconf -*- |
703 | +# (C) 2011 Percona Inc. |
704 | +# |
705 | +# This program is free software; you can redistribute it and/or modify |
706 | +# it under the terms of the GNU General Public License as published by |
707 | +# the Free Software Foundation; version 2 of the License. |
708 | +# |
709 | +# This program is distributed in the hope that it will be useful, |
710 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
711 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
712 | +# GNU General Public License for more details. |
713 | +# |
714 | +# You should have received a copy of the GNU General Public License |
715 | +# along with this program; if not, write to the Free Software |
716 | +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
717 | +# |
718 | +# |
719 | +AC_PREREQ([2.59]) |
720 | +AC_INIT([Percona PAM plugin], [0.1], [mysql-dev@percona.com]) |
721 | +AC_CONFIG_SRCDIR([src/lib_auth_pam_client.h]) |
722 | +AM_INIT_AUTOMAKE([foreign]) |
723 | + |
724 | +AC_CONFIG_MACRO_DIR([m4]) |
725 | + |
726 | +AC_CONFIG_HEADERS([config.h]) |
727 | + |
728 | +AC_PROG_CC |
729 | +AC_CHECK_PROGS([BZR], [bzr]) |
730 | + |
731 | +# Remove AC_PROG_LIBTOOL and enable this once CentOS 5.6 support is dropped. |
732 | +# LT_INIT([disable-static]) |
733 | +AC_PROG_LIBTOOL |
734 | + |
735 | +AC_ARG_WITH([mysql_config], |
736 | + AS_HELP_STRING( |
737 | + [--with-mysql_config=PATH], |
738 | + [location of the mysql_config program]), |
739 | + [MYSQL_CONFIG="$with_mysql_config"]) |
740 | +AC_PATH_PROG([MYSQL_CONFIG], [mysql_config]) |
741 | + |
742 | +AS_IF([test "x${MYSQL_CONFIG}" = x], |
743 | + [AC_MSG_ERROR([Unable to find mysql_config. Please install or specify.])]) |
744 | + |
745 | +# Checks for libraries. |
746 | +AC_CHECK_LIB([pam], [pam_start], [AUTH_PAM_LIBS="$AUTH_PAM_LIBS -lpam"], |
747 | + AC_MSG_ERROR( |
748 | + [Unable to find PAM. Please install the PAM development libraries]) |
749 | +) |
750 | +AC_CHECK_LIB([mysqlclient], [mysql_init], [DIALOG_LIBS="$DIALOG_LIBS -lmysqlclient"], |
751 | + AC_MSG_ERROR( |
752 | + [Unable to find libmysqlclient. Please install the mysql development libraries]) |
753 | +) |
754 | + |
755 | +# Replace -I with -isystem for the MySQL header include GCC option to silence |
756 | +# warnings originating from them |
757 | +MYSQL_INCLUDES=`"${MYSQL_CONFIG}" --include | sed 's@^-I@-isystem @'` |
758 | + |
759 | +CPPFLAGS="${CPPFLAGS} ${MYSQL_INCLUDES}" |
760 | + |
761 | +AC_CHECK_HEADERS([mysql/plugin.h mysql/plugin_auth.h], [], |
762 | + AC_MSG_ERROR( |
763 | + [Unable to find MySQL development headers. Please install them])) |
764 | +AC_CHECK_HEADERS([pwd.h grp.h], [], |
765 | + AC_MSG_ERROR( |
766 | + [Unable to find pwd.h/grp.h headers. Your libc version is not supported])) |
767 | + |
768 | +# Checks for library functions. |
769 | +AC_FUNC_MALLOC |
770 | +AC_CHECK_FUNCS([getpass]) |
771 | +AC_CHECK_FUNCS([getpwnam_r getgrgid_r], [], |
772 | + AC_MSG_ERROR( |
773 | + [Unable to find getpwnam_r/getgrgid_r functions. Your libc version is not supported])) |
774 | + |
775 | +CFLAGS="-Wall -Wextra ${CFLAGS}" |
776 | + |
777 | +# Get the plugin dir |
778 | +PLUGINDIR=$([$MYSQL_CONFIG --plugindir]) |
779 | +AC_SUBST([PLUGINDIR]) |
780 | + |
781 | +# Get the revision if bzr is present |
782 | +AS_IF([test "x${BZR}" != x], |
783 | + [REVISION=`${BZR} revno "$srcdir"`]) |
784 | +REVISION=${REVISION:-0} |
785 | + |
786 | +AC_SUBST([REVISION]) |
787 | + |
788 | +AC_SUBST([AUTH_PAM_LIBS]) |
789 | +AC_SUBST([DIALOG_LIBS]) |
790 | + |
791 | +# Output files |
792 | +AC_CONFIG_FILES([Makefile |
793 | + src/Makefile |
794 | + build/build-binary.sh |
795 | + build/percona-pam-plugin.spec]) |
796 | +AC_OUTPUT |
797 | |
798 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/doc' |
799 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile' |
800 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 1970-01-01 00:00:00 +0000 |
801 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 2012-05-08 06:39:22 +0000 |
802 | @@ -0,0 +1,130 @@ |
803 | +# Makefile for Sphinx documentation |
804 | +# |
805 | + |
806 | +# You can set these variables from the command line. |
807 | +SPHINXOPTS = |
808 | +SPHINXBUILD = sphinx-build |
809 | +PAPER = |
810 | +BUILDDIR = build |
811 | + |
812 | +# Internal variables. |
813 | +PAPEROPT_a4 = -D latex_paper_size=a4 |
814 | +PAPEROPT_letter = -D latex_paper_size=letter |
815 | +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source |
816 | + |
817 | +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest |
818 | + |
819 | +help: |
820 | + @echo "Please use \`make <target>' where <target> is one of" |
821 | + @echo " html to make standalone HTML files" |
822 | + @echo " dirhtml to make HTML files named index.html in directories" |
823 | + @echo " singlehtml to make a single large HTML file" |
824 | + @echo " pickle to make pickle files" |
825 | + @echo " json to make JSON files" |
826 | + @echo " htmlhelp to make HTML files and a HTML help project" |
827 | + @echo " qthelp to make HTML files and a qthelp project" |
828 | + @echo " devhelp to make HTML files and a Devhelp project" |
829 | + @echo " epub to make an epub" |
830 | + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" |
831 | + @echo " latexpdf to make LaTeX files and run them through pdflatex" |
832 | + @echo " text to make text files" |
833 | + @echo " man to make manual pages" |
834 | + @echo " changes to make an overview of all changed/added/deprecated items" |
835 | + @echo " linkcheck to check all external links for integrity" |
836 | + @echo " doctest to run all doctests embedded in the documentation (if enabled)" |
837 | + |
838 | +clean: |
839 | + -rm -rf $(BUILDDIR)/* |
840 | + |
841 | +html: |
842 | + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html |
843 | + @echo |
844 | + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." |
845 | + |
846 | +dirhtml: |
847 | + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml |
848 | + @echo |
849 | + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." |
850 | + |
851 | +singlehtml: |
852 | + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml |
853 | + @echo |
854 | + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." |
855 | + |
856 | +pickle: |
857 | + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle |
858 | + @echo |
859 | + @echo "Build finished; now you can process the pickle files." |
860 | + |
861 | +json: |
862 | + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json |
863 | + @echo |
864 | + @echo "Build finished; now you can process the JSON files." |
865 | + |
866 | +htmlhelp: |
867 | + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp |
868 | + @echo |
869 | + @echo "Build finished; now you can run HTML Help Workshop with the" \ |
870 | + ".hhp project file in $(BUILDDIR)/htmlhelp." |
871 | + |
872 | +qthelp: |
873 | + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp |
874 | + @echo |
875 | + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ |
876 | + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" |
877 | + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PerconaXtraBackup.qhcp" |
878 | + @echo "To view the help file:" |
879 | + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PerconaXtraBackup.qhc" |
880 | + |
881 | +devhelp: |
882 | + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp |
883 | + @echo |
884 | + @echo "Build finished." |
885 | + @echo "To view the help file:" |
886 | + @echo "# mkdir -p $$HOME/.local/share/devhelp/PerconaXtraBackup" |
887 | + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PerconaXtraBackup" |
888 | + @echo "# devhelp" |
889 | + |
890 | +epub: |
891 | + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub |
892 | + @echo |
893 | + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." |
894 | + |
895 | +latex: |
896 | + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex |
897 | + @echo |
898 | + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." |
899 | + @echo "Run \`make' in that directory to run these through (pdf)latex" \ |
900 | + "(use \`make latexpdf' here to do that automatically)." |
901 | + |
902 | +latexpdf: |
903 | + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex |
904 | + @echo "Running LaTeX files through pdflatex..." |
905 | + make -C $(BUILDDIR)/latex all-pdf |
906 | + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." |
907 | + |
908 | +text: |
909 | + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text |
910 | + @echo |
911 | + @echo "Build finished. The text files are in $(BUILDDIR)/text." |
912 | + |
913 | +man: |
914 | + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man |
915 | + @echo |
916 | + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." |
917 | + |
918 | +changes: |
919 | + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes |
920 | + @echo |
921 | + @echo "The overview file is in $(BUILDDIR)/changes." |
922 | + |
923 | +linkcheck: |
924 | + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck |
925 | + @echo |
926 | + @echo "Link check complete; look for any errors in the above output " \ |
927 | + "or in $(BUILDDIR)/linkcheck/output.txt." |
928 | + |
929 | +doctest: |
930 | + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest |
931 | + @echo "Testing of doctests in the sources finished, look at the " \ |
932 | + "results in $(BUILDDIR)/doctest/output.txt." |
933 | |
934 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/make.bat' |
935 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/make.bat 1970-01-01 00:00:00 +0000 |
936 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/make.bat 2012-05-08 06:39:22 +0000 |
937 | @@ -0,0 +1,170 @@ |
938 | +@ECHO OFF |
939 | + |
940 | +REM Command file for Sphinx documentation |
941 | + |
942 | +if "%SPHINXBUILD%" == "" ( |
943 | + set SPHINXBUILD=sphinx-build |
944 | +) |
945 | +set BUILDDIR=build |
946 | +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source |
947 | +if NOT "%PAPER%" == "" ( |
948 | + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% |
949 | +) |
950 | + |
951 | +if "%1" == "" goto help |
952 | + |
953 | +if "%1" == "help" ( |
954 | + :help |
955 | + echo.Please use `make ^<target^>` where ^<target^> is one of |
956 | + echo. html to make standalone HTML files |
957 | + echo. dirhtml to make HTML files named index.html in directories |
958 | + echo. singlehtml to make a single large HTML file |
959 | + echo. pickle to make pickle files |
960 | + echo. json to make JSON files |
961 | + echo. htmlhelp to make HTML files and a HTML help project |
962 | + echo. qthelp to make HTML files and a qthelp project |
963 | + echo. devhelp to make HTML files and a Devhelp project |
964 | + echo. epub to make an epub |
965 | + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter |
966 | + echo. text to make text files |
967 | + echo. man to make manual pages |
968 | + echo. changes to make an overview over all changed/added/deprecated items |
969 | + echo. linkcheck to check all external links for integrity |
970 | + echo. doctest to run all doctests embedded in the documentation if enabled |
971 | + goto end |
972 | +) |
973 | + |
974 | +if "%1" == "clean" ( |
975 | + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i |
976 | + del /q /s %BUILDDIR%\* |
977 | + goto end |
978 | +) |
979 | + |
980 | +if "%1" == "html" ( |
981 | + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html |
982 | + if errorlevel 1 exit /b 1 |
983 | + echo. |
984 | + echo.Build finished. The HTML pages are in %BUILDDIR%/html. |
985 | + goto end |
986 | +) |
987 | + |
988 | +if "%1" == "dirhtml" ( |
989 | + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml |
990 | + if errorlevel 1 exit /b 1 |
991 | + echo. |
992 | + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. |
993 | + goto end |
994 | +) |
995 | + |
996 | +if "%1" == "singlehtml" ( |
997 | + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml |
998 | + if errorlevel 1 exit /b 1 |
999 | + echo. |
1000 | + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. |
1001 | + goto end |
1002 | +) |
1003 | + |
1004 | +if "%1" == "pickle" ( |
1005 | + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle |
1006 | + if errorlevel 1 exit /b 1 |
1007 | + echo. |
1008 | + echo.Build finished; now you can process the pickle files. |
1009 | + goto end |
1010 | +) |
1011 | + |
1012 | +if "%1" == "json" ( |
1013 | + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json |
1014 | + if errorlevel 1 exit /b 1 |
1015 | + echo. |
1016 | + echo.Build finished; now you can process the JSON files. |
1017 | + goto end |
1018 | +) |
1019 | + |
1020 | +if "%1" == "htmlhelp" ( |
1021 | + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp |
1022 | + if errorlevel 1 exit /b 1 |
1023 | + echo. |
1024 | + echo.Build finished; now you can run HTML Help Workshop with the ^ |
1025 | +.hhp project file in %BUILDDIR%/htmlhelp. |
1026 | + goto end |
1027 | +) |
1028 | + |
1029 | +if "%1" == "qthelp" ( |
1030 | + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp |
1031 | + if errorlevel 1 exit /b 1 |
1032 | + echo. |
1033 | + echo.Build finished; now you can run "qcollectiongenerator" with the ^ |
1034 | +.qhcp project file in %BUILDDIR%/qthelp, like this: |
1035 | + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\PerconaXtraBackup.qhcp |
1036 | + echo.To view the help file: |
1037 | + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\PerconaXtraBackup.ghc |
1038 | + goto end |
1039 | +) |
1040 | + |
1041 | +if "%1" == "devhelp" ( |
1042 | + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp |
1043 | + if errorlevel 1 exit /b 1 |
1044 | + echo. |
1045 | + echo.Build finished. |
1046 | + goto end |
1047 | +) |
1048 | + |
1049 | +if "%1" == "epub" ( |
1050 | + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub |
1051 | + if errorlevel 1 exit /b 1 |
1052 | + echo. |
1053 | + echo.Build finished. The epub file is in %BUILDDIR%/epub. |
1054 | + goto end |
1055 | +) |
1056 | + |
1057 | +if "%1" == "latex" ( |
1058 | + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex |
1059 | + if errorlevel 1 exit /b 1 |
1060 | + echo. |
1061 | + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. |
1062 | + goto end |
1063 | +) |
1064 | + |
1065 | +if "%1" == "text" ( |
1066 | + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text |
1067 | + if errorlevel 1 exit /b 1 |
1068 | + echo. |
1069 | + echo.Build finished. The text files are in %BUILDDIR%/text. |
1070 | + goto end |
1071 | +) |
1072 | + |
1073 | +if "%1" == "man" ( |
1074 | + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man |
1075 | + if errorlevel 1 exit /b 1 |
1076 | + echo. |
1077 | + echo.Build finished. The manual pages are in %BUILDDIR%/man. |
1078 | + goto end |
1079 | +) |
1080 | + |
1081 | +if "%1" == "changes" ( |
1082 | + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes |
1083 | + if errorlevel 1 exit /b 1 |
1084 | + echo. |
1085 | + echo.The overview file is in %BUILDDIR%/changes. |
1086 | + goto end |
1087 | +) |
1088 | + |
1089 | +if "%1" == "linkcheck" ( |
1090 | + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck |
1091 | + if errorlevel 1 exit /b 1 |
1092 | + echo. |
1093 | + echo.Link check complete; look for any errors in the above output ^ |
1094 | +or in %BUILDDIR%/linkcheck/output.txt. |
1095 | + goto end |
1096 | +) |
1097 | + |
1098 | +if "%1" == "doctest" ( |
1099 | + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest |
1100 | + if errorlevel 1 exit /b 1 |
1101 | + echo. |
1102 | + echo.Testing of doctests in the sources finished, look at the ^ |
1103 | +results in %BUILDDIR%/doctest/output.txt. |
1104 | + goto end |
1105 | +) |
1106 | + |
1107 | +:end |
1108 | |
1109 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source' |
1110 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/_static' |
1111 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/_static/percona-pam-plugin-logo.jpg' |
1112 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/_static/percona-pam-plugin-logo.jpg 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/_static/percona-pam-plugin-logo.jpg 2012-05-08 06:39:22 +0000 differ |
1113 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/_static/percona_favicon.ico' |
1114 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/_static/percona_favicon.ico 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/_static/percona_favicon.ico 2012-05-08 06:39:22 +0000 differ |
1115 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/_templates' |
1116 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/conf.py' |
1117 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/conf.py 1970-01-01 00:00:00 +0000 |
1118 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/conf.py 2012-05-08 06:39:22 +0000 |
1119 | @@ -0,0 +1,245 @@ |
1120 | +# -*- coding: utf-8 -*- |
1121 | +# |
1122 | +# Percona PAM authentication plugin documentation build configuration file, created by |
1123 | +# sphinx-quickstart on Mon Jun 27 22:27:15 2011. |
1124 | +# |
1125 | +# This file is execfile()d with the current directory set to its containing dir. |
1126 | +# |
1127 | +# Note that not all possible configuration values are present in this |
1128 | +# autogenerated file. |
1129 | +# |
1130 | +# All configuration values have a default; values that are commented out |
1131 | +# serve to show the default. |
1132 | + |
1133 | +import sys, os |
1134 | + |
1135 | +# If extensions (or modules to document with autodoc) are in another directory, |
1136 | +# add these directories to sys.path here. If the directory is relative to the |
1137 | +# documentation root, use os.path.abspath to make it absolute, like shown here. |
1138 | +#sys.path.insert(0, os.path.abspath('.')) |
1139 | + |
1140 | +# -- General configuration ----------------------------------------------------- |
1141 | + |
1142 | +# If your documentation needs a minimal Sphinx version, state it here. |
1143 | +#needs_sphinx = '1.0' |
1144 | + |
1145 | +# Add any Sphinx extension module names here, as strings. They can be extensions |
1146 | +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. |
1147 | + |
1148 | +extensions = ['sphinx.ext.intersphinx', 'sphinx.ext.todo', |
1149 | + 'sphinx.ext.coverage', 'sphinx.ext.ifconfig', |
1150 | + 'sphinx.ext.extlinks'] |
1151 | + |
1152 | +# Add any paths that contain templates here, relative to this directory. |
1153 | +templates_path = ['_templates'] |
1154 | + |
1155 | +# The suffix of source filenames. |
1156 | +source_suffix = '.rst' |
1157 | + |
1158 | +# The encoding of source files. |
1159 | +#source_encoding = 'utf-8-sig' |
1160 | + |
1161 | +# The master toctree document. |
1162 | +master_doc = 'index' |
1163 | + |
1164 | +# General information about the project. |
1165 | +project = u'Percona PAM authentication plugin for MySQL' |
1166 | +copyright = u'2012, Percona Inc' |
1167 | + |
1168 | +# The version info for the project you're documenting, acts as replacement for |
1169 | +# |version| and |release|, also used in various other places throughout the |
1170 | +# built documents. |
1171 | +# |
1172 | +# The short X.Y version. |
1173 | +version = '0.1' |
1174 | +# The full version, including alpha/beta/rc tags. |
1175 | +release = '0.1' |
1176 | + |
1177 | +# The language for content autogenerated by Sphinx. Refer to documentation |
1178 | +# for a list of supported languages. |
1179 | +#language = None |
1180 | + |
1181 | +# There are two options for replacing |today|: either, you set today to some |
1182 | +# non-false value, then it is used: |
1183 | +#today = '' |
1184 | +# Else, today_fmt is used as the format for a strftime call. |
1185 | +#today_fmt = '%B %d, %Y' |
1186 | + |
1187 | +# List of patterns, relative to source directory, that match files and |
1188 | +# directories to ignore when looking for source files. |
1189 | +exclude_patterns = [] |
1190 | + |
1191 | +# The reST default role (used for this markup: `text`) to use for all documents. |
1192 | +#default_role = None |
1193 | + |
1194 | +# If true, '()' will be appended to :func: etc. cross-reference text. |
1195 | +#add_function_parentheses = True |
1196 | + |
1197 | +# If true, the current module name will be prepended to all description |
1198 | +# unit titles (such as .. function::). |
1199 | +#add_module_names = True |
1200 | + |
1201 | +# If true, sectionauthor and moduleauthor directives will be shown in the |
1202 | +# output. They are ignored by default. |
1203 | +#show_authors = False |
1204 | + |
1205 | +# The name of the Pygments (syntax highlighting) style to use. |
1206 | +pygments_style = 'sphinx' |
1207 | + |
1208 | + |
1209 | +rst_prolog = ''' |
1210 | +.. |check| replace:: ``|[[---CHECK---]]|`` |
1211 | + |
1212 | +.. |xtrabackup| replace:: :program:`xtrabackup` |
1213 | + |
1214 | +.. |innobackupex| replace:: :program:`innobackupex` |
1215 | + |
1216 | +.. |XtraBackup| replace:: *XtraBackup* |
1217 | + |
1218 | +.. |Percona Server| replace:: *Percona Server* |
1219 | + |
1220 | +.. |Percona| replace:: *Percona* |
1221 | + |
1222 | +.. |MySQL| replace:: *MySQL* |
1223 | + |
1224 | +.. |Drizzle| replace:: *Drizzle* |
1225 | + |
1226 | +.. |MariaDB| replace:: *MariaDB* |
1227 | + |
1228 | + |
1229 | +''' |
1230 | + |
1231 | +extlinks = {'bug': ('https://bugs.launchpad.net/percona-pam-for-mysql/+bug/%s', |
1232 | + '#')} |
1233 | + |
1234 | +# A list of ignored prefixes for module index sorting. |
1235 | +#modindex_common_prefix = [] |
1236 | + |
1237 | + |
1238 | +# -- Options for HTML output --------------------------------------------------- |
1239 | + |
1240 | +# The theme to use for HTML and HTML Help pages. See the documentation for |
1241 | +# a list of builtin themes. |
1242 | +html_theme = 'percona-theme' |
1243 | + |
1244 | +# Theme options are theme-specific and customize the look and feel of a theme |
1245 | +# further. For a list of options available for each theme, see the |
1246 | +# documentation. |
1247 | +#html_theme_options = {} |
1248 | + |
1249 | +# Add any paths that contain custom themes here, relative to this directory. |
1250 | +html_theme_path = ['.', './percona-theme'] |
1251 | + |
1252 | +# The name for this set of Sphinx documents. If None, it defaults to |
1253 | +# "<project> v<release> documentation". |
1254 | +html_title = 'Percona PAM authenticatino plugin for MySQL Documentation' |
1255 | + |
1256 | +# A shorter title for the navigation bar. Default is the same as html_title. |
1257 | +html_short_title = 'PAM Plugin Docs' |
1258 | + |
1259 | +# The name of an image file (relative to this directory) to place at the top |
1260 | +# of the sidebar. |
1261 | +html_logo = 'percona-pam-plugin-logo.png' |
1262 | + |
1263 | +# The name of an image file (within the static path) to use as favicon of the |
1264 | +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 |
1265 | +# pixels large. |
1266 | +html_favicon = 'percona_favicon.ico' |
1267 | + |
1268 | +# Add any paths that contain custom static files (such as style sheets) here, |
1269 | +# relative to this directory. They are copied after the builtin static files, |
1270 | +# so a file named "default.css" will overwrite the builtin "default.css". |
1271 | +html_static_path = ['_static'] |
1272 | + |
1273 | +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, |
1274 | +# using the given strftime format. |
1275 | +#html_last_updated_fmt = '%b %d, %Y' |
1276 | + |
1277 | +# If true, SmartyPants will be used to convert quotes and dashes to |
1278 | +# typographically correct entities. |
1279 | +#html_use_smartypants = True |
1280 | + |
1281 | +# Custom sidebar templates, maps document names to template names. |
1282 | +#html_sidebars = {} |
1283 | + |
1284 | +# Additional templates that should be rendered to pages, maps page names to |
1285 | +# template names. |
1286 | +#html_additional_pages = {} |
1287 | + |
1288 | +# If false, no module index is generated. |
1289 | +#html_domain_indices = True |
1290 | + |
1291 | +# If false, no index is generated. |
1292 | +#html_use_index = True |
1293 | + |
1294 | +# If true, the index is split into individual pages for each letter. |
1295 | +#html_split_index = False |
1296 | + |
1297 | +# If true, links to the reST sources are added to the pages. |
1298 | +#html_show_sourcelink = True |
1299 | + |
1300 | +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. |
1301 | +#html_show_sphinx = True |
1302 | + |
1303 | +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. |
1304 | +#html_show_copyright = True |
1305 | + |
1306 | +# If true, an OpenSearch description file will be output, and all pages will |
1307 | +# contain a <link> tag referring to it. The value of this option must be the |
1308 | +# base URL from which the finished HTML is served. |
1309 | +#html_use_opensearch = '' |
1310 | + |
1311 | +# This is the file name suffix for HTML files (e.g. ".xhtml"). |
1312 | +#html_file_suffix = None |
1313 | + |
1314 | +# Output file base name for HTML help builder. |
1315 | +htmlhelp_basename = 'PerconaPAMForMySQL' |
1316 | + |
1317 | + |
1318 | +# -- Options for LaTeX output -------------------------------------------------- |
1319 | + |
1320 | +# The paper size ('letter' or 'a4'). |
1321 | +#latex_paper_size = 'letter' |
1322 | + |
1323 | +# The font size ('10pt', '11pt' or '12pt'). |
1324 | +#latex_font_size = '10pt' |
1325 | + |
1326 | +# Grouping the document tree into LaTeX files. List of tuples |
1327 | +# (source start file, target name, title, author, documentclass [howto/manual]). |
1328 | +latex_documents = [ |
1329 | + ('index', 'PerconaPAMForMySQL.tex', u'Percona PAM Authentication Plugin for MySQL Documentation', |
1330 | + u'Percona Inc', 'manual'), |
1331 | +] |
1332 | + |
1333 | +# The name of an image file (relative to this directory) to place at the top of |
1334 | +# the title page. |
1335 | +#latex_logo = None |
1336 | + |
1337 | +# For "manual" documents, if this is true, then toplevel headings are parts, |
1338 | +# not chapters. |
1339 | +#latex_use_parts = False |
1340 | + |
1341 | +# If true, show page references after internal links. |
1342 | +#latex_show_pagerefs = False |
1343 | + |
1344 | +# If true, show URL addresses after external links. |
1345 | +#latex_show_urls = False |
1346 | + |
1347 | +# Additional stuff for the LaTeX preamble. |
1348 | +#latex_preamble = '' |
1349 | + |
1350 | +# Documents to append as an appendix to all manuals. |
1351 | +#latex_appendices = [] |
1352 | + |
1353 | +# If false, no module index is generated. |
1354 | +#latex_domain_indices = True |
1355 | + |
1356 | + |
1357 | +# -- Options for manual page output -------------------------------------------- |
1358 | + |
1359 | +# One entry per manual page. List of tuples |
1360 | +# (source start file, name, description, authors, manual section). |
1361 | +man_pages = [ |
1362 | +# ('index', 'perconapamplugin', u'Percona PAM Authentication Plugin for MySQL Documentation', |
1363 | +# [u'Percona Inc'], 1) |
1364 | +] |
1365 | |
1366 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/faq.rst' |
1367 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/faq.rst 1970-01-01 00:00:00 +0000 |
1368 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/faq.rst 2012-05-08 06:39:22 +0000 |
1369 | @@ -0,0 +1,51 @@ |
1370 | +============================ |
1371 | + Frequently Asked Questions |
1372 | +============================ |
1373 | + |
1374 | +Is there a Windows version? |
1375 | +=========================== |
1376 | + |
1377 | +No, Windows does not support PAM, so there will not be a Windows version. |
1378 | + |
1379 | +Can I use it with MySQL? |
1380 | +======================== |
1381 | + |
1382 | +Yes. |
1383 | + |
1384 | +Can I use it with Percona Server? |
1385 | +================================= |
1386 | + |
1387 | +Yes. |
1388 | + |
1389 | + |
1390 | +Is it Free and Open Source Software? |
1391 | +==================================== |
1392 | + |
1393 | +Yes. |
1394 | + |
1395 | + |
1396 | +Can I use the PAM plugin to authenticate against /etc/shadow? |
1397 | +============================================================= |
1398 | + |
1399 | +Yes, you need to add the mysql user to the shadow group. Because PAM libraries, such as 'pam_unix.so', need to access /etc/shadow. |
1400 | + |
1401 | +For example this is how you can do it in *Ubuntu*: :: |
1402 | + |
1403 | + root@lucid64:/var/lib/mysql# getent group shadow |
1404 | + shadow:x:42:mysql |
1405 | + |
1406 | + root@lucid64:/var/lib/mysql# ls -alhs /etc/shadow |
1407 | + 4.0K -rw-r----- 1 root shadow 912 Dec 21 10:39 /etc/shadow |
1408 | + |
1409 | +After you restart mysqld for changes to take effect, pam_unix authentication will work. |
1410 | + |
1411 | +The other option is to run mysqld as root. This should be used for testing only or as a last resort method. |
1412 | + |
1413 | + |
1414 | +I'm getting the: "ERROR 2059 (HY000): Authentication plugin 'auth_pam' cannot be loaded" |
1415 | +======================================================================================== |
1416 | + |
1417 | +This means that the default client :option:`plugin-dir` setting doesn't work or it isn't set up properly. You'll need to add the location of the plugin folder to your client configuration: :: |
1418 | + |
1419 | + [client] |
1420 | + plugin_dir='/usr/lib/mysql/plugin' |
1421 | |
1422 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/glossary.rst' |
1423 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/glossary.rst 1970-01-01 00:00:00 +0000 |
1424 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/glossary.rst 2012-05-08 06:39:22 +0000 |
1425 | @@ -0,0 +1,8 @@ |
1426 | +========== |
1427 | + Glossary |
1428 | +========== |
1429 | + |
1430 | +.. glossary:: |
1431 | + |
1432 | + PAM |
1433 | + Pluggable Authentication Module - allows integrating multiple authentication mechanisms which can be written independently of the underlying authentication scheme that's being used in the application. |
1434 | |
1435 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/index.rst' |
1436 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/index.rst 1970-01-01 00:00:00 +0000 |
1437 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/index.rst 2012-05-08 06:39:22 +0000 |
1438 | @@ -0,0 +1,51 @@ |
1439 | +============================================================ |
1440 | + Percona PAM authentication plugin For MySQL - Documentation |
1441 | +============================================================ |
1442 | + |
1443 | +Percona PAM authentication plugin for MySQL. |
1444 | + |
1445 | +Introduction |
1446 | +============ |
1447 | + |
1448 | +.. toctree:: |
1449 | + :maxdepth: 1 |
1450 | + :glob: |
1451 | + |
1452 | + intro |
1453 | + |
1454 | +Installation |
1455 | +============ |
1456 | + |
1457 | +.. toctree:: |
1458 | + :maxdepth: 2 |
1459 | + :glob: |
1460 | + |
1461 | + installation |
1462 | + |
1463 | +User's Manual |
1464 | +============= |
1465 | + |
1466 | +.. toctree:: |
1467 | + :maxdepth: 2 |
1468 | + :glob: |
1469 | + |
1470 | + manual |
1471 | + |
1472 | +Miscellaneous |
1473 | +============= |
1474 | + |
1475 | +.. toctree:: |
1476 | + :maxdepth: 1 |
1477 | + :glob: |
1478 | + |
1479 | + faq |
1480 | + release-notes |
1481 | + glossary |
1482 | + |
1483 | +Indices and tables |
1484 | +================== |
1485 | + |
1486 | +* :ref:`genindex` |
1487 | + |
1488 | +* :ref:`search` |
1489 | + |
1490 | |
1491 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/installation.rst' |
1492 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/installation.rst 1970-01-01 00:00:00 +0000 |
1493 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/installation.rst 2012-05-08 06:39:22 +0000 |
1494 | @@ -0,0 +1,50 @@ |
1495 | +======================================================= |
1496 | + Installing Percona PAM Authentication Plugin for MySQL |
1497 | +======================================================= |
1498 | + |
1499 | +.. toctree:: |
1500 | + :hidden: |
1501 | + |
1502 | +Compiling from Source |
1503 | +===================== |
1504 | + |
1505 | +You will need both the PAM headers and the MySQL 5.5 headers and corresponding `mysql_config` binary available on your system. |
1506 | + |
1507 | +If you are not using one of the pre-built binary packages, you will need to compile the plugin from source. You can either use a source tarball or the source repository. |
1508 | + |
1509 | +For getting a copy of the latest development bzr tree: :: |
1510 | + |
1511 | + $ bzr branch lp:percona-pam-for-mysql |
1512 | + |
1513 | +If you are building from bzr, you will need to generate the configure script: :: |
1514 | + |
1515 | + $ ./bootstrap |
1516 | + |
1517 | +You do not need to run `bootstrap` if you are using a source tarball. |
1518 | + |
1519 | +You then need to build the plugin: :: |
1520 | + |
1521 | + $ ./configure |
1522 | + $ make |
1523 | + |
1524 | +To install, you can simply run (as root or using sudo or similar): :: |
1525 | + |
1526 | + $ make install |
1527 | + |
1528 | +Installing server-side plugin |
1529 | +============================= |
1530 | + |
1531 | +The shared library that holds the plugin, auth_pam.so, needs to be stored in the plugindir directory of mysql. You can get this value via the command: :: |
1532 | + |
1533 | + $ mysql_config --plugindir |
1534 | + |
1535 | +Make sure that after installed, the library has got the appropiate permissions (file execution is required). |
1536 | + |
1537 | +Most packages should do this for you, so this is likely only required with the binary tarballs. |
1538 | + |
1539 | +In order to load the plugin into the working server, issue the following command: :: |
1540 | + |
1541 | + mysql> INSTALL PLUGIN auth_pam SONAME 'auth_pam.so'; |
1542 | + |
1543 | + |
1544 | +You can now create a PAM configuration for the MySQL server and create users that are authenticated by PAM. |
1545 | |
1546 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/intro.rst' |
1547 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/intro.rst 1970-01-01 00:00:00 +0000 |
1548 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/intro.rst 2012-05-08 06:39:22 +0000 |
1549 | @@ -0,0 +1,23 @@ |
1550 | +================================================== |
1551 | + About Percona PAM Authentication Plugin for MySQL |
1552 | +================================================== |
1553 | + |
1554 | +Percona PAM Authentication Plugin is a free and Open Source implementation of the MySQL's authentication plugin. This plugin acts as a mediator between the MySQL server, the MySQL client, and the PAM stack. The server plugin requests authentication from the PAM stack, forwards any requests and messages from the PAM stack over the wire to the client (in cleartext) and reads back any replies for the PAM stack. |
1555 | + |
1556 | + PAM plugin uses dialog as its client side plugin. Dialog plugin can be loaded to any client application that uses libmysqlclient library. |
1557 | + |
1558 | +Here are some of the benefits that Percona dialog plugin offers over the default one: |
1559 | + |
1560 | + * It correctly recognizes whether PAM wants input to be echoed or not, while the default one always echoes the input on the user's console. |
1561 | + * It can use the password which is passed to |MySQL| client via "-p" parameter. |
1562 | + * Dialog client `installation bug <http://bugs.mysql.com/bug.php?id=60745>`_ has been fixed. |
1563 | + * This plugin works on |MySQL| and |Percona Server|. |
1564 | + |
1565 | +Percona offers two versions of this plugin: |
1566 | + |
1567 | + * Full PAM plugin called *auth_pam*. This plugin uses *dialog.so*. It fully supports the PAM protocol with arbitrary communication between client and server. |
1568 | + * Oracle-compatible PAM called *auth_pam_compat*. This plugin uses *mysql_clear_password* which is a part of Oracle MySQL client. It also has some limitations, such as, it supports only one password input. You must use "-p" option in order to pass the password to auth_pam_compat. |
1569 | + |
1570 | +These two versions of plugins are physically different. To choose which one you want used, you must use *IDENTIFIED WITH 'auth_pam'* for auth_pam, and *IDENTIFIED WITH 'auth_pam_compat'* for auth_pam_compat. |
1571 | + |
1572 | + |
1573 | |
1574 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/manual.rst' |
1575 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/manual.rst 1970-01-01 00:00:00 +0000 |
1576 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/manual.rst 2012-05-08 06:39:22 +0000 |
1577 | @@ -0,0 +1,38 @@ |
1578 | +.. _user-manual: |
1579 | + |
1580 | +========================================================== |
1581 | + *Percona PAM authentication plugin for MySQL* User Manual |
1582 | +========================================================== |
1583 | + |
1584 | +.. toctree:: |
1585 | + :maxdepth: 1 |
1586 | + :hidden: |
1587 | + |
1588 | +Configuring PAM for MySQL |
1589 | +========================= |
1590 | + |
1591 | +You will need to configure PAM on your system for how it should authenticate for MySQL. A simple setup can be to use the standard UNIX authentication method. |
1592 | + |
1593 | +*NOTE:* Using pam_unix means the MySQL Server needs to read the `/etc/shadow` file, which usually means it has to be run as `root` - usually not a recommended configuration. |
1594 | + |
1595 | +A sample `/etc/pam.d/mysqld` file: :: |
1596 | + |
1597 | + auth required pam_unix.so |
1598 | + account required pam_unix.so |
1599 | + |
1600 | +For added information in the system log, you can expand it to be: :: |
1601 | + |
1602 | + auth required pam_warn.so |
1603 | + auth required pam_unix.so audit |
1604 | + account required pam_unix.so audit |
1605 | + |
1606 | + |
1607 | +Creating A User |
1608 | +=============== |
1609 | + |
1610 | +You will need to execute `CREATE USER` with specifying the PAM plugin. For example: :: |
1611 | + |
1612 | + CREATE USER 'username'@'host' IDENTIFIED WITH auth_pam; |
1613 | + |
1614 | +This creates a user `username` that can connect from `host` and will be authenticated using the PAM plugin. If you are using the `pam_unix` method in PAM (or similar) you will need to have an account for `username` existing on the system. |
1615 | + |
1616 | |
1617 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-pam-plugin-logo.png' |
1618 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-pam-plugin-logo.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-pam-plugin-logo.png 2012-05-08 06:39:22 +0000 differ |
1619 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme' |
1620 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html' |
1621 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 1970-01-01 00:00:00 +0000 |
1622 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 2012-05-08 06:39:22 +0000 |
1623 | @@ -0,0 +1,499 @@ |
1624 | +{# |
1625 | + basic/layout.html |
1626 | + ~~~~~~~~~~~~~~~~~ |
1627 | + |
1628 | + Master layout template for Sphinx themes. |
1629 | + |
1630 | + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
1631 | + :license: BSD, see LICENSE for details. |
1632 | +#} |
1633 | +{%- block doctype -%} |
1634 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
1635 | + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
1636 | +{%- endblock %} |
1637 | +{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %} |
1638 | +{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %} |
1639 | +{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and |
1640 | + (sidebars != []) %} |
1641 | +{%- set url_root = pathto('', 1) %} |
1642 | +{# XXX necessary? #} |
1643 | +{%- if url_root == '#' %}{% set url_root = '' %}{% endif %} |
1644 | +{%- if not embedded and docstitle %} |
1645 | + {%- set titlesuffix = " — "|safe + docstitle|e %} |
1646 | +{%- else %} |
1647 | + {%- set titlesuffix = "" %} |
1648 | +{%- endif %} |
1649 | + |
1650 | +{%- macro relbar() %} |
1651 | + <div class="related"> |
1652 | + <h3>{{ _('Navigation') }}</h3> |
1653 | + <ul> |
1654 | + {%- for rellink in rellinks %} |
1655 | + <li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}> |
1656 | + <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}" |
1657 | + {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a> |
1658 | + {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li> |
1659 | + {%- endfor %} |
1660 | + {%- block rootrellink %} |
1661 | + <li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li> |
1662 | + {%- endblock %} |
1663 | + {%- for parent in parents %} |
1664 | + <li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li> |
1665 | + {%- endfor %} |
1666 | + {%- block relbaritems %} {% endblock %} |
1667 | + </ul> |
1668 | + </div> |
1669 | +{%- endmacro %} |
1670 | + |
1671 | +{%- macro sidebar() %} |
1672 | + {%- if render_sidebar %} |
1673 | + <div class="sphinxsidebar"> |
1674 | + <div class="sphinxsidebarwrapper"> |
1675 | + {%- block sidebarlogo %} |
1676 | + {%- if logo %} |
1677 | + <p class="logo"><a href="{{ pathto(master_doc) }}"> |
1678 | + <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/> |
1679 | + </a></p> |
1680 | + {%- endif %} |
1681 | + |
1682 | +<div class="noborder" id="sidenavi"> |
1683 | + |
1684 | + <div class="sidebanner" id="sidebanner"> |
1685 | + <div class="header"><a href="/contact/sales">Call Us</a></div> |
1686 | + <div class="numbers"> |
1687 | + <div style="padding-bottom: 4px"> |
1688 | + +1-888-316-9775 (USA - Sales)<br> |
1689 | + +1-208-473-2904 (USA - Sales) |
1690 | + </div> |
1691 | + <div> |
1692 | + +44-208-133-0309 (UK - Sales) |
1693 | + </div> |
1694 | + <div> |
1695 | + +1-877-862-4316 (Emergency) |
1696 | + </div> |
1697 | + </div> |
1698 | + </div> |
1699 | + <div id="sidefloater"></div> |
1700 | +</div> |
1701 | + |
1702 | + {%- endblock %} |
1703 | + {%- if sidebars != None %} |
1704 | + {#- new style sidebar: explicitly include/exclude templates #} |
1705 | + {%- for sidebartemplate in sidebars %} |
1706 | + {%- include sidebartemplate %} |
1707 | + {%- endfor %} |
1708 | + {%- else %} |
1709 | + {#- old style sidebars: using blocks -- should be deprecated #} |
1710 | + {%- block serverseries %} |
1711 | + {%- endblock %} |
1712 | + {%- block sidebartoc %} |
1713 | + {%- include "localtoc.html" %} |
1714 | + {%- endblock %} |
1715 | + {%- block sidebarrel %} |
1716 | + {%- include "relations.html" %} |
1717 | + {%- endblock %} |
1718 | + {%- block sidebarsourcelink %} |
1719 | + {%- include "sourcelink.html" %} |
1720 | + {%- endblock %} |
1721 | + {%- if customsidebar %} |
1722 | + {%- include customsidebar %} |
1723 | + {%- endif %} |
1724 | + {%- block sidebarsearch %} |
1725 | + {%- include "searchbox.html" %} |
1726 | + {%- endblock %} |
1727 | + {%- endif %} |
1728 | + |
1729 | + </div> |
1730 | + </div> |
1731 | + {%- endif %} |
1732 | +{%- endmacro %} |
1733 | + |
1734 | +{%- macro script() %} |
1735 | + <script type="text/javascript"> |
1736 | + var DOCUMENTATION_OPTIONS = { |
1737 | + URL_ROOT: '{{ url_root }}', |
1738 | + VERSION: '{{ release|e }}', |
1739 | + COLLAPSE_INDEX: false, |
1740 | + FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}', |
1741 | + HAS_SOURCE: {{ has_source|lower }} |
1742 | + }; |
1743 | + </script> |
1744 | + {%- for scriptfile in script_files %} |
1745 | + <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script> |
1746 | + {%- endfor %} |
1747 | +{%- endmacro %} |
1748 | + |
1749 | +{%- macro css() %} |
1750 | + <link rel="stylesheet" href="{{ pathto('_static/percona.com.css', 1) }}" type="text/css" /> |
1751 | + <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" /> |
1752 | + <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" /> |
1753 | + {%- for cssfile in css_files %} |
1754 | + <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" /> |
1755 | + {%- endfor %} |
1756 | +{%- endmacro %} |
1757 | + |
1758 | +<html xmlns="http://www.w3.org/1999/xhtml"> |
1759 | + <head> |
1760 | + <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" /> |
1761 | + {{ metatags }} |
1762 | + {%- block htmltitle %} |
1763 | + <title>{{ title|striptags|e }}{{ titlesuffix }}</title> |
1764 | + {%- endblock %} |
1765 | + |
1766 | + {{ css() }} |
1767 | + {%- if not embedded %} |
1768 | + {{ script() }} |
1769 | + {%- if use_opensearch %} |
1770 | + <link rel="search" type="application/opensearchdescription+xml" |
1771 | + title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}" |
1772 | + href="{{ pathto('_static/opensearch.xml', 1) }}"/> |
1773 | + {%- endif %} |
1774 | + |
1775 | +<script src="{{ pathto('_static/percona.com.js', 1)}}" type="text/javascript"></script> |
1776 | + |
1777 | + {%- if favicon %} |
1778 | + <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/> |
1779 | + {%- endif %} |
1780 | + {%- endif %} |
1781 | +{%- block linktags %} |
1782 | + {%- if hasdoc('about') %} |
1783 | + <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" /> |
1784 | + {%- endif %} |
1785 | + {%- if hasdoc('genindex') %} |
1786 | + <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" /> |
1787 | + {%- endif %} |
1788 | + {%- if hasdoc('search') %} |
1789 | + <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" /> |
1790 | + {%- endif %} |
1791 | + {%- if hasdoc('copyright') %} |
1792 | + <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" /> |
1793 | + {%- endif %} |
1794 | + <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" /> |
1795 | + {%- if parents %} |
1796 | + <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" /> |
1797 | + {%- endif %} |
1798 | + {%- if next %} |
1799 | + <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" /> |
1800 | + {%- endif %} |
1801 | + {%- if prev %} |
1802 | + <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" /> |
1803 | + {%- endif %} |
1804 | +{%- endblock %} |
1805 | +{%- block extrahead %} {% endblock %} |
1806 | + </head> |
1807 | + <body> |
1808 | + |
1809 | +{%- block header %} |
1810 | + |
1811 | + <!-- <div id="stickywrapper"> --> |
1812 | + <!-- <div id="stickycontent"> --> |
1813 | + <div id="header"><div class="header"> |
1814 | + <div class="logo"><a href="http://www.percona.com/" onfocus="this.blur()"><img src="http://s3.percona.com/ui-logo.png" alt="Percona Performance Consulting Experts" width="240" height="55" /></a></div> |
1815 | + <div class="right"> |
1816 | + <div class="searchlink"><a onmouseover="SEARCH.Open()"><img id="searchlink-anchor" src="http://s2.percona.com/ui-search.png" alt="" /></a></div> |
1817 | + <span class="inv"><![CDATA[<noindex>]]></span> |
1818 | + <div class="navicontainer"><div class="navi"> |
1819 | + <span id="navilink-span-about-us" ><a id="navilink-a-about-us" href="http://www.percona.com/about-us/">About Us</a></span><span id="navilink-span-mysql-consulting" ><a id="navilink-a-mysql-consulting" href="http://www.percona.com/mysql-consulting/">Consulting</a></span><span id="navilink-span-support" ><a id="navilink-a-support" href="http://www.percona.com/mysql-support/">Support</a></span><span id="navilink-span-training" ><a id="navilink-a-training" href="http://www.percona.com/training/">Training</a></span><span id="navilink-span-development" ><a id="navilink-a-development" href="http://www.percona.com/development/">Development</a></span><span id="navilink-span-software" class="selected"><a class="selected" id="navilink-a-software" href="http://www.percona.com/software/">Software</a></span><span id="navilink-span-events" ><a id="navilink-a-events" href="http://www.percona.com/live/">Events</a></span><span id="navilink-span-contact" ><a id="navilink-a-contact" href="http://www.percona.com/contact/">Contact Us</a></span> </div></div> |
1820 | + |
1821 | + <span class="inv"><![CDATA[</noindex>]]></span> |
1822 | + <span class="inv"><![CDATA[</noindex>]]></span> |
1823 | + </div> |
1824 | + </div></div> |
1825 | + <div id="stripe"></div> |
1826 | + |
1827 | +{% endblock %} |
1828 | + |
1829 | + <!-- <div id="stripe"></div> --> |
1830 | + |
1831 | +{%- block content %} |
1832 | + |
1833 | + |
1834 | + |
1835 | + {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %} |
1836 | + |
1837 | + <div class="document"> |
1838 | + |
1839 | + |
1840 | + |
1841 | + {%- block document %} |
1842 | + <div class="documentwrapper"> |
1843 | + {%- if render_sidebar %} |
1844 | + <div class="bodywrapper"> |
1845 | + {%- endif %} |
1846 | + |
1847 | + {%- block relbar1 %}{{ relbar() }}{% endblock %} |
1848 | + |
1849 | + <div class="body"> |
1850 | + {% block body %} {% endblock %} |
1851 | + </div> |
1852 | + |
1853 | + {%- block relbar2 %}{{ relbar() }} |
1854 | + |
1855 | + {%- if render_sidebar %} |
1856 | + </div> |
1857 | + {%- endif %} |
1858 | + |
1859 | + |
1860 | + |
1861 | + </div> |
1862 | + |
1863 | + {%- endblock %} |
1864 | + |
1865 | + {%- block sidebar2 %}{{ sidebar() }}{% endblock %} |
1866 | + |
1867 | + <div class="clearer"></div> |
1868 | + |
1869 | + {%- if last_updated %} |
1870 | + {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %} |
1871 | + {%- endif %} |
1872 | + |
1873 | + <div class="license"> |
1874 | + |
1875 | + {%- if show_copyright %} |
1876 | + {%- if hasdoc('copyright') %} |
1877 | + {% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %} |
1878 | + {%- else %} |
1879 | + {% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} |
1880 | + {%- endif %} |
1881 | + {%- endif %} |
1882 | + |
1883 | + <br /> |
1884 | + Except where otherwise noted, this documentation is licensed under the following license: |
1885 | + <br /> |
1886 | + <a class="urlextern" rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/"> |
1887 | + CC Attribution-ShareAlike 2.0 Generic</a><br /> |
1888 | + |
1889 | + {%- if show_sphinx %} |
1890 | + {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %} |
1891 | + {%- endif %} |
1892 | + |
1893 | + </div> |
1894 | + |
1895 | + </div> |
1896 | + {%- endblock %} |
1897 | + |
1898 | + {% endblock %} |
1899 | + |
1900 | +{%- block footer %} |
1901 | + |
1902 | + <div class="file-bugs"> |
1903 | + This documentation is developed in Launchpad as part of the <a href="https://code.launchpad.net/percona-toolkit">Percona Toolkit source code</a>.<br/> |
1904 | + If you spotted innacuracies, errors, don't understood it or you think something is missing or should be improved, please <a href="https://bugs.launchpad.net/percona-toolkit/+filebug?field.tags=doc&field.comment=[In:Percona Toolkit Documentation]&?field.tags=doc&field.title=[DOC] ">file a bug</a>. |
1905 | + |
1906 | + </div> |
1907 | + |
1908 | + <div id="support-ribbon" class="vertical" style="z-index: 1;"> |
1909 | + <div id="support-suboptions"> |
1910 | + <ul> |
1911 | + <li><a title="Contact Me" href="http://form.percona.com/ContactMe.html" style="background: url('http://s2.percona.com/buttons/btn_contact-us.png?1');"><span>Contact Us</span></a></li> |
1912 | + <li><a title="Customer Portal Log In" href="https://customers.percona.com/" style="background: url('http://s2.percona.com/buttons/btn_customer.png?1');"><span>Customer Portal Log In</span></a></li> |
1913 | + <li><a title="Attend a Webinar" href="http://percona.com/webinars/" style="background: url('http://s2.percona.com/buttons/btn_attend-a-webinar.png?1');"><span>Attend a Webinar</span></a></li> |
1914 | + <li><a title="Download Software" href="http://percona.com/downloads/" style="background:url('http://s2.percona.com/buttons/btn_download.png?1');"><span>Download Software</span></a></li> |
1915 | + <li><a title="Register for Newsletters" href="http://percona.com/subscribe/" style="background: url('http://s2.percona.com/buttons/btn_register.png?1');"><span>Register for Newsletters</span></a></li> |
1916 | + |
1917 | + </ul> |
1918 | + </div> |
1919 | + </div> |
1920 | + |
1921 | + <div id="footer"> |
1922 | + |
1923 | + <div class="footer"> |
1924 | + <div class="logo"><img width="110" height="25" alt="" src="{{ pathto('_static/ui-footer-logo.png', 1) }}"> |
1925 | + </div> |
1926 | + |
1927 | + <div class="text"> |
1928 | + <span class="inv"><!--[CDATA[<noindex-->]]></span> |
1929 | + Call us: 1-888-316-9775 • <a href="/contact">Contact Us</a><br> |
1930 | + MySQL and InnoDB are trademarks of Oracle Corp.<br> |
1931 | + Proudly running <a href="/software/percona-server/">Percona Server<span id="recentServerVersion"></span></a><br> |
1932 | + Copyright © 2006-2011 Percona Inc.<br> |
1933 | + <a href="/about-us/policies/">Copyright, Trademark, and Privacy Policy</a> • <a href="/sitemap/">Sitemap</a> |
1934 | + <span class="inv"><!--[CDATA[</noindex-->]]></span> |
1935 | + </div> |
1936 | + </div> |
1937 | + |
1938 | + </div> |
1939 | +{%- endblock %} |
1940 | +<span class="inv"><!--[CDATA[<noindex-->]]></span> |
1941 | +<div id="submenus"> |
1942 | + <div class="navi-dropdown" id="navi-dropdown-about-us"> |
1943 | + <div class="navi-dropdown-header-l"><!-- //--></div> |
1944 | + <div class="navi-dropdown-content"> |
1945 | + <div class="item"><a href="http://www.percona.com/about-us/our-mission/">Our Mission</a></div> |
1946 | + <div class="item"><a href="http://www.percona.com/about-us/why-percona/">Why Percona?</a></div> |
1947 | + <div class="item"><a href="http://www.percona.com/about-us/procedures/">Coordinating with Percona</a></div> |
1948 | + <div class="item"><a href="http://www.percona.com/about-us/customers/">Customers</a></div> |
1949 | + <div class="item"><a href="http://www.percona.com/webinars/">Webinars</a></div> |
1950 | + <div class="item"><a href="http://www.percona.com/about-us/mysql-case-studies/">MySQL Case Studies</a></div> |
1951 | + <div class="item"><a href="http://www.percona.com/about-us/our-team/">Our Team</a></div> |
1952 | + |
1953 | + <div class="item"><a href="http://www.percona.com/about-us/books/">Our Books</a></div> |
1954 | + <div class="item"><a href="http://www.percona.com/about-us/blogs/">Our Blogs</a></div> |
1955 | + <div class="item"><a href="http://www.percona.com/about-us/mysql-white-papers/">MySQL White Papers</a></div> |
1956 | + <div class="item"><a href="http://www.percona.com/about-us/conferences/">Conferences</a></div> |
1957 | + <div class="item"><a href="http://www.percona.com/about-us/presentations/">Presentations</a></div> |
1958 | + <div class="item"><a href="http://www.percona.com/about-us/newsletters/">Newsletters</a></div> |
1959 | + <div class="item"><a href="http://www.percona.com/about-us/pressreleases/">Press Releases</a></div> |
1960 | + <div class="item"><a href="http://www.percona.com/about-us/percona-in-the-news/">In The News</a></div> |
1961 | + <div class="item"><a href="http://www.percona.com/about-us/careers/">Careers</a></div> |
1962 | + |
1963 | + </div> |
1964 | + <div class="navi-dropdown-footer"><!-- //--></div> |
1965 | + </div> |
1966 | + <div class="navi-dropdown" id="navi-dropdown-mysql-consulting"> |
1967 | + <div class="navi-dropdown-header-l"><!-- //--></div> |
1968 | + <div class="navi-dropdown-content"> |
1969 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/overview/">MySQL Consulting Overview</a></div> |
1970 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/prices/">MySQL Consulting Prices</a></div> |
1971 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/architecture/">MySQL Architecture & Design</a></div> |
1972 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-backups/">MySQL Backups</a></div> |
1973 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/cloud-computing/">MySQL Cloud Solutions</a></div> |
1974 | + |
1975 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/cluster/">MySQL Cluster Consulting</a></div> |
1976 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/data-warehousing/">MySQL Data Warehousing</a></div> |
1977 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/data-recovery/">MySQL Data Recovery</a></div> |
1978 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/high-availability/">MySQL High Availability</a></div> |
1979 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-monitoring-graphing/">MySQL Monitoring & Graphing</a></div> |
1980 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-onsite-consulting/">MySQL Onsite Consulting</a></div> |
1981 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/performance-audit/">MySQL Performance Audit</a></div> |
1982 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/remote-dba/">MySQL Remote DBA</a></div> |
1983 | + |
1984 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-replication/">MySQL Replication</a></div> |
1985 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/upgrade/">MySQL Version Upgrades</a></div> |
1986 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/24x7-emergency/">Emergency 24×7 Consulting</a></div> |
1987 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/migration/">Migration to MySQL</a></div> |
1988 | + <div class="item"><a href="http://www.percona.com/drizzle-consulting/">Drizzle Consulting</a></div> |
1989 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/sphinx/">Sphinx Consulting</a></div> |
1990 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/drbd/">DRBD Consulting</a></div> |
1991 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/memcached/">Memcached Consulting</a></div> |
1992 | + |
1993 | + <div class="item"><a href="http://www.percona.com/mysql-consulting/other-services/">Other Consulting Services</a></div> |
1994 | + </div> |
1995 | + <div class="navi-dropdown-footer"><!-- //--></div> |
1996 | + </div> |
1997 | + <div class="navi-dropdown" id="navi-dropdown-support"> |
1998 | + <div class="navi-dropdown-header-l"><!-- //--></div> |
1999 | + <div class="navi-dropdown-content"> |
2000 | + <div class="item"><a href="http://www.percona.com/mysql-support/">MySQL Support Overview</a></div> |
2001 | + <div class="item"><a href="http://www.percona.com/prices/mysql-support/">MySQL Support Prices</a></div> |
2002 | + <div class="item"><a href="http://www.percona.com/mysql-support/policies/">MySQL Support Policies</a></div> |
2003 | + <div class="item"><a href="http://www.percona.com/mysql-support/consulting-vs-support/">Consulting vs. Support</a></div> |
2004 | + <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div> |
2005 | + |
2006 | + </div> |
2007 | + <div class="navi-dropdown-footer"><!-- //--></div> |
2008 | + </div> |
2009 | + <div class="navi-dropdown" id="navi-dropdown-training"> |
2010 | + <div class="navi-dropdown-header-l"><!-- //--></div> |
2011 | + <div class="navi-dropdown-content"> |
2012 | + <div class="item"><a href="http://www.percona.com/training/">MySQL Training Overview</a></div> |
2013 | + <div class="item"><a href="http://www.percona.com/prices/training/">MySQL Training Prices</a></div> |
2014 | + <div class="item"><a href="http://www.percona.com/training/classes/dba/">MySQL DBA Training</a></div> |
2015 | + <div class="item"><a href="http://www.percona.com/training/classes/developers/">MySQL Developer Training</a></div> |
2016 | + <div class="item"><a href="http://www.percona.com/training/classes/operations/">MySQL Operations Training</a></div> |
2017 | + <div class="item"><a href="http://www.percona.com/training/classes/innodb/">InnoDB & XtraDB Training</a></div> |
2018 | + |
2019 | + <div class="item"><a href="http://www.percona.com/training/classes/custom-onsite/">Custom Onsite Training</a></div> |
2020 | + </div> |
2021 | + <div class="navi-dropdown-footer"><!-- //--></div> |
2022 | + </div> |
2023 | + <div class="navi-dropdown" id="navi-dropdown-development"> |
2024 | + <div class="navi-dropdown-header-l"><!-- //--></div> |
2025 | + <div class="navi-dropdown-content"> |
2026 | + <div class="item"><a href="http://www.percona.com/development/mysql/">MySQL Development Overview</a></div> |
2027 | + <div class="item"><a href="http://www.percona.com/development/prices/">Custom Development Prices</a></div> |
2028 | + <div class="item"><a href="http://www.percona.com/development/maintenance/">MySQL Support Overview</a></div> |
2029 | + <div class="item"><a href="http://www.percona.com/development/benchmarking/">Custom Product Evaluation</a></div> |
2030 | + <div class="item"><a href="http://www.percona.com/development/maatkit/">Custom Maatkit Development</a></div> |
2031 | + |
2032 | + <div class="item"><a href="http://www.percona.com/development/custom-tools/">Custom Tools Development</a></div> |
2033 | + </div> |
2034 | + <div class="navi-dropdown-footer"><!-- //--></div> |
2035 | + </div> |
2036 | + <div class="navi-dropdown" id="navi-dropdown-software"> |
2037 | + <div class="navi-dropdown-header-l"><!-- //--></div> |
2038 | + <div class="navi-dropdown-content"> |
2039 | + <div class="item"><a href="http://www.percona.com/software/">Percona Software for MySQL</a></div> |
2040 | + <div class="item"><a href="http://www.percona.com/software/percona-server/">Percona Server with XtraDB</a></div> |
2041 | + <div class="item"><a href="http://www.percona.com/software/percona-xtradb-cluster/">Percona XtraDB Cluster</a></div> |
2042 | + <div class="item"><a href="http://www.percona.com/software/percona-xtrabackup/">Percona XtraBackup</a></div> |
2043 | + <div class="item"><a href="http://www.percona.com/software/mysql-innodb-data-recovery-tools/">Data Recovery Toolkit</a></div> |
2044 | + |
2045 | + <div class="item"><a href="http://www.percona.com/software/percona-xtradb/">Percona XtraDB</a></div> |
2046 | + <div class="item"><a href="http://www.percona.com/software/percona-toolkit/">Percona Toolkit</a></div> |
2047 | + <div class="item"><a href="http://www.percona.com/prices/software/">Software Prices</a></div> |
2048 | + <div class="item"><a href="http://www.percona.com/downloads/">Downloads</a></div> |
2049 | + <div class="item"><a href="http://www.percona.com/software/repositories/">Repositories</a></div> |
2050 | + <div class="item"><a href="http://www.percona.com/software/documentation/">Documentation</a></div> |
2051 | + <div class="item"><a href="http://forum.percona.com">Forum</a></div> |
2052 | + <div class="item"><a href="http://groups.google.com/group/percona-discussion">Google Discussion</a></div> |
2053 | + <div class="item"><a href="https://launchpad.net/percona-server">Launchpad</a></div> |
2054 | + |
2055 | + </div> |
2056 | + <div class="navi-dropdown-footer"><!-- //--></div> |
2057 | + </div> |
2058 | + <div class="navi-dropdown" id="navi-dropdown-events"> |
2059 | + <div class="navi-dropdown-header-r"><!-- //--></div> |
2060 | + <div class="navi-dropdown-content"> |
2061 | + <div class="item"><a href="http://www.percona.com/live/mysql-conference-2012/">MySQL Conference & Expo 2012</a></div> |
2062 | + <div class="item"><a href="http://www.percona.com/live/">Previous Percona Live Events</a></div> |
2063 | + </div> |
2064 | + <div class="navi-dropdown-footer"><!-- //--></div> |
2065 | + </div> |
2066 | + |
2067 | + <div class="navi-dropdown" id="navi-dropdown-contact"> |
2068 | + <div class="navi-dropdown-header-r"><!-- //--></div> |
2069 | + <div class="navi-dropdown-content"> |
2070 | + <div class="item"><a href="http://www.percona.com/contact/24x7-emergency/">24×7 Emergency</a></div> |
2071 | + <div class="item"><a href="http://www.percona.com/contact/sales/">Sales & General Inquiries</a></div> |
2072 | + <div class="item"><a href="http://www.percona.com/contact/billing/">Billing Inquiries</a></div> |
2073 | + <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div> |
2074 | + <div class="item"><a href="http://www.percona.com/contact/phone-directory/">Phone Directory</a></div> |
2075 | + <div class="item"><a href="http://www.percona.com/subscribe/">Subscribe to Newsletter</a></div> |
2076 | + |
2077 | + </div> |
2078 | + <div class="navi-dropdown-footer"><!-- //--></div> |
2079 | + </div> |
2080 | + <div id="search-dropdown" class="search-dropdown"> |
2081 | + <div class="search-dropdown-header"><!-- //--></div> |
2082 | + <div class="search-dropdown-content"> |
2083 | + <div class="search-info">Search Percona.com:</div> |
2084 | + <form method="get" action="http://search.percona.com/search/" id="search-form"> |
2085 | + <div class="form"><input type="text" id="search-input" name="q" maxlength="100"></div> |
2086 | + </form> |
2087 | + </div> |
2088 | + <div class="search-dropdown-footer"><!-- //--></div> |
2089 | + </div> |
2090 | +</div> |
2091 | +<div id="stats"> |
2092 | +<!-- GA //--> |
2093 | + <script src="http://www.percona.com/static/js/urchin.js" type="text/javascript"></script> |
2094 | + <script type="text/javascript"> |
2095 | + _uacct = "UA-343802-3"; |
2096 | + urchinTracker(); |
2097 | + </script> |
2098 | +<!-- /GA //--> |
2099 | +<!-- NAVI //--> |
2100 | +<script type="text/javascript">//<![CDATA[ |
2101 | +var navi = [{id:"about-us", direction: "l"},{id:"mysql-consulting", direction: "l"},{id:"support", direction: "l"},{id:"training", direction: "l"},{id:"development", direction: "l"},{id:"software", direction: "l"},{id:"events", direction: "r"},{id:"contact", direction: "r"}]; |
2102 | +for(var i = 0, c = navi.length; i < c; i++) { |
2103 | +window.jQuery('#navilink-a-' + navi[i].id).bind('mouseover',{id: navi[i].id, direction:navi[i].direction}, function(e) { NAVI.Open(e.data.id, e.data.direction); } ); |
2104 | +} |
2105 | +window.jQuery('#search-form').bind('submit', function() { window.location.href = jQuery('#search-form').attr('action') + jQuery('#search-input').val(); return false; }); |
2106 | +//]]></script> |
2107 | +<!-- /NAVI //--> |
2108 | +<script type="text/javascript"> |
2109 | +//<![CDATA[ |
2110 | +Percona.host = 'www.percona.com'; |
2111 | +Percona.getRecentServerVersion('#recentServerVersion'); |
2112 | +//]]> |
2113 | +</script> |
2114 | +</div> |
2115 | + </body> |
2116 | +</html> |
2117 | + |
2118 | + |
2119 | + |
2120 | +{% if theme_collapsiblesidebar|tobool %} |
2121 | +{% set script_files = script_files + ['_static/sidebar.js'] %} |
2122 | +{% endif %} |
2123 | |
2124 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html' |
2125 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 1970-01-01 00:00:00 +0000 |
2126 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 2012-05-08 06:39:22 +0000 |
2127 | @@ -0,0 +1,22 @@ |
2128 | +{# |
2129 | + basic/searchbox.html |
2130 | + ~~~~~~~~~~~~~~~~~~~~ |
2131 | + |
2132 | + Sphinx sidebar template: quick search box. |
2133 | + |
2134 | + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
2135 | + :license: BSD, see LICENSE for details. |
2136 | +#} |
2137 | +{%- if pagename != "search" %} |
2138 | +<div id="searchbox" style="display: none; padding: 3px;"> |
2139 | + <h3>{{ _('Quick search') }}</h3> |
2140 | + <form class="search" action="{{ pathto('search') }}" method="get"> |
2141 | + <input type="text" name="q" size="18" /> |
2142 | + <input type="submit" value="{{ _('Go') }}" /> |
2143 | + <input type="hidden" name="check_keywords" value="yes" /> |
2144 | + <input type="hidden" name="area" value="default" /> |
2145 | + </form> |
2146 | + |
2147 | +</div> |
2148 | +<script type="text/javascript">$('#searchbox').show(0);</script> |
2149 | +{%- endif %} |
2150 | |
2151 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static' |
2152 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t' |
2153 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 1970-01-01 00:00:00 +0000 |
2154 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 2012-05-08 06:39:22 +0000 |
2155 | @@ -0,0 +1,469 @@ |
2156 | +/* |
2157 | + * default.css_t |
2158 | + * ~~~~~~~~~~~~~ |
2159 | + * |
2160 | + * Sphinx stylesheet -- default theme. |
2161 | + * |
2162 | + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
2163 | + * :license: BSD, see LICENSE for details. |
2164 | + * |
2165 | + */ |
2166 | + |
2167 | +@import url("basic.css"); |
2168 | + |
2169 | +/* -- page layout ----------------------------------------------------------- */ |
2170 | + |
2171 | +body { |
2172 | + font-family: Arial,Helvetica,sans-serif; |
2173 | + font-size: 14px; |
2174 | + background-color: #fff; |
2175 | + color: #333333; |
2176 | + line-height: 20px; |
2177 | + margin: 0; |
2178 | + padding: 0; |
2179 | + |
2180 | +} |
2181 | + |
2182 | +div.document { |
2183 | + background-color: #fff; |
2184 | + margin: 0 auto; |
2185 | + overflow: hidden; |
2186 | + padding: 30px 0; |
2187 | + width: 960px; |
2188 | +} |
2189 | + |
2190 | +div.documentwrapper { |
2191 | + /* float: left; */ |
2192 | + /* width: 100%; */ |
2193 | + |
2194 | +} |
2195 | + |
2196 | +div.bodywrapper { |
2197 | + margin: 10 0 0 0px; |
2198 | + width: 660px; |
2199 | + float:right; |
2200 | +} |
2201 | + |
2202 | +div.body { |
2203 | + background-color: #fff; |
2204 | + color: #333333; |
2205 | + padding: 0 0 20px; |
2206 | +} |
2207 | + |
2208 | +{%- if theme_rightsidebar|tobool %} |
2209 | +div.bodywrapper { |
2210 | + margin: 0 {{ theme_sidebarwidth }}px 0 0; |
2211 | +} |
2212 | +{%- endif %} |
2213 | + |
2214 | +div.footer { |
2215 | + /* color: {{ theme_footertextcolor }}; */ |
2216 | + /* width: 100%; */ |
2217 | + /* padding: 9px 0 9px 0; */ |
2218 | + /* text-align: center; */ |
2219 | + /* font-size: 75%; */ |
2220 | + font: 80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif; |
2221 | + background: none repeat scroll 0 0 #333333; |
2222 | + border-top: 2px solid #D95200; |
2223 | + overflow: hidden; |
2224 | +} |
2225 | + |
2226 | +div.footer a { |
2227 | + color: {{ theme_footertextcolor }}; |
2228 | + text-decoration: underline; |
2229 | +} |
2230 | + |
2231 | +div.related { |
2232 | + background-color: #ccc; |
2233 | + line-height: 30px; |
2234 | + color: #333; |
2235 | + background: none repeat scroll 0 0 #F8F8F8; |
2236 | + border: 1px solid #E0E0E0; |
2237 | + clear: both; |
2238 | + padding: 10px; |
2239 | + width: 635px; |
2240 | + margin-bottom: 5px; |
2241 | +} |
2242 | + |
2243 | +div.related a { |
2244 | + color: #999; |
2245 | +} |
2246 | + |
2247 | +div.sphinxsidebar { |
2248 | + margin-left: 0px; |
2249 | + margin-right: 30px; |
2250 | + color: #eee; |
2251 | + font-family: Arial,Helvetica,sans-serif; |
2252 | + width: 260px; |
2253 | + {%- if theme_stickysidebar|tobool %} |
2254 | + top: 30px; |
2255 | + bottom: 0; |
2256 | + margin: 0; |
2257 | + position: fixed; |
2258 | + overflow: auto; |
2259 | + height: auto; |
2260 | + {%- endif %} |
2261 | + {%- if theme_rightsidebar|tobool %} |
2262 | + float: right; |
2263 | + {%- if theme_stickysidebar|tobool %} |
2264 | + right: 0; |
2265 | + {%- endif %} |
2266 | + {%- endif %} |
2267 | +} |
2268 | + |
2269 | +{%- if theme_stickysidebar|tobool %} |
2270 | +/* this is nice, but it it leads to hidden headings when jumping |
2271 | + to an anchor */ |
2272 | +/* |
2273 | +div.related { |
2274 | + position: fixed; |
2275 | +} |
2276 | + |
2277 | +div.documentwrapper { |
2278 | + margin-top: 30px; |
2279 | +} |
2280 | +*/ |
2281 | +{%- endif %} |
2282 | + |
2283 | +div.sphinxsidebar h3 { |
2284 | + /* font-family: {{ theme_headfont }}; */ |
2285 | + color: #999; |
2286 | + font-size: 18px; |
2287 | + line-height: 15px; |
2288 | + font-weight: 400; |
2289 | + margin-left: 5px; |
2290 | + padding: 0; |
2291 | +} |
2292 | + |
2293 | +div.sphinxsidebar h3 a { |
2294 | + color: #333; |
2295 | +} |
2296 | + |
2297 | +div.sphinxsidebar a:hover { |
2298 | + /* color: #333; */ |
2299 | +} |
2300 | + |
2301 | +div.sphinxsidebar h4 { |
2302 | + /* font-family: {{ theme_headfont }}; */ |
2303 | + color: #666; |
2304 | + font-size: 18px; |
2305 | + font-weight: normal; |
2306 | + margin: 5px 0 0 5px; |
2307 | + padding: 0; |
2308 | +} |
2309 | + |
2310 | +div.sphinxsidebar p { |
2311 | + color: #333; |
2312 | + margin-bottom: 5px; |
2313 | + margin-left: 5px; |
2314 | +} |
2315 | + |
2316 | +div.sphinxsidebar p.topless { |
2317 | + margin: 5px 10px 10px 10px; |
2318 | +} |
2319 | + |
2320 | +div.sphinxsidebar ul { |
2321 | + margin: 10px; |
2322 | + padding-left: 5px; |
2323 | + color: #333; |
2324 | +} |
2325 | + |
2326 | +div.sphinxsidebar a { |
2327 | + color: #D12907; |
2328 | +} |
2329 | + |
2330 | +div.sphinxsidebar input { |
2331 | + border: 1px solid #999; |
2332 | + font-family: sans-serif; |
2333 | + font-size: 1em; |
2334 | +} |
2335 | + |
2336 | +{% if theme_collapsiblesidebar|tobool %} |
2337 | +/* for collapsible sidebar */ |
2338 | +div#sidebarbutton { |
2339 | + background-color: {{ theme_sidebarbtncolor }}; |
2340 | +} |
2341 | +{% endif %} |
2342 | + |
2343 | +/* -- hyperlink styles ------------------------------------------------------ */ |
2344 | + |
2345 | +a { |
2346 | + color: #D12907; |
2347 | + text-decoration: underline; |
2348 | + border: medium none; |
2349 | + cursor: pointer; |
2350 | +} |
2351 | + |
2352 | +a:visited { |
2353 | + color: #D12907; |
2354 | + text-decoration: underline; |
2355 | +} |
2356 | + |
2357 | +a:hover { |
2358 | + color: #D12907; |
2359 | + text-decoration: underline; |
2360 | +} |
2361 | + |
2362 | +{% if theme_externalrefs|tobool %} |
2363 | +a.external { |
2364 | + text-decoration: none; |
2365 | + border-bottom: 1px dashed {{ theme_linkcolor }}; |
2366 | +} |
2367 | + |
2368 | +a.external:hover { |
2369 | + text-decoration: none; |
2370 | + border-bottom: none; |
2371 | +} |
2372 | + |
2373 | +a.external:visited { |
2374 | + text-decoration: none; |
2375 | + border-bottom: 1px dashed {{ theme_visitedlinkcolor }}; |
2376 | +} |
2377 | +{% endif %} |
2378 | + |
2379 | +/* -- body styles ----------------------------------------------------------- */ |
2380 | + |
2381 | +div.body h1, |
2382 | +div.body h2, |
2383 | +div.body h3, |
2384 | +div.body h4, |
2385 | +div.body h5, |
2386 | +div.body h6 { |
2387 | + font-family: Arial,Helvetica,sans-serif; |
2388 | + background-color: #fff; |
2389 | + font-weight: 400; |
2390 | + |
2391 | + /* border-bottom: 1px solid #ccc; */ |
2392 | + /* margin: 20px -20px 10px -20px; */ |
2393 | + /* padding: 0; */ |
2394 | + /* padding: 3px 0 3px 10px; */ |
2395 | + text-decoration: none !important; |
2396 | + |
2397 | + border-bottom: 1px solid #E0E0E0; |
2398 | + font-size: 20px; |
2399 | + line-height: 20px; |
2400 | + margin: 30px 0 15px; |
2401 | + padding: 0 0 3px; |
2402 | + color: #000; |
2403 | +} |
2404 | + |
2405 | +div.body h1 { |
2406 | + font-size: 32px; |
2407 | + color: #D12907; |
2408 | + line-height: 40px; |
2409 | + margin: 10px 0 20px 0; |
2410 | + text-decoration: none !important; |
2411 | + border-bottom: none; |
2412 | + margin-top: 35px; |
2413 | +} |
2414 | + |
2415 | +div.body h2 { font-size: 150%; } |
2416 | +div.body h3 { font-size: 140%; } |
2417 | +div.body h4 { font-size: 120%; } |
2418 | +div.body h5 { font-size: 110%; } |
2419 | +div.body h6 { font-size: 100%; } |
2420 | + |
2421 | +a.headerlink { |
2422 | + color: {{ theme_headlinkcolor }}; |
2423 | + font-size: 0.8em; |
2424 | + padding: 0 4px 0 4px; |
2425 | + text-decoration: none; |
2426 | +} |
2427 | + |
2428 | +a.headerlink:hover { |
2429 | + background-color: {{ theme_headlinkcolor }}; |
2430 | + color: white; |
2431 | +} |
2432 | + |
2433 | +div.body dd, div.body li { |
2434 | + text-align: justify; |
2435 | +} |
2436 | + |
2437 | +div.body dt { |
2438 | + list-style-type: square; |
2439 | + /* margin: 8px 0 8px 30px; */ |
2440 | + padding: 0 4px 0 5px; |
2441 | + |
2442 | +} |
2443 | + |
2444 | +div.body p { |
2445 | + text-align: justify; |
2446 | +/* line-height: 130%;*/ |
2447 | + margin: 10px 0; |
2448 | +} |
2449 | + |
2450 | +/* div.body ul, */ |
2451 | +div.body li { |
2452 | + list-style-type: square; |
2453 | + margin: 8px 0 8px 30px; |
2454 | + padding: 0 4px 0 5px; |
2455 | +} |
2456 | + |
2457 | +.reference em { |
2458 | + font-style: normal; |
2459 | +} |
2460 | + |
2461 | +.std-term { |
2462 | + font-style: normal; |
2463 | + font-weight: 400; |
2464 | + color: #FF7400 |
2465 | +} |
2466 | + |
2467 | +div.admonition p.admonition-title + p { |
2468 | + display: inline; |
2469 | +} |
2470 | + |
2471 | +div.admonition p { |
2472 | + margin-bottom: 5px; |
2473 | +} |
2474 | + |
2475 | +div.admonition pre { |
2476 | + margin-bottom: 5px; |
2477 | +} |
2478 | + |
2479 | +div.admonition ul, div.admonition ol { |
2480 | + margin-bottom: 5px; |
2481 | +} |
2482 | + |
2483 | +div.note { |
2484 | + background-color: #eee; |
2485 | + border: 1px solid #ccc; |
2486 | +} |
2487 | + |
2488 | +div.seealso { |
2489 | + background-color: #ffc; |
2490 | + border: 1px solid #ff6; |
2491 | +} |
2492 | + |
2493 | +div.topic { |
2494 | + background-color: #eee; |
2495 | +} |
2496 | + |
2497 | +div.warning { |
2498 | + background-color: #ffe4e4; |
2499 | + border: 1px solid #f66; |
2500 | +} |
2501 | + |
2502 | +p.admonition-title { |
2503 | + display: inline; |
2504 | +} |
2505 | + |
2506 | +p.admonition-title:after { |
2507 | + content: ":"; |
2508 | +} |
2509 | + |
2510 | +pre { |
2511 | + padding: 10px; |
2512 | + background-color: #F0E6D9/* {{ theme_codebgcolor }} */; |
2513 | + color: {{ theme_codetextcolor }}; |
2514 | + line-height: 120%; |
2515 | + border: 1px dashed #ED9821; |
2516 | + font-size: 80%; |
2517 | + overflow: auto; |
2518 | + /* border-left: none; */ |
2519 | + /* border-right: none; */ |
2520 | +} |
2521 | + |
2522 | +tt { |
2523 | +/* background-color: #ecf0f3; |
2524 | + padding: 0 1px 0 1px; |
2525 | + font-size: 0.95em;*/ |
2526 | + font-weight: 400; |
2527 | +} |
2528 | + |
2529 | +div.body td { |
2530 | + text-align: none; |
2531 | +} |
2532 | + |
2533 | +table.docutils th { |
2534 | + background-color: #DEE7EC; |
2535 | + border: 1px solid #8CACBB; |
2536 | + padding: 3px; |
2537 | + text-align: center; |
2538 | + font-style: normal; |
2539 | + font-weight: 400; |
2540 | +} |
2541 | + |
2542 | +table.docutils td { |
2543 | + border: 1px solid #8CACBB; |
2544 | + padding: 3px; |
2545 | + line-height: 16px; |
2546 | + vertical-align: middle; |
2547 | +} |
2548 | + |
2549 | +.warning tt { |
2550 | + background: #efc2c2; |
2551 | +} |
2552 | + |
2553 | +.note tt { |
2554 | + background: #d6d6d6; |
2555 | +} |
2556 | + |
2557 | +.viewcode-back { |
2558 | + font-family: {{ theme_bodyfont }}; |
2559 | +} |
2560 | + |
2561 | +div.viewcode-block:target { |
2562 | + background-color: #f4debf; |
2563 | + border-top: 1px solid #ac9; |
2564 | + border-bottom: 1px solid #ac9; |
2565 | +} |
2566 | + |
2567 | +.file-bugs { |
2568 | + background: none repeat scroll 0 0 #E8E8E8; |
2569 | + border: 1px solid #E0E0E0; |
2570 | + clear: both; |
2571 | + color: #333333; |
2572 | + padding: 10px; |
2573 | + text-align: center; |
2574 | + font-size: 90%; |
2575 | +} |
2576 | + |
2577 | +div.footer .footer { |
2578 | + margin: 0 auto; |
2579 | + overflow: hidden; |
2580 | + padding: 10px 0; |
2581 | + width: 960px; |
2582 | + border-top: none; |
2583 | +} |
2584 | + |
2585 | +div.footer .footer .logo { |
2586 | + float: left; |
2587 | + overflow: hidden; |
2588 | + padding: 17px 0 0; |
2589 | +} |
2590 | + |
2591 | +div.footer .footer .text { |
2592 | + color: #E0E0E0; |
2593 | + float: right; |
2594 | + font-family: Arial,Helvetica,sans-serif; |
2595 | + font-size: 11px; |
2596 | + line-height: 15px; |
2597 | + overflow: hidden; |
2598 | + text-align: right; |
2599 | +} |
2600 | + |
2601 | +div.license { |
2602 | + font-size: 80%; |
2603 | + /* padding: 0.5em; */ |
2604 | + text-align: center; |
2605 | + margin: 13px 0 -15px; |
2606 | +} |
2607 | + |
2608 | +#sidenavi.noborder { |
2609 | + border-right: medium none; |
2610 | + border-top: medium none; |
2611 | + margin: 0; |
2612 | +} |
2613 | + |
2614 | +#sidenavi { |
2615 | + color: #333333; |
2616 | + /* float: left; */ |
2617 | + font-family: Arial,Helvetica,sans-serif; |
2618 | + font-size: 18px; |
2619 | + line-height: 25px; |
2620 | + overflow: hidden; |
2621 | + padding: 10px 0 8px 0px; |
2622 | + width: 255px; |
2623 | +} |
2624 | + |
2625 | |
2626 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png' |
2627 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png 2012-05-08 06:39:22 +0000 differ |
2628 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js' |
2629 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 1970-01-01 00:00:00 +0000 |
2630 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 2012-05-08 06:39:22 +0000 |
2631 | @@ -0,0 +1,154 @@ |
2632 | +/*! |
2633 | + * jQuery JavaScript Library v1.4.2 |
2634 | + * http://jquery.com/ |
2635 | + * |
2636 | + * Copyright 2010, John Resig |
2637 | + * Dual licensed under the MIT or GPL Version 2 licenses. |
2638 | + * http://jquery.org/license |
2639 | + * |
2640 | + * Includes Sizzle.js |
2641 | + * http://sizzlejs.com/ |
2642 | + * Copyright 2010, The Dojo Foundation |
2643 | + * Released under the MIT, BSD, and GPL Licenses. |
2644 | + * |
2645 | + * Date: Sat Feb 13 22:33:48 2010 -0500 |
2646 | + */ |
2647 | +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i? |
2648 | +e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r= |
2649 | +j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g, |
2650 | +"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e= |
2651 | +true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, |
2652 | +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& |
2653 | +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, |
2654 | +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== |
2655 | +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, |
2656 | +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)|| |
2657 | +c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded", |
2658 | +L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype, |
2659 | +"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+ |
2660 | +a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f], |
2661 | +d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]=== |
2662 | +a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&& |
2663 | +!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari= |
2664 | +true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; |
2665 | +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, |
2666 | +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= |
2667 | +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= |
2668 | +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, |
2669 | +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; |
2670 | +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, |
2671 | +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== |
2672 | +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, |
2673 | +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ", |
2674 | +i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ", |
2675 | +" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className= |
2676 | +this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i= |
2677 | +e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= |
2678 | +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); |
2679 | +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, |
2680 | +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); |
2681 | +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), |
2682 | +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!= |
2683 | +null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type= |
2684 | +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& |
2685 | +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; |
2686 | +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), |
2687 | +fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop|| |
2688 | +d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this, |
2689 | +"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent= |
2690 | +a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y, |
2691 | +isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit= |
2692 | +{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}}; |
2693 | +if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", |
2694 | +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, |
2695 | +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, |
2696 | +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&& |
2697 | +!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}}, |
2698 | +toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector, |
2699 | +u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "), |
2700 | +function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q]; |
2701 | +if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, |
2702 | +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); |
2703 | +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| |
2704 | +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[]; |
2705 | +for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length- |
2706 | +1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, |
2707 | +CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}}, |
2708 | +relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]= |
2709 | +l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[]; |
2710 | +h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, |
2711 | +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, |
2712 | +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, |
2713 | +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, |
2714 | +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= |
2715 | +h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m= |
2716 | +m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== |
2717 | +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, |
2718 | +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition|| |
2719 | +!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m= |
2720 | +h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& |
2721 | +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>"; |
2722 | +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); |
2723 | +(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: |
2724 | +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/, |
2725 | +gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length; |
2726 | +c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= |
2727 | +{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== |
2728 | +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", |
2729 | +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? |
2730 | +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== |
2731 | +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)? |
2732 | +a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= |
2733 | +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, |
2734 | +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, |
2735 | +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, |
2736 | +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); |
2737 | +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, |
2738 | +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&& |
2739 | +this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]|| |
2740 | +u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length=== |
2741 | +1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); |
2742 | +return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", |
2743 | +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= |
2744 | +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? |
2745 | +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= |
2746 | +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= |
2747 | +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, |
2748 | +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= |
2749 | +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= |
2750 | +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== |
2751 | +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, |
2752 | +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), |
2753 | +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, |
2754 | +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& |
2755 | +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? |
2756 | +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== |
2757 | +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= |
2758 | +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", |
2759 | +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| |
2760 | +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); |
2761 | +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== |
2762 | +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== |
2763 | +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; |
2764 | +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay"); |
2765 | +this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a], |
2766 | +"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)}, |
2767 | +animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing= |
2768 | +j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]); |
2769 | +this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== |
2770 | +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| |
2771 | +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; |
2772 | +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= |
2773 | +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, |
2774 | +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length|| |
2775 | +c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement? |
2776 | +function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b= |
2777 | +this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle; |
2778 | +k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&& |
2779 | +f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>"; |
2780 | +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); |
2781 | +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, |
2782 | +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- |
2783 | +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": |
2784 | +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in |
2785 | +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); |
2786 | |
2787 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css' |
2788 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 1970-01-01 00:00:00 +0000 |
2789 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 2012-05-08 06:39:22 +0000 |
2790 | @@ -0,0 +1,271 @@ |
2791 | +@charset "utf-8"; |
2792 | +/** |
2793 | + * Support ribbon |
2794 | + */ |
2795 | +#support-ribbon.vertical |
2796 | +{ |
2797 | + position: fixed; |
2798 | + right:-3px; |
2799 | + top:145px; |
2800 | + color: #ffffff; |
2801 | + width: 153px; |
2802 | + height: 130px; |
2803 | + z-index: 1; |
2804 | +} |
2805 | +#support-ribbon.vertical #support-suboptions { |
2806 | + display: block; |
2807 | + position:relative; |
2808 | + right:0px; |
2809 | + top: 0px; |
2810 | + width:155px; |
2811 | + border-bottom: 0; |
2812 | + z-index: -10; |
2813 | + |
2814 | +} |
2815 | +#support-ribbon.vertical #support-suboptions a { |
2816 | + margin-bottom:5px; |
2817 | + display: block; |
2818 | + opacity: 0.9; |
2819 | + text-align: center; |
2820 | + color: #fff; |
2821 | + height: 33px; |
2822 | + line-height:33px; |
2823 | +} |
2824 | +#support-suboptions a:hover { |
2825 | + opacity: 1; |
2826 | +} |
2827 | +#support-suboptions a span { display:none;} |
2828 | +/** |
2829 | +horizontal ribbon |
2830 | +*/ |
2831 | +#support-ribbon.horizontal |
2832 | +{ |
2833 | + position: fixed; |
2834 | + bottom:0; |
2835 | + left:0; |
2836 | + color: #ffffff; |
2837 | + height: 38px; |
2838 | + z-index: 1; |
2839 | +} |
2840 | + #support-ribbon.horizontal #support-suboptions { |
2841 | + |
2842 | + position:relative; |
2843 | + top: 0px; |
2844 | + border-bottom: 0; |
2845 | + z-index: -10; |
2846 | + margin:auto; |
2847 | +} |
2848 | +#support-ribbon.horizontal #support-suboptions li { |
2849 | + float: left; |
2850 | + list-style-type: none; |
2851 | +} |
2852 | +#support-ribbon.horizontal #support-suboptions li a { |
2853 | + margin-bottom:5px; |
2854 | + display: block; |
2855 | + opacity: 0.9; |
2856 | + text-align: center; |
2857 | + color: #fff; |
2858 | + height: 38px; |
2859 | + line-height:38px; |
2860 | + width: 145px; |
2861 | + margin-right:5px; |
2862 | +} |
2863 | + |
2864 | +html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-weight:inherit;font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}body,html{height:100%;margin:0;padding:0}form{display:inline}a{border:none;cursor:pointer}img{border:none}div,img{behavior:url(/static/css/iepngfix.htc)}em{font-style:italic;}del{text-decoration:line-through;}.hidden{display:none}#header{background:#333;height:95px;overflow:hidden;zoom:1}#header .header{height:95px;margin:0 auto;overflow:hidden;width:960px;zoom:1}#header .header .logo{float:left;overflow:hidden;padding:20px 0;width:240px;zoom:1}#header .header .logo{overflow:hidden;zoom:1;float:left;width:240px;padding:20px 0px;}#header .header .right{overflow:hidden;zoom:1;float:left;width:720px;height:35px;padding:30px 0px;}#header .header .right .searchlink{overflow:hidden;zoom:1;width:35px;height:35px;float:right;padding:0px 0px 0px 10px;}#header .header .right .navicontainer{overflow:hidden;zoom:1;float:right;height:35px;background:#ffffff url(ui-navi-l.png) top left no-repeat;}#header .header .right .navi{overflow:hidden;zoom:1;height:27px;padding:4px 10px;background:url(ui-navi-r.png) top right no-repeat;}#header .header .right .navicontainer .navi span{overflow:hidden;zoom:1;height:27px;float:left;margin:0px;}#header .header .right .navicontainer .navi span:hover{background:#f0f0f0 url(ui-navi-hover-l.png) top left no-repeat;}#header .header .right .navicontainer .navi span.selected,#header .header .right .navicontainer .navi span.selected:hover{background:#d5390b url(ui-navi-sel-l.png) top left no-repeat;}#header .header .right .navicontainer .navi span a,#header .header .right .navicontainer .navi span a:visited{display:block;padding:6px 10px 4px 10px;height:17px;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:14px;color:#000000;text-decoration:none;}#header .header .right .navicontainer .navi span a:hover{background:url(ui-navi-hover-r.png) top right no-repeat;}#header .header .right .navicontainer .navi span.selected a.selected,#header .header .right .navicontainer .navi span.selected a.selected:visited,#header .header .right .navicontainer .navi span.selected a.selected:hover{background:url(ui-navi-sel-r.png) top right no-repeat;color:#ffffff;}#slogan{overflow:hidden;zoom:1;height:125px;background:#d24300 urk(ui-orange-front.png) bottom center no-repeat;text-align:center;}#stripe{overflow:hidden;zoom:1;height:20px;background:#d24300 url(ui-orange-content.png) top center no-repeat;}#footer{overflow:hidden;zoom:1;background:#333333;border-top:2px #d95200 solid;}#footer .footer{overflow:hidden;zoom:1;width:960px;margin:0px auto;padding:10px 0px;}#footer .footer .logo{overflow:hidden;zoom:1;float:left;padding:17px 0px 0px 0px;}#footer .footer .text{overflow:hidden;zoom:1;float:right;text-align:right;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:15px;color:#e0e0e0;}#footer .footer .text a,#footer .footer .text a:visited{color:#e0e0e0;text-decoration:none;}#footer .footer .text a:hover{color:#ffffff;text-decoration:underline;}div.navi-dropdown{display:none;position:absolute;overflow:hidden;zoom:1;width:255px;z-index:900;}div.navi-dropdown .navi-dropdown-header-l{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-l.png) top left no-repeat;}div.navi-dropdown .navi-dropdown-header-r{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-r.png) top left no-repeat;}div.navi-dropdown .navi-dropdown-content{overflow:hidden;zoom:1;width:225px;padding:0px 15px 5px 15px;background:#ffffff url(ui-dropdown-bg.png) repeat-y;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}div.navi-dropdown .navi-dropdown-content .item{padding:3px 0px 1px 0px;}div.navi-dropdown .navi-dropdown-content a,div.navi-dropdown .navi-dropdown-content a:visited{display:block;color:#333333;text-decoration:none;}div.navi-dropdown .navi-dropdown-content a:hover{color:#d12907;text-decoration:underline;}div.navi-dropdown .navi-dropdown-footer{overflow:hidden;zoom:1;width:255px;height:10px;background:url(ui-dropdown-footer.png) top left no-repeat;}div.search-dropdown{display:none;position:absolute;overflow:hidden;zoom:1;width:255px;}div.search-dropdown .search-dropdown-header{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-search.png) top left no-repeat;}div.search-dropdown .search-dropdown-content{overflow:hidden;zoom:1;width:225px;padding:0px 15px 5px 15px;background:#ffffff url(ui-dropdown-bg.png) repeat-y;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}div.search-dropdown .search-dropdown-content .form{padding-top:2px;}div.search-dropdown .search-dropdown-content .form input{border:1px #c0c0c0 solid;padding:4px;width:210px;outline:none;}div.search-dropdown .search-dropdown-content .form input:focus{border:1px #707070 solid;outline:none;}div.search-dropdown .search-dropdown-footer{overflow:hidden;zoom:1;width:255px;height:10px;background:url(ui-dropdown-footer.png) top left no-repeat;}#sidenavi{overflow:hidden;zoom:1;float:left;width:260px;border-top:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;margin:0px 30px 0px 0px;padding:0px 0px 20px 0px;font-family:Arial,Helvetica,sans-serif;font-size:18px;line-height:25px;color:#333333;}#sidenavi.noborder{border-top:none;border-right:none;margin:0px 31px 0px 0px;}#sidenavi .sidebanner{border-left:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;text-align:center;padding:15px 10px;}#sidenavi.noborder .sidebanner{border-top:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;}#sidenavi .sidebanner .header{padding:0px 0px 10px 0px;line-height:18px;text-align:center;}#sidenavi .sidebanner .numbers{padding:0px 0px 0px 58px;background:url(phone.png) 5px center no-repeat;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;text-align:left;}#sidenavi #sidefloater{padding-top:10px;}#sidenavi .item{padding:10px 10px 8px 10px;}#sidenavi > .item.selected{background:url(ui-leftnavi-sel.png) top left no-repeat;}#sidenavi a,#sidenavi a:visited{display:block;color:#333333;text-decoration:none;}#sidenavi a:hover{color:#d12907;text-decoration:none;}#sidenavi > .item.selected > a,#sidenavi > .item.selected > a:visited{color:#d12907;text-decoration:none;}#sidenavi .sidesubnavi{overflow:hidden;zoom:1;font-family:Arial,Helvetica,sans-serif;font-size:13px;line-height:17px;color:#333333;}#sidenavi .sidesubnavi .subitem{padding:7px 10px 0px 10px;}#sidenavi .sidesubnavi .subitem.selected a,#sidenavi .sidesubnavi .subitem.selected a:visited{color:#d12907;text-decoration:none;}#contentcontainer{overflow:hidden;zoom:1;width:960px;padding:30px 0px;margin:0px auto;}#content{overflow:hidden;zoom:1;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}#content p{margin:10px 0px;}#content a,#content a:visited{color:#d12907;text-decoration:underline;}#content a:hover{color:#712000;text-decoration:underline;}#content h1{font-family:Arial,Helvetica,sans-serif;font-size:32px;line-height:40px;margin:5px 0px 20px 0px;color:#d12907;}#content h2{font-family:Arial,Helvetica,sans-serif;font-size:20px;line-height:20px;padding:0px 0px 3px 0px;margin:30px 0px 15px 0px;color:#000000;border-bottom:1px #e0e0e0 solid;}#content h3{font-family:Arial,Helvetica,sans-serif;font-weight:bold;font-size:16px;line-height:22px;margin:20px 0px 10px 0px;color:#000000;}#content h4{font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:14px;font-weight:bold;padding:5px 0px 0px 0px;margin:-16px 0px 20px 0px;color:#000000;border-top:1px #e0e0e0 solid;}#content h4 a,#content h4 a:visited{color:#000000;text-decoration:none;}#content h4 a:hover{color:#d12907;text-decoration:none;}#content dl dt{font-weight:bold;margin-top:10px;margin-bottom:10px;}#content dl dd{padding:0px 0px 0px 30px;}#content ul{list-style-type:square;padding:0px 0px 0px 30px;}#content ul li{list-style-type:square;margin:8px 0px;}#content ol{list-style-type:decimal;padding:0px 0px 0px 30px;}#content ol li{list-style-type:decimal;margin:8px 0px;}#content div.pagecontent{overflow:hidden;zoom:1;}div.contentbox{border:1px #e0e0e0 solid;}div.contentbox div.title{font-size:16px;line-height:20px;font-weight:bold;padding:8px 15px 2px 15px;background:url(ui-leftnavi-sel.png) repeat-x;}div.contentbox div.content{padding:15px;}div.frontpage-p{overflow:hidden;zoom:1;width:960px;margin:0px;margin-bottom:20px;padding:0px;}div.frontpage-p div.frontpage-p-container{overflow:hidden;zoom:1;width:960px;height:200px;padding-bottom:30px;z-index:100;}div.frontpage-p a.nivo-imageLink{position:absolute;top:0px;left:0px;width:960px;height:200px;border:0;padding:0;margin:0;z-index:20;display:none;}div.frontpage-p div.frontpage-p-container div.nivo-directionNav{width:1px;height:1px;display:none !important;z-index:18 !important;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav{position:absolute;top:200px;width:960px;text-align:center;font-size:28px;line-height:25px;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav a{padding:0px 3px;text-decoration:none !important;color:#919191 !important;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav a.active{color:#d12907 !important;}div.frontpage-p div.frontpage-p-selector{overflow:hidden;zoom:1;height:20px;text-align:center;}div.frontpage-main{overflow:hidden;zoom:1;width:960px;margin:20px 0px;padding:0px;}div.frontpage-main div.frontpage-left{overflow:hidden;zoom:1;width:645px;float:left;padding:0px;}div.frontpage-boxes{overflow:hidden;zoom:1;width:645px;margin:25px 0px 0px 0px;padding:0px;}div.frontpage-boxes div.frontpage-boxes-selector{overflow:hidden;zoom:1;width:645px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item{overflow:hidden;zoom:1;width:160px;float:left;margin-left:-1px;border-top:1px #cccccc solid;border-left:1px #cccccc solid;border-right:1px #cccccc solid;border-bottom:1px #cccccc solid;text-align:center;margin-top:10px;padding:0px 0px 0px 0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item:first-child{margin-left:0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item.selected{background:url(ui-tab-bg.png) repeat-x;margin-top:0px;border-bottom:none;padding:5px 0px 6px 0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item a{display:block;font-size:20px;line-height:20px;color:#444444 !important;text-decoration:none !important;padding:9px 0px 8px 0px;}div.frontpage-boxes div.frontpage-boxes-container{overflow:hidden;zoom:1;width:603px;height:150px;padding:20px;border-left:1px #cccccc solid;border-right:1px #cccccc solid;border-bottom:1px #cccccc solid;}div.frontpage-boxes div.frontpage-boxes-container div.frontpage-box img{padding:0px 15px 15px 5px;}div.frontpage-main div.frontpage-right{overflow:hidden;zoom:1;width:295px;float:right;margin-left:20px;padding:0px;}div.frontpage-block{overflow:hidden;zoom:1;border:1px #cccccc solid;width:288px;margin:0 0 20px 5px;}div.frontpage-block div.header{text-align:left;padding:15px 15px 0px 15px;background:url(ui-tab-bg.png) repeat-x;font-family:Arial,Helvetica,sans-serif;font-size:20px;line-height:20px;}div.frontpage-block div.content{overflow:hidden;zoom:1;padding:10px 15px 15px 15px;}div.frontpage-block div.content div.call-us{font-size:12px;line-height:17px;}div.frontpage-block div.content div.training{padding:20px;overflow:hidden;zoom:1;font-size:12px;line-height:17px;}div.frontpage-block div.content div.training ul.training-short-list{list-style-type:none !important;margin:0 !important;padding:0 !important;}div.frontpage-block div.content div.training ul.training-short-list li{list-style-type:none !important;}div.frontpage-block div.content div.more{overflow:hidden;zoom:1;text-align:right;padding:15px 0px 0px 0px;font-size:12px;line-height:17px;}.our-team-page h2{clear:both;}div.our-team-item{overflow:hidden;zoom:1;width:162px;margin-left:5px;height:230px;float:left;}div.our-team-item .img img{border:1px #e0e0e0 solid;padding:2px;}table.phonetable{margin-top:1em;border-collapse:collapse;}.phonetable{margin-left:2em;}table.phonetable th,table.phonetable tr{text-align:center;}table.phonetable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.phonetable td{border:1px #e0e0e0 solid;padding:7px;}table.phonetable .label{text-align:left;}table.phonetable td.label{padding-left:2em;}.form-item{clear:both;margin-top:1em;position:relative;}.form-item label{display:block;font-weight:bold;position:absolute;top:0;left:0;width:13em;}.form-required{color:#fa0;font-weight:bold;}.form-item .description{color:#888;font-size:0.85em;line-height:150%;position:relative;left:14em;}#edit-submitbutton{position:relative;left:12em;margin:1em 0;}.form-item input[type=text],.form-item select,.form-item textarea{border:1px solid #CCC;width:493px;position:relative;top:0;left:12em;}.form-item textarea{height:12em;padding:3px;}.form-item-spacer{padding-top:1em;}.form-item #captcha{position:relative;top:0;left:12em;}#edit-submitted-captcha{margin-top:0.5em;width:154px;}fieldset.form-item-set{border:1px solid #ccc;display:block;margin:12px 0;padding:12px;}fieldset.form-item-set legend{border:none;display:block;padding:0 2px;}div.error{background:#fff;border:solid 1px #c52020;color:#C52020;padding:5px;}div.messages{margin:5px 20px;font-size:11px;}div.messages ul,div.messages ul li{list-style-image:none;list-style-type:none;}div.messages ul li{padding:0 0 0.2em 0;}.form-item .error{background-color :#fdd;}#emergency-contacts .node-field-name{text-align:right;font-weight:bold;padding-right:1em;}#emergency-contacts .node-field-value-phone{font-weight:bold;color:#137F00;}#emergency-contacts .node-field-help{font-weight:bold;}#compact_footer{width:auto !important;}#compact_contentcontainer{overflow:hidden;zoom:1;width:auto;padding:30px 0px;margin:0px 20px;}.custlogo img{padding:20px;border:1px solid white;}.custlogo img:hover{border:1px solid gray;}table.formtable{border-collapse:collapse;}table.formtable th{font-weight:normal;white-space:nowrap;padding:4px 20px 4px 0px;}table.formtable td{padding:4px 0px 4px 0px;}table.formtable td input[type='text'],table.formtable td select{border:1px #e0e0e0 solid;padding:4px;width:400px;}table.formtable td.submit{padding:10px 0px 0px 0px;text-align:center;}table.datatable{margin-top:1em;border-collapse:collapse;}.datatable{margin-left:2em;}table.datatable th,table.datatable tr{text-align:center;}table.datatable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.datatable td{border:1px #e0e0e0 solid;padding:7px;}table.datatable .label{text-align:left;}table.datatable td.label{padding-left:2em;}.frontpage-sidebar .header{padding:0px 0px 10px 0px;font-size:18px;font-weight:normal;text-align:center;}.frontpage-sidebar .header.link{padding:13px 0px 10px 4px;text-align:left;}.frontpage-sidebar .header a,.frontpage-sidebar .header a:visited{color:#333333 !important;text-decoration:none !important;}.frontpage-sidebar .header a:hover{color:#d12907 !important;text-decoration:none !important;}.frontpage-sidebar .header.bloglink{font-size:16px;padding:0px 0px 10px 10px;text-align:center;}.frontpage-sidebar .header.blogheader{font-weight:normal;text-align:center;font-size:15px;padding:13px 10px 10px 0px;}.frontpage-sidebar .header a.email{padding:13px 10px 10px 40px;background:url(email-small.png) left center no-repeat;}.frontpage-sidebar .call-us .numbers{padding:0px 0px 0px 38px;background:url(phone-small.png) 2px center no-repeat;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:18px;text-align:left;}.frontpage-sidebar .eventum a,.frontpage-sidebar .eventum a:visited{padding:0px 2px 0px 55px;font-size:12px;line-height:18px;text-align:left;background:url(support-small.png) left center no-repeat;display:block;color:#333333 !important;text-decoration:none !important;}.frontpage-sidebar .eventum a:hover{color:#d12907 !important;text-decoration:underline !important;}div.presentation{border-top:1px #e0e0e0 dotted;padding:15px 0px;}div.presentation:first-child{margin-top:0;border:none;}div.presentation table.presentation{border-collapse:collapse;}div.presentation table.presentation td div.bordered-image-screenshot{border:1px #e0e0e0 solid;background:#f8f8f8;padding:5px;}div.presentation table.presentation td.presentations-descr{padding-left:15px;}div.presentation table.presentation td.presentations-descr h4{font-size:18px;font-weight:bold;}.customer-vote{width:412px;text-align:justify;}strong{font-weight:bold;}html,body{height:100%;}#stickywrapper{position:relative;min-height:100%;}* html #stickywrapper{height:100%;}#stickycontent{padding-bottom:102px;}#stickyfooter{position:relative;margin:-97px auto 0 auto;}a.links{font-style:oblique;text-decoration:underline;}span.subpart{font-weight:bold;}div.software-info-container{overflow:hidden;zoom:1;float:right;padding:0px 0px 25px 25px;}table.software-info-container{width:240px;border-collapse:collapse;}table.software-info-container td{border:1px #e0e0e0 solid;padding:10px 10px 10px 10px;}table.software-info-container td.latest{padding:10px 10px 10px 62px;background:url(software-latest.png) 15px center no-repeat;min-height:32px;font-size:16px;line-height:24px;}table.software-info-container td.download a{font-weight:bold;}table.software-info-container td.download{padding:15px 62px 15px 20px;background:url(software-download.png) 195px center no-repeat;min-height:32px;font-size:18px;line-height:24px;}table.software-info-container td.links{text-align:left;padding:4px 10px 4px 20px;}table.software-info-container td.links div{margin:10px 0px;}.inv{display:none;}table.downloadstable{margin-top:20px;border-collapse:collapse;}table.downloadstable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.downloadstable td{border:1px #e0e0e0 solid;padding:7px;}table.downloadstable td.file{width:90%;text-align:left;}table.downloadstable td.modified{width:5%;text-align:center;white-space:nowrap;}table.downloadstable td.size{width:5%;text-align:right;white-space:nowrap;}div.downloads-maintenance-promo,div.downloads-warning{border:1px #e0e0e0 solid;padding:15px 20px 15px 150px;margin:30px 0px;background:url(shield.png) 35px center no-repeat;}div.downloads-maintenance-promo > .close-button{float:right;clear:right;margin-top:-10px;margin-right:-15px;cursor:pointer;cursor:hand;}div.downloads-warning{background:url(warning.png) 35px center no-repeat;}div.downloads-version{border-top:1px #e0e0e0 solid;margin-top:-10px;padding-top:10px;text-align:right;font-size:14px;line-height:14px;font-weight:bold;}div.downloads-anchors{font-size:12px;line-height:15px;margin:20px 0px;}div.downloads-backtotop{font-size:12px;line-height:15px;padding-top:8px;}.downloadsignupdialog .ui-dialog-titlebar{display:none;}#downloadsignup h2{font-family:Arial,Helvetica,sans-serif;font-size:22px;line-height:22px;margin:10px 0px 20px 0px;color:#d12907;}#downloadsignup .intro{margin:10px 0px 15px 0px;}#downloadsignup .form .field{overflow:hidden;zoom:1;margin:10px 0px;}#downloadsignup .form .field .label{overflow:hidden;zoom:1;width:150px;float:left;padding-top:5px;}#downloadsignup .form .field .element{overflow:hidden;zoom:1;width:410px;float:left;}#downloadsignup .form .field .element input,#downloadsignup .form .field .element select{width:400px;border:1px #cccccc solid;padding:3px;outline:none;}#downloadsignup .form .field .element input:focus,#downloadsignup .form .field .element select:focus{border:1px #333333 solid;background:#f8f8f8;outline:none;}#downloadsignup .form .field .radiolist{overflow:hidden;zoom:1;display:block;padding:0;margin:0;}#downloadsignup .form .field table.radiolist{width:100%;}#downloadsignup .form .field .radiolist td{width:25%;}#downloadsignup .form .field div.radiolist label{display:block;min-width:55px;float:left;zoom:1;padding:8px 10px 2px 24px !important;text-indent:-24px;overflow:auto;}#downloadsignup .form .field table.radiolist label{padding:8px 15px 2px 0px !important;zoom:1;display:block;}#downloadsignup .form .field .radiolist label input{margin:0px 7px 0px 3px !important;}.schedule td{padding:3px;border:1px solid #eeeeee;padding-left:10px;font-size:16px;}.tdmini{font-weight:bold;font-size:10px !important;}.tdbreak{background-color:#ffeeee;text-align:center;}.trhead td{background-color:#d12907;color:#ffffff;font-weight:bold;}.speaker{font-size:10px;}table.left-headers th{font-weight:bold;text-align:right;padding:5px 12px;vertical-align:top;border-right:1px solid black;}table.left-headers td{padding:5px 12px;}.training-list tr th{font-weight:bold;}.training-list tr td{padding-right:15px;}a.interwiki{background:transparent url(/docs/wiki/lib/images/interwiki.png) 0px 1px no-repeat;padding-left:16px;}a.iw_wp{background-image:url(/docs/wiki/lib/images/interwiki/wp.gif)}a.iw_wpfr{background-image:url(/docs/wiki/lib/images/interwiki/wpfr.gif)}a.iw_wpde{background-image:url(/docs/wiki/lib/images/interwiki/wpde.gif)}a.iw_wpes{background-image:url(/docs/wiki/lib/images/interwiki/wpes.gif)}a.iw_wppl{background-image:url(/docs/wiki/lib/images/interwiki/wppl.gif)}a.iw_wpjp{background-image:url(/docs/wiki/lib/images/interwiki/wpjp.gif)}a.iw_wpmeta{background-image:url(/docs/wiki/lib/images/interwiki/wpmeta.gif)}a.iw_doku{background-image:url(/docs/wiki/lib/images/interwiki/doku.gif)}a.iw_dokubug{background-image:url(/docs/wiki/lib/images/interwiki/dokubug.gif)}a.iw_amazon{background-image:url(/docs/wiki/lib/images/interwiki/amazon.gif)}a.iw_amazon_de{background-image:url(/docs/wiki/lib/images/interwiki/amazon.de.gif)}a.iw_amazon_uk{background-image:url(/docs/wiki/lib/images/interwiki/amazon.uk.gif)}a.iw_phpfn{background-image:url(/docs/wiki/lib/images/interwiki/phpfn.gif)}a.iw_coral{background-image:url(/docs/wiki/lib/images/interwiki/coral.gif)}a.iw_sb{background-image:url(/docs/wiki/lib/images/interwiki/sb.gif)}a.iw_google{background-image:url(/docs/wiki/lib/images/interwiki/google.gif)}a.iw_meatball{background-image:url(/docs/wiki/lib/images/interwiki/meatball.gif)}a.iw_wiki{background-image:url(/docs/wiki/lib/images/interwiki/wiki.gif)}a.mediafile{background:transparent url(/docs/wiki/lib/images/fileicons/file.png) 0px 1px no-repeat;padding-left:18px;padding-bottom:1px;}a.mf_txt{background-image:url(/docs/wiki/lib/images/fileicons/txt.png)}a.mf_sxi{background-image:url(/docs/wiki/lib/images/fileicons/sxi.png)}a.mf_tgz{background-image:url(/docs/wiki/lib/images/fileicons/tgz.png)}a.mf_wav{background-image:url(/docs/wiki/lib/images/fileicons/wav.png)}a.mf_jpg{background-image:url(/docs/wiki/lib/images/fileicons/jpg.png)}a.mf_sxd{background-image:url(/docs/wiki/lib/images/fileicons/sxd.png)}a.mf_js{background-image:url(/docs/wiki/lib/images/fileicons/js.png)}a.mf_ps{background-image:url(/docs/wiki/lib/images/fileicons/ps.png)}a.mf_conf{background-image:url(/docs/wiki/lib/images/fileicons/conf.png)}a.mf_swf{background-image:url(/docs/wiki/lib/images/fileicons/swf.png)}a.mf_xml{background-image:url(/docs/wiki/lib/images/fileicons/xml.png)}a.mf_py{background-image:url(/docs/wiki/lib/images/fileicons/py.png)}a.mf_cpp{background-image:url(/docs/wiki/lib/images/fileicons/cpp.png)}a.mf_css{background-image:url(/docs/wiki/lib/images/fileicons/css.png)}a.mf_jpeg{background-image:url(/docs/wiki/lib/images/fileicons/jpeg.png)}a.mf_odi{background-image:url(/docs/wiki/lib/images/fileicons/odi.png)}a.mf_pptx{background-image:url(/docs/wiki/lib/images/fileicons/pptx.png)}a.mf_doc{background-image:url(/docs/wiki/lib/images/fileicons/doc.png)}a.mf_bz2{background-image:url(/docs/wiki/lib/images/fileicons/bz2.png)}a.mf_png{background-image:url(/docs/wiki/lib/images/fileicons/png.png)}a.mf_ogg{background-image:url(/docs/wiki/lib/images/fileicons/ogg.png)}a.mf_xls{background-image:url(/docs/wiki/lib/images/fileicons/xls.png)}a.mf_tar{background-image:url(/docs/wiki/lib/images/fileicons/tar.png)}a.mf_pl{background-image:url(/docs/wiki/lib/images/fileicons/pl.png)}a.mf_mp3{background-image:url(/docs/wiki/lib/images/fileicons/mp3.png)}a.mf_pdf{background-image:url(/docs/wiki/lib/images/fileicons/pdf.png)}a.mf_audio{background-image:url(/docs/wiki/lib/images/fileicons/audio.png)}a.mf_rtf{background-image:url(/docs/wiki/lib/images/fileicons/rtf.png)}a.mf_java{background-image:url(/docs/wiki/lib/images/fileicons/java.png)}a.mf_cs{background-image:url(/docs/wiki/lib/images/fileicons/cs.png)}a.mf_odt{background-image:url(/docs/wiki/lib/images/fileicons/odt.png)}a.mf_c{background-image:url(/docs/wiki/lib/images/fileicons/c.png)}a.mf_rpm{background-image:url(/docs/wiki/lib/images/fileicons/rpm.png)}a.mf_docx{background-image:url(/docs/wiki/lib/images/fileicons/docx.png)}a.mf_ppt{background-image:url(/docs/wiki/lib/images/fileicons/ppt.png)}a.mf_odp{background-image:url(/docs/wiki/lib/images/fileicons/odp.png)}a.mf_html{background-image:url(/docs/wiki/lib/images/fileicons/html.png)}a.mf_gz{background-image:url(/docs/wiki/lib/images/fileicons/gz.png)}a.mf_zip{background-image:url(/docs/wiki/lib/images/fileicons/zip.png)}a.mf_gif{background-image:url(/docs/wiki/lib/images/fileicons/gif.png)}a.mf_htm{background-image:url(/docs/wiki/lib/images/fileicons/htm.png)}a.mf_sql{background-image:url(/docs/wiki/lib/images/fileicons/sql.png)}a.mf_rar{background-image:url(/docs/wiki/lib/images/fileicons/rar.png)}a.mf_rb{background-image:url(/docs/wiki/lib/images/fileicons/rb.png)}a.mf_csv{background-image:url(/docs/wiki/lib/images/fileicons/csv.png)}a.mf_odc{background-image:url(/docs/wiki/lib/images/fileicons/odc.png)}a.mf_odf{background-image:url(/docs/wiki/lib/images/fileicons/odf.png)}a.mf_deb{background-image:url(/docs/wiki/lib/images/fileicons/deb.png)}a.mf_ods{background-image:url(/docs/wiki/lib/images/fileicons/ods.png)}a.mf_xlsx{background-image:url(/docs/wiki/lib/images/fileicons/xlsx.png)}a.mf_lua{background-image:url(/docs/wiki/lib/images/fileicons/lua.png)}a.mf_sxc{background-image:url(/docs/wiki/lib/images/fileicons/sxc.png)}a.mf_odg{background-image:url(/docs/wiki/lib/images/fileicons/odg.png)}a.mf_7z{background-image:url(/docs/wiki/lib/images/fileicons/7z.png)}a.mf_sxw{background-image:url(/docs/wiki/lib/images/fileicons/sxw.png)}a.mf_php{background-image:url(/docs/wiki/lib/images/fileicons/php.png)}div.clearer{clear:both;line-height:0;height:0;overflow:hidden;}div.no{display:inline;margin:0;padding:0;}.hidden{display:none;}div.error{background:#fcc url(/docs/wiki/lib/styles/../images/error.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #faa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.info{background:#ccf url(/docs/wiki/lib/styles/../images/info.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #aaf;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.success{background:#cfc url(/docs/wiki/lib/styles/../images/success.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #afa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.notify{background:#ffc url(/docs/wiki/lib/styles/../images/notify.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #ffa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}.medialeft{float:left;}.mediaright{float:right;}.mediacenter{display:block;margin-left:auto;margin-right:auto;}.leftalign{text-align:left;}.centeralign{text-align:center;}.rightalign{text-align:right;}em.u{font-style:normal;text-decoration:underline;}em em.u{font-style:italic;}.code .br0{color:#6c6;}.code .co0{color:#808080;font-style:italic;}.code .co1{color:#808080;font-style:italic;}.code .co2{color:#808080;font-style:italic;}.code .co3{color:#808080;}.code .coMULTI{color:#808080;font-style:italic;}.code .es0{color:#009;font-weight:bold;}.code .kw1{color:#b1b100;}.code .kw2{color:#000;font-weight:bold;}.code .kw3{color:#006;}.code .kw4{color:#933;}.code .kw5{color:#00f;}.code .me1{color:#060;}.code .me2{color:#060;}.code .nu0{color:#c6c;}.code .re0{color:#00f;}.code .re1{color:#00f;}.code .re2{color:#00f;}.code .re3{color:#f33;font-weight:bold;}.code .re4{color:#099;}.code .st0{color:#f00;}.code .sy0{color:#6c6;}div#acl_manager div#acl__tree{font-size:90%;width:25%;height:300px;float:left;overflow:auto;border:1px solid #8cacbb;text-align:left;}div#acl_manager div#acl__tree a.cur{background-color:#ff9;font-weight:bold;}div#acl_manager div#acl__tree ul{list-style-type:none;margin:0;padding:0;}div#acl_manager div#acl__tree li{padding-left:1em;}div#acl_manager div#acl__tree ul img{margin-right:0.25em;cursor:pointer;}div#acl_manager div#acl__detail{width:73%;height:300px;float:right;overflow:auto;}div#acl_manager div#acl__detail fieldset{width:90%;}div#acl_manager div#acl__detail div#acl__user{border:1px solid #8cacbb;padding:0.5em;margin-bottom:0.6em;}div#acl_manager table.inline{width:100%;margin:0;}div#acl_manager .aclgroup{background:transparent url(/docs/wiki/lib/plugins/acl/pix/group.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .acluser{background:transparent url(/docs/wiki/lib/plugins/acl/pix/user.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .aclpage{background:transparent url(/docs/wiki/lib/plugins/acl/pix/page.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .aclns{background:transparent url(/docs/wiki/lib/plugins/acl/pix/ns.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager label.disabled{color:#666!important;}#acl_manager label{text-align:left;font-weight:normal;display:inline;}#acl_manager table{margin-left:10%;width:80%;}#acl_manager table tr{background-color:inherit;}#acl_manager table tr:hover{background-color:#dee7ec;}div.toolbar #tool__bar_table button.selected{background:#fff url(/docs/wiki/lib/plugins/edittable/images/buttonshadow_toggled.png) repeat-x bottom;}div.toolbar #tool__bar_table button.disabled{background:#fff url(/docs/wiki/lib/plugins/edittable/images/buttonshadow_toggled2.png) repeat-x bottom;opacity:0.4;}div.toolbar #tool__bar_table button.separator{margin-left:0.5em;}div.toolbar #tool__bar_table{margin-bottom:0.5em;}#dw__editform #edit__wrap{margin-top:1.5em;overflow:auto;border:1px solid #8cacbb;}div.dokuwiki table.edit{margin:-1px;}div.dokuwiki table.edit th,div.dokuwiki table.edit td{min-width:5em;}div.dokuwiki table.edit input{border:none;background:transparent;font:inherit;width:100%;}html>body div.dokuwiki table.edit th,html>body div.dokuwiki table.edit td{background-image:url(/docs/wiki/lib/plugins/edittable/images/inputshadow.png);background-repeat:repeat-x;background-position:top;}div.dokuwiki table.edit td.handle{color:#666;background-color:#f5f5f5;padding:0;vertical-align:bottom;position:relative;}div.dokuwiki table.edit td.rowhandle{width:3em;}div.dokuwiki table.edit td.handle{cursor:move;}div.dokuwiki table.edit td.curhandle{background-color:#dee7ec;}div.dokuwiki table.edit td.disabledhandle{background-image:none;background-color:#c0c0c0;cursor:no-drop;}html>body div.dokuwiki table.edit td.handle{background-image:url(/docs/wiki/lib/plugins/edittable/images/buttonshadow.png);background-repeat:repeat-x;background-position:bottom;}#table__dragmarker{display:block;height:100%;width:100%;position:relative;}#table__dragmarker .dragmarker_topright{position:absolute;top:-0.5em;right:0px;}#table__dragmarker .dragmarker_bottomright{position:absolute;top:0.5em;right:0px;}#table__dragmarker .dragmarker_bottomleft{position:absolute;top:0.5em;left:0px;}.handle .handle_dropdown{float:right;margin-top:3px;}.handle .handle_dropdown img{padding:4px 2px 1px;cursor:pointer;}#dw__editform .handle .handle_dropdown div{position:absolute;z-index:25;}#dw__editform .handle .handle_dropdown div ul{background:#fff none repeat scroll 0 0;border:1px solid;list-style-image:none;list-style-position:outside;list-style-type:none;opacity:0.9;padding:0.3em;margin:0;cursor:auto;font-size:0.9em;}#dw__editform .handle .handle_dropdown div ul li{width:100%;text-align:left;}#dw__editform .handle .handle_dropdown div ul li a{width:100%;display:block;cursor:pointer;}#dw__editform .handle .handle_dropdown div ul li a:hover{background:#dee7ec;}div.dokuwiki div.editbutton_table{margin-top:-1em;}div.dokuwiki div.editbutton_table form input.button{float:none;margin-left:0.6em;padding:0 0.3em;background-image:none;border-top:none;border-bottom-right-radius:0.5em;-moz-border-radius-bottomright:0.5em;-webkit-border-bottom-right-radius:0.5em;border-bottom-left-radius:0.5em;-moz-border-radius-bottomleft:0.5em;-webkit-border-bottom-left-radius:0.5em;}div.dokuwiki div.section_highlight table{background-color:#dee7ec;}div.dokuwiki div.table.section_highlight{background-color:transparent !important;}.noteredirect{margin:1em;margin-left:auto;margin-right:auto;width:70% !important;min-height:18px;clear:both;text-align:justify;vertical-align:middle;border-collapse:collapse;padding:7px 10px 5px 32px;background-position:10px 50%;background-repeat:no-repeat;-moz-border-radius:10px;-khtml-border-radius:10px;border-radius:10px;background-color:#B5E0FF;background-image:url(/docs/wiki/lib/plugins/pageredirect/images/important_small.png);}#user__manager tr.disabled{color:#6f6f6f;background:#e4e4e4;}#user__manager tr.user_info{vertical-align:top;}#user__manager div.edit_user{width:46%;float:left;}#user__manager table{margin-bottom:1em;}#user__manager input.button[disabled]{color:#ccc!important;border-color:#ccc!important;}#plugin__manager h2{margin-left:0;}#plugin__manager form{display:block;margin:0;padding:0;}#plugin__manager legend{display:none;}#plugin__manager fieldset{width:auto;}#plugin__manager .button{margin:0;}#plugin__manager p,#plugin__manager label{text-align:left;}#plugin__manager .hidden{display:none;}#plugin__manager .new{background:#dee7ec;}#plugin__manager input[disabled]{color:#ccc;border-color:#ccc;}#plugin__manager .pm_menu,#plugin__manager .pm_info{margin-left:0;text-align:left;}#plugin__manager .pm_menu{float:left;width:48%;}#plugin__manager .pm_info{float:right;width:50%;}#plugin__manager .common fieldset{margin:0;padding:0 0 1.0em 0;text-align:left;border:none;}#plugin__manager .common label{padding:0 0 0.5em 0;}#plugin__manager .common input.edit{width:24em;margin:0.5em;}#plugin__manager .plugins fieldset{color:#000;background:#fff;text-align:right;border-top:none;border-right:none;border-left:none;}#plugin__manager .plugins fieldset.protected{background:#fdd;color:#000;}#plugin__manager .plugins fieldset.disabled{background:#e0e0e0;color:#a8a8a8;}#plugin__manager .plugins .legend{color:#000;background:inherit;display:block;margin:0;padding:0;font-size:1em;line-height:1.4em;font-weight:normal;text-align:left;float:left;padding:0;clear:none;}#plugin__manager .plugins .button{font-size:95%;}#plugin__manager .plugins fieldset.buttons{border:none;}#plugin__manager .plugins fieldset.buttons .button{float:left;}#plugin__manager .pm_info h3{margin-left:0;}#plugin__manager .pm_info dl{margin:1em 0;padding:0;}#plugin__manager .pm_info dt{width:6em;float:left;clear:left;margin:0;padding:0;}#plugin__manager .pm_info dd{margin:0 0 0 7em;padding:0;background:none;}#plugin__manager .plugins .enable{float:left;width:auto;margin-right:0.5em;}.dokuwiki #plugin__captcha_wrapper img{margin:1px;vertical-align:bottom;border:1px solid #8cacbb;}#config__manager div.success,#config__manager div.error,#config__manager div.info{background-position:0.5em;padding:0.5em;text-align:center;}#config__manager fieldset{margin:1em;width:auto;margin-bottom:2em;background-color:#dee7ec;color:#000;padding:0 1em;}#config__manager legend{font-size:1.25em;}#config__manager form{}#config__manager table{margin:1em 0;width:100%;}#config__manager fieldset td{text-align:left;}#config__manager fieldset td.value{width:31em;}#config__manager td.label{padding:0.8em 0 0.6em 1em;vertical-align:top;}#config__manager td.label label{clear:left;display:block;}#config__manager td.label img{padding:0 10px;vertical-align:middle;float:right;}#config__manager td.label span.outkey{font-size:70%;margin-top:-1.7em;margin-left:-1em;display:block;background-color:#fff;color:#666;float:left;padding:0 0.1em;position:relative;z-index:1;}#config__manager td input.edit{width:30em;}#config__manager td .input{width:30.8em;}#config__manager td select.edit{}#config__manager td textarea.edit{width:27.5em;height:4em;}#config__manager tr .input,#config__manager tr input,#config__manager tr textarea,#config__manager tr select{background-color:#fff;color:#000;}#config__manager tr.default .input,#config__manager tr.default input,#config__manager tr.default textarea,#config__manager tr.default select,#config__manager .selectiondefault{background-color:#cdf;color:#000;}#config__manager tr.protected .input,#config__manager tr.protected input,#config__manager tr.protected textarea,#config__manager tr.protected select,#config__manager tr.protected .selection{background-color:#fcc!important;color:#000 !important;}#config__manager td.error{background-color:red;color:#000;}#config__manager .selection{width:14.8em;float:left;margin:0 0.3em 2px 0;}#config__manager .selection label{float:right;width:14em;font-size:90%;}* html #config__manager .selection label{padding-top:2px;}#config__manager .selection input.checkbox{padding-left:0.7em;}#config__manager .other{clear:both;padding-top:0.5em;}#config__manager .other label{padding-left:2px;font-size:90%;}div.noteclassic,div.noteimportant,div.notewarning,div.notetip{margin:2em;margin-left:auto;margin-right:auto;width:70% !important;min-height:40px;clear:both;text-align:justify;vertical-align:middle;border-collapse:collapse;padding:15px 20px 15px 80px;background-position:20px 50%;background-repeat:no-repeat;-moz-border-radius:20px;-khtml-border-radius:20px;border-radius:20px;}div.noteclassic{background-color:#eef;background-image:url(/docs/wiki/lib/plugins/note/images/note.png);}div.noteimportant{background-color:#ffc;background-image:url(/docs/wiki/lib/plugins/note/images/important.png);}div.notewarning{background-color:#fdd;background-image:url(/docs/wiki/lib/plugins/note/images/warning.png);}div.notetip{background-color:#dfd;background-image:url(/docs/wiki/lib/plugins/note/images/tip.png);}.dtree{font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:11px;color:#000;white-space:nowrap;line-height:normal;}.dtree img{border:0px;vertical-align:top;}.dtree a{color:#090;text-decoration:none;}.dtree a.node,.dtree a.nodeSel a.navSel{white-space:nowrap;padding:1px 2px 1px 2px;}.dtree a.nodeSel{background-color:#dee7ec;}.dtree a.navSel{background-color:#ff9;}.indexmenu_nojs{display:block;}div.li a.indexmenu_idx{color:#f30 !important;text-decoration:none !important;font-weight:bold;}div.li a.indexmenu_idx_head{font-weight:bold;}div.dokuwiki div.indexmenu_list_themes{clear:both;border-top:2px solid #8cacbb;padding-left:1em;}.dtree a.nodeFdUrl:hover,.dtree a.nodeSel:hover,a.navSel:hover,.dtree a.nodeUrl:hover{color:#090;text-decoration:underline;background-color:#dee7ec;}.dtree a.node:hover{text-decoration:none;}.dtree .indexmenu_tocbullet{position:absolute;background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/toc_bullet.gif) no-repeat scroll;vertical-align:middle;width:11px;height:11px;}.dtree .indexmenu_larrow{position:absolute;filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/larrow.gif) repeat-y scroll;padding-left:22px;z-index:100;}.indexmenu_toc{font-size:80%;line-height:1.2em;white-space:normal;overflow:hidden;width:200px !important;z-index:100 !important;word-wrap:break-word;}.indexmenu_toc .indexmenu_toc_inside{border:1px solid #8cacbb;background-color:#fff;text-align:left;padding:0.5em 0 0.7em 0;max-height:300px;height:expression( this.scrollHeight > 300 ? "300px":"auto" );overflow:auto;}.dtree .indexmenu_rarrow{position:absolute;background:white url(/docs/wiki/lib/plugins/indexmenu/images/rarrow.gif) no-repeat scroll;width:11px;height:15px;}.indexmenu_rmenu{position:absolute;z-index:100;background-color:#fff;border:1px solid black;font-size:80%;line-height:100%;padding-bottom:5px;}.indexmenu_rmenuhead{background:#CFC url(/docs/wiki/lib/plugins/indexmenu/images/close.gif) no-repeat scroll;border-bottom:1px solid #000;color:#000;font-size:90%;margin:0pt;text-align:left;padding:1px 15px;vertical-align:middle;overflow:hidden;width:80px;}.indexmenu_rmenu ul,.indexmenu_rmenu li{list-style-type:none !important;list-style-image:none !important;color:#000 !important;margin:2px !important;text-align:center;}.indexmenu_rmenu a:hover{background-color:#000 !important;color:#fff !important;}.indexmenu_opts{font-size:80%;}.dtree .emptynode{background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/empty.gif) no-repeat scroll;display:inline;padding:1px 8px;width:16px;height:16px;vertical-align:top;zoom:1;}div.dokuwiki .header{padding:3px 0 0 2px;}div.dokuwiki .pagename{float:left;font-size:200%;font-weight:bolder;color:#dee7ec;text-align:left;vertical-align:middle;}div.dokuwiki .pagename a{color:#436976 !important;text-decoration:none !important;}div.dokuwiki .logo{float:right;font-size:220%;font-weight:bolder;text-align:right;vertical-align:middle;}div.dokuwiki .logo a{color:#dee7ec !important;text-decoration:none !important;font-variant:small-caps;letter-spacing:2pt;}div.dokuwiki .bar{border:1px #e0e0e0 solid;background:#f8f8f8;padding:10px;clear:both;}div.dokuwiki .bar-left{float:left;}div.dokuwiki .bar-right{float:right;text-align:right;}div.dokuwiki #bar__bottom{margin-bottom:3px;}div.dokuwiki .bar-tools{display:none;border-left:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;background:#f8f8f8;padding:10px;clear:both;}div.dokuwiki div.meta{clear:both;margin:20px 0px 0px 0px;color:#638c9c;font-size:70%;}div.dokuwiki div.meta div.user{float:left;}div.dokuwiki div.meta div.doc{text-align:right;}*{padding:0;margin:0;}body{font:80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;background-color:#fff;color:#000;}div.dokuwiki div.page{text-align:justify;}div.dokuwiki table{font-size:100%;}div.dokuwiki tr,div.dokuwiki td,div.dokuwiki th{}div.dokuwiki img{border:0;}div.dokuwiki p,div.dokuwiki blockquote,div.dokuwiki table,div.dokuwiki pre{margin:0 0 1.0em 0;}div.dokuwiki hr{border:0px;border-top:1px solid #8cacbb;text-align:center;height:0px;}div.dokuwiki div.nothing{text-align:center;margin:2em;}div.dokuwiki form{border:none;display:inline;}div.dokuwiki label.block{display:block;text-align:right;font-weight:bold;}div.dokuwiki label.simple{display:block;text-align:left;font-weight:normal;}div.dokuwiki label.block input.edit{width:50%;}div.dokuwiki fieldset{width:300px;text-align:center;border:1px solid #8cacbb;padding:0.5em;margin:auto;}div.dokuwiki textarea.edit{font-family:monospace;font-size:14px;color:#000;background-color:#fff;border:1px solid #8cacbb;padding:0.3em 0 0 0.3em;width:100%;}html>body div.dokuwiki textarea.edit{background:#fff url(/docs/wiki/lib/tpl/default/images/inputshadow.png) repeat-x top;}div.dokuwiki input.edit,div.dokuwiki select.edit{font-size:100%;border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;margin:1px;padding:0.20em 0.3em;display:inline;}html>body div.dokuwiki input.edit,html>body div.dokuwiki select.edit{background:#fff url(/docs/wiki/lib/tpl/default/images/inputshadow.png) repeat-x top;}div.dokuwiki select.edit{padding:0.1em 0;}div.dokuwiki input.missing{font-size:100%;border:1px solid #8cacbb;color:#000;background-color:#fcc;vertical-align:middle;margin:1px;padding:0.20em 0.3em;display:inline;}div.dokuwiki textarea.edit[disabled],div.dokuwiki textarea.edit[readonly],div.dokuwiki input.edit[disabled],div.dokuwiki input.edit[readonly],div.dokuwiki input.button[disabled],div.dokuwiki select.edit[disabled]{background-color:#f5f5f5!important;color:#666!important;}div.dokuwiki div.toolbar,div.dokuwiki div#wiki__editbar{margin:2px 0;text-align:left;}div.dokuwiki div#size__ctl{float:right;width:60px;height:2.7em;}div.dokuwiki #size__ctl img{cursor:pointer;}div.dokuwiki div#wiki__editbar div.editButtons{float:left;padding:0 1.0em 0.7em 0;}div.dokuwiki div#wiki__editbar div.summary{float:left;}div.dokuwiki .nowrap{white-space:nowrap;}div.dokuwiki div#draft__status{float:right;color:#638c9c;}div.dokuwiki div.license{padding:0.5em;font-size:90%;text-align:center;}div.dokuwiki form#dw__editform div.license{clear:left;font-size:90%;}div.dokuwiki input.button,div.dokuwiki button.button{border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;text-decoration:none;font-size:100%;cursor:pointer;margin:1px;padding:0.125em 0.4em;}html>body div.dokuwiki input.button,html>body div.dokuwiki button.button{background:#fff url(/docs/wiki/lib/tpl/default/images/buttonshadow.png) repeat-x bottom;}* html div.dokuwiki input.button,* html div.dokuwiki button.button{height:1.8em;}div.dokuwiki div.secedit input.button{border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;text-decoration:none;margin:0;padding:0;font-size:10px;cursor:pointer;float:right;display:inline;}div.dokuwiki div.pagenav{margin:1em 0 0 0;}div.dokuwiki div.pagenav-prev{text-align:right;float:left;width:49%}div.dokuwiki div.pagenav-next{text-align:left;float:right;width:49%}div.dokuwiki a:link,div.dokuwiki a:visited{color:#436976;text-decoration:none;}div.dokuwiki a:hover,div.dokuwiki a:active{color:#000;text-decoration:underline;}div.dokuwiki h1 a{text-decoration:none !important;}div.dokuwiki h2 a,div.dokuwiki h3 a,div.dokuwiki h4 a,div.dokuwiki h5 a,div.dokuwiki a.nolink{color:#000 !important;text-decoration:none !important;}div.dokuwiki a.interwiki{}div.dokuwiki a.media{}div.dokuwiki a.mail{background:transparent url(/docs/wiki/lib/tpl/default/images/mail_icon.gif) 0px 1px no-repeat;padding:1px 0px 1px 16px;}div.dokuwiki a.wikilink2{text-decoration:none !important;border-bottom:dashed 1px #f30 !important;}div.dokuwiki div.preview{background-color:#f5f5f5;margin:0 0 0 2em;padding:4px;border:1px dashed #000;}div.dokuwiki div.breadcrumbs{background:url(http://s0.percona.com/ui-tab-bg.png) -14px left repeat-x;color:#999;font-size:11px;font-style:italic;padding:7px 0 15px 12px;}div.dokuwiki div.breadcrumbs a,div.dokuwiki div.breadcrumbs a:visited{color:#999 !important;border-color:#999 !important;}div.dokuwiki div.breadcrumbs a:hover{color:#d12907 !important;border-color:#d12907 !important;}div.dokuwiki span.user{color:#ccc;font-size:90%;}div.dokuwiki li.minor{color:#666;font-style:italic;}div.dokuwiki img.media{margin:3px;}div.dokuwiki img.medialeft{border:0;float:left;margin:0 1.5em 0 0;}div.dokuwiki img.mediaright{border:0;float:right;margin:0 0 0 1.5em;}div.dokuwiki img.mediacenter{border:0;display:block;margin:0 auto;}div.dokuwiki img.middle{vertical-align:middle;}div.dokuwiki acronym{cursor:help;border-bottom:1px dotted #000;}div.dokuwiki li.open{list-style-image:url(/docs/wiki/lib/tpl/default/images/open.gif);}div.dokuwiki li.closed{list-style-image:url(/docs/wiki/lib/tpl/default/images/closed.gif);}div.dokuwiki blockquote{border-left:2px solid #8cacbb;padding-left:3px;}div.dokuwiki pre{font-size:80%;padding:10px;border:1px dashed #8cacbb;color:#000;overflow:auto;}div.dokuwiki pre.pre{background-color:#f7f9fa;}div.dokuwiki pre.code{background-color:#f7f9fa;}div.dokuwiki pre.file{background-color:#dee7ec;}div.dokuwiki dl.file,div.dokuwiki dl.code{margin-top:2em;margin-bottom:2.5em;}div.dokuwiki dl.file dt,div.dokuwiki dl.code dt{border:1px dashed #8cacbb;display:inline;padding:0.1em 1em;margin-left:2em;}div.dokuwiki dl.code dt a,div.dokuwiki dl.file dt a{color:#000;}div.dokuwiki dl.code dt{background-color:#f7f9fa;border-bottom:1px solid #f7f9fa;}div.dokuwiki dl.file dt{background-color:#dee7ec;border-bottom:1px solid #dee7ec;}div.dokuwiki table.inline{background-color:#fff;border-spacing:0px;border-collapse:collapse;}div.dokuwiki table.inline th{padding:3px;border:1px solid #8cacbb;background-color:#dee7ec;}div.dokuwiki table.inline td{padding:3px;border:1px solid #8cacbb;}#toc{width:258px;font-size:12px;line-height:16px;clear:both;border:1px #e0e0e0 solid;background:#fff url(http://s1.percona.com/ui-tab-bg.png) top left repeat-x;}#toc div.tocheader{text-align:left;font-weight:bold;padding:7px 10px;margin-bottom:2px;font-size:16px;}#toc div.tocheader a,#toc div.tocheader a:visited{color:#000 !important;text-decoration:none !important;}#toc div.tocheader a:hover{color:#d12907 !important;text-decoration:none !important;}#toc span.toc_open,#toc span.toc_close{float:right;display:block;margin:0.4em 3px 0 0;}#toc span.toc_open span,#toc span.toc_close span{display:none;}#toc span.toc_open{margin-top:0.4em;border-top:0.4em solid #000;}#toc span.toc_close{margin-top:0;border-bottom:0.4em solid #000;}#toc #toc__inside{text-align:left;padding:1px 15px 15px 13px;}#toc ul.toc{list-style-type:none;padding-left:0px !important;margin:0;}#toc ul.toc ul{padding-left:15px !important;}#toc ul.toc li{margin:5px 0px !important;}#toc ul.toc li.clear{padding-left:0;}#toc a.toc:link,#toc a.toc:visited{color:#d12907;text-decoration:underline;}#toc a.toc:hover,#toc a.toc:active{color:#712000;text-decoration:underline;}div.dokuwiki table.diff{background-color:#fff;width:100%;}div.dokuwiki td.diff-blockheader{font-weight:bold;}div.dokuwiki table.diff th{border-bottom:1px solid #8cacbb;font-size:110%;width:50%;font-weight:normal;text-align:left;}div.dokuwiki table.diff th a{font-weight:bold;}div.dokuwiki table.diff th span.user{color:#000;font-size:80%;}div.dokuwiki table.diff th span.sum{font-size:80%;font-weight:bold;}div.dokuwiki table.diff th.minor{font-style:italic;}div.dokuwiki table.diff td{font-family:monospace;font-size:100%;}div.dokuwiki td.diff-addedline{background-color:#dfd;}div.dokuwiki td.diff-deletedline{background-color:#ffb;}div.dokuwiki td.diff-context{background-color:#f5f5f5;}div.dokuwiki table.diff td.diff-addedline strong,div.dokuwiki table.diff td.diff-deletedline strong{color:red;}div.dokuwiki div.footnotes{clear:both;border-top:1px solid #8cacbb;padding-left:1em;margin-top:1em;}div.dokuwiki div.fn{font-size:90%;}div.dokuwiki a.fn_bot{font-weight:bold;}div.insitu-footnote{font-size:80%;line-height:1.2em;border:1px solid #8cacbb;background-color:#f7f9fa;text-align:left;padding:4px;max-width:40%;}* html .insitu-footnote pre.code,* html .insitu-footnote pre.file{padding-bottom:18px;}div.dokuwiki .search_result{margin-bottom:6px;padding:0 10px 0 30px;}div.dokuwiki .search_snippet{color:#ccc;font-size:12px;margin-left:20px;}div.dokuwiki .search_sep{color:#000;}div.dokuwiki .search_hit{color:#000;background-color:#ff9;}div.dokuwiki strong.search_hit{font-weight:normal;}div.dokuwiki div.search_quickresult{margin:0 0 15px 30px;padding:0 10px 10px 0;border-bottom:1px dashed #8cacbb;}div.dokuwiki div.search_quickresult h3{margin:0 0 1.0em 0;font-size:1em;font-weight:bold;}div.dokuwiki ul.search_quickhits{margin:0 0 0.5em 1.0em;}div.dokuwiki ul.search_quickhits li{margin:0 1.0em 0 1.0em;float:left;width:30%;}div.dokuwiki div.section_highlight{background-color:#dee7ec;}div.footerinc{text-align:center;}.footerinc a img{opacity:0.5;border:0;}.footerinc a:hover img{opacity:1;}div.dokuwiki div.ajax_qsearch{position:absolute;right:237px;;width:200px;opacity:0.9;display:none;font-size:80%;line-height:1.2em;border:1px solid #8cacbb;background-color:#f7f9fa;text-align:left;padding:4px;}button.toolbutton{background-color:#fff;padding:0px;margin:0 1px 0 0;border:1px solid #8cacbb;cursor:pointer;}html>body button.toolbutton{background:#fff url(/docs/wiki/lib/tpl/default/images/buttonshadow.png) repeat-x bottom;}div.picker{width:250px;border:1px solid #8cacbb;background-color:#dee7ec;}div.pk_hl{width:125px;}button.pickerbutton{padding:0px;margin:0 1px 1px 0;border:0;background-color:transparent;font-size:80%;cursor:pointer;}div.dokuwiki div.img_big{float:left;margin-right:0.5em;}div.dokuwiki dl.img_tags dt{font-weight:bold;background-color:#dee7ec;}div.dokuwiki dl.img_tags dd{background-color:#f5f5f5;}div.dokuwiki div.imagemeta{color:#666;font-size:70%;line-height:95%;}div.dokuwiki div.imagemeta img.thumb{float:left;margin-right:0.1em;}div.dokuwiki h4{border-top:none !important;margin:20px 0px 20px 0px !important;}#media__manager{height:100%;overflow:hidden;}#media__left{width:30%;border-right:solid 1px #8cacbb;height:100%;overflow:auto;position:absolute;left:0;}#media__right{width:69.7%;height:100%;overflow:auto;position:absolute;right:0;}#media__manager h1{margin:0;padding:0;margin-bottom:0.5em;}#media__tree img{float:left;padding:0.5em 0.3em 0 0;}#media__tree ul{list-style-type:none;list-style-image:none;margin-left:1.5em;}#media__tree li{clear:left;list-style-type:none;list-style-image:none;}*+html #media__tree li,* html #media__tree li{border:1px solid #fff;}#media__opts{padding-left:1em;margin-bottom:0.5em;}#media__opts input{float:left;display:block;margin-top:4px;position:absolute;}*+html #media__opts input,* html #media__opts input{position:static;}#media__opts label{display:block;float:left;margin-left:20px;margin-bottom:4px;}*+html #media__opts label,* html #media__opts label{margin-left:10px;}#media__opts br{clear:left;}#media__content img.load{margin:1em auto;}#media__content #scroll__here{border:1px dashed #8cacbb;}#media__content .odd{background-color:#f7f9fa;padding:0.4em;}#media__content .even{padding:0.4em;}#media__content a.mediafile{margin-right:1.5em;font-weight:bold;}#media__content div.detail{padding:0.3em 0 0.3em 2em;}#media__content div.detail div.thumb{float:left;width:130px;text-align:center;margin-right:0.4em;}#media__content img.btn{vertical-align:text-bottom;}#media__content div.example{color:#666;margin-left:1em;}#media__content div.upload{font-size:90%;padding:0 0.5em 0.5em 0.5em;}#media__content form#dw__upload,#media__content div#dw__flashupload{display:block;border-bottom:solid 1px #8cacbb;padding:0 0.5em 1em 0.5em;}#media__content form#dw__upload fieldset{padding:0;margin:0;border:none;width:auto;}#media__content form#dw__upload p{text-align:left;padding:0.25em 0;margin:0;line-height:1.0em;}#media__content form#dw__upload label.check{float:none;width:auto;margin-left:11.5em;}#media__content form.meta{display:block;padding:0 0 1em 0;}#media__content form.meta label{display:block;width:25%;float:left;font-weight:bold;margin-left:1em;clear:left;}#media__content form.meta .edit{font:100% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;float:left;width:70%;padding-right:0;padding-left:0.2em;margin:2px;}#media__content form.meta textarea.edit{height:8em;}#media__content form.meta div.metafield{clear:left;}#media__content form.meta div.buttons{clear:left;margin-left:20%;padding-left:1em;}#media__popup{background-color:#fff;display:none;border:1px solid #8cacbb;position:absolute;width:270px;}#media__popup h1{text-align:center;font-weight:normal;background-color:#dee7ec;height:16px;margin-bottom:5px;font-size:12px;border-bottom:0;}#media__popup p{display:block;line-height:14pt;margin:0.5em;}#media_nolink{padding:4px 0;}#media__popup label{float:left;width:9em;}#media__popup .button{margin-left:auto;margin-right:auto;}#media__popup .btnlbl{text-align:center;}#media__popup .btnlbl input{margin:0 1em;}#media__closeimg{float:right;}#media__linkopts label,#media__nolnk{width:80px;float:left;margin-left:10px;}#media__linkopts label{line-height:20px;}#media__nolnk,#media__linkopts label.long{margin-bottom:8px;line-height:12px;}#media__linkopts label.long{width:150px;float:none;}#media__linkopts br{clear:both;}#media__linkopts select{width:60px;margin-left:10px;}#media__linkopts input.edit{width:50px;margin-left:10px;}#media__linkopts #media__title{width:150px;}#admin__version{clear:left;float:right;color:#666;}.dokuwiki ul.admin_tasks{font-size:115%;float:left;width:40%;list-style-type:none;}.dokuwiki ul.admin_tasks li{line-height:22px;padding-left:35px;margin:1em 0;background:transparent none no-repeat scroll 0 0;text-align:left;}.dokuwiki ul.admin_tasks li div.li{font-weight:bold;}.dokuwiki ul.admin_tasks li.admin_acl{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/acl.png);}.dokuwiki ul.admin_tasks li.admin_usermanager{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/usermanager.png);}.dokuwiki ul.admin_tasks li.admin_plugin{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/plugin.png);}.dokuwiki ul.admin_tasks li.admin_config{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/config.png);}.dokuwiki ul.admin_tasks li.admin_revert{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/revert.png);}.dokuwiki ul.admin_tasks li.admin_popularity{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/popularity.png);}#link__wiz{position:absolute;display:block;z-index:99;width:300px;height:250px;padding:0;margin:0;overflow:hidden;border:1px solid #8cacbb;background-color:#f5f5f5;text-align:center;}#link__wiz_header{background-color:#dee7ec;height:16px;margin-bottom:5px;}#link__wiz_close{cursor:pointer;margin:0;}#link__wiz_result{background-color:#fff;width:293px;height:193px;overflow:auto;border:1px solid #8cacbb;margin:3px auto;text-align:left;}#link__wiz_result div.type_u{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/up.png) 3px 3px no-repeat;}#link__wiz_result div.type_f{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/page.png) 3px 3px no-repeat;}#link__wiz_result div.type_d{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/ns.png) 3px 3px no-repeat;}#link__wiz_result div.even{background-color:#f5f5f5;}#link__wiz_result div.selected{background-color:#dee7ec;}#link__wiz_result span{display:block;color:#666;}.ondrag{cursor:move;opacity:0.8;}form#subscribe__form{display:block;width:300px;text-align:center;}form#subscribe__form fieldset{text-align:left;margin:0.5em 0;}form#subscribe__form label{display:block;margin:0 0.5em 0.5em;} |
2865 | + |
2866 | + |
2867 | + |
2868 | +/*** |
2869 | + * side style buttons |
2870 | +*/ |
2871 | +.a-btn-container { |
2872 | + overflow:hidden; |
2873 | + border-radius:4px; |
2874 | +} |
2875 | +.a-btn, .a-btn-green, .a-btn-red{ |
2876 | + |
2877 | + width: 245px; |
2878 | + background:#f2aa2e; |
2879 | + background:-webkit-gradient(linear,left top,left bottom,color-stop(##f2aa2e,0),color-stop(##c7401e,1)); |
2880 | + background:-webkit-linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
2881 | + background:-moz-linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
2882 | + background:-o-linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
2883 | + background:linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
2884 | + filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2aa2e', endColorstr='#c7401e',GradientType=0 ); |
2885 | + border:1px solid #f5b74e; |
2886 | + border-color:#f5b74e #e5a73e #d6982f; |
2887 | + -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395; |
2888 | + -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395; |
2889 | + box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395; |
2890 | + padding:0px; |
2891 | + height:65px; |
2892 | + display:inline-block; |
2893 | + position:relative; |
2894 | + -webkit-border-radius:4px; |
2895 | + -moz-border-radius:4px; |
2896 | + border-radius:4px; |
2897 | + float:left; |
2898 | + overflow:hidden; |
2899 | + -webkit-transition:all 0.3s linear; |
2900 | + -moz-transition:all 0.3s linear; |
2901 | + -o-transition:all 0.3s linear; |
2902 | + transition:all 0.3s linear; |
2903 | + text-decoration: none !important; |
2904 | +} |
2905 | +.a-btn-green{ |
2906 | + background:#a1de78; |
2907 | + background:-webkit-gradient(linear,left top,left bottom,color-stop(##a1de78,0),color-stop(##a1de78,1)); |
2908 | + background:-webkit-linear-gradient(top, #00e05a 0%, #006127 100%); |
2909 | + background:-moz-linear-gradient(center top , #00e05a 0%, #006127 130%); |
2910 | + background:-o-linear-gradient(top, #00e05a 0%, #006127 100%); |
2911 | + background:linear-gradient(top, #00e05a 0%, #006127 100%); |
2912 | + filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00e05a', endColorstr='#444444',GradientType=0 ); |
2913 | + border:1px solid #f5b74e; |
2914 | + border-color:#00ba4b #009A00 #007A31; |
2915 | + -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F; |
2916 | + -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F; |
2917 | + box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F; |
2918 | +} |
2919 | + |
2920 | +.a-btn-red{ |
2921 | + background:#e31300; |
2922 | + background:-webkit-gradient(linear,left top,left bottom,color-stop(##e31300,0),color-stop(##6b0900,1)); |
2923 | + background:-webkit-linear-gradient(top, #e31300 0%, #6b0900 100%); |
2924 | + background:-moz-linear-gradient(center top , #e31300 0%, #6b0900 130%); |
2925 | + background:-o-linear-gradient(top, #e31300 0%, #6b0900 100%); |
2926 | + background:linear-gradient(top, #e31300 0%, #6b0900 100%); |
2927 | + filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#e31300', endColorstr='#444444',GradientType=0 ); |
2928 | + border:1px solid #ff2d19; |
2929 | + border-color:#e85345 #b00f00 #63241e; |
2930 | + -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c; |
2931 | + -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c; |
2932 | + box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c; |
2933 | +} |
2934 | + |
2935 | + |
2936 | +.a-btn-text{ |
2937 | + padding-left:15px; |
2938 | + padding-top:10px; |
2939 | + display:block; |
2940 | + font-size:18px; |
2941 | + white-space:nowrap; |
2942 | + color: #f5f1ea; |
2943 | + text-shadow:0 1px 0 #000; |
2944 | + -webkit-transition:all 0.3s linear; |
2945 | + -moz-transition:all 0.3s linear; |
2946 | + -o-transition:all 0.3s linear; |
2947 | + transition:all 0.3s linear; |
2948 | + |
2949 | +} |
2950 | +.a-btn-green .a-btn-text { |
2951 | + color: #fff; |
2952 | +} |
2953 | + |
2954 | +.a-btn-slide-text, .a-btn-fixed-slide-text { |
2955 | + position:absolute; |
2956 | + top:35px; |
2957 | + left:0px; |
2958 | + width:auto; |
2959 | + right:52px; |
2960 | + height:0px; |
2961 | + background:#fff; |
2962 | + color:#996633; |
2963 | + font-size:13px; |
2964 | + white-space:nowrap; |
2965 | + font-family:Georgia, serif; |
2966 | + font-style:italic; |
2967 | + text-indent:15px; |
2968 | + overflow:hidden; |
2969 | + line-height:30px; |
2970 | + -webkit-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset; |
2971 | + -moz-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset; |
2972 | + box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset; |
2973 | + -webkit-transition:height 0.3s linear; |
2974 | + -moz-transition:height 0.3s linear; |
2975 | + -o-transition:height 0.3s linear; |
2976 | + transition:height 0.3s linear; |
2977 | +} |
2978 | +.a-btn-fixed-slide-text{ |
2979 | + height: 30px; |
2980 | +} |
2981 | + |
2982 | +.a-btn-icon-right{ |
2983 | + position:absolute; |
2984 | + |
2985 | + right:0px; |
2986 | + top:0px; |
2987 | + height:100%; |
2988 | + width:52px; |
2989 | + border-left:1px solid #f5b74e; |
2990 | + -webkit-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset; |
2991 | + -moz-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset; |
2992 | + box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset; |
2993 | +} |
2994 | +.a-btn-red .a-btn-icon-right { |
2995 | + border-left: 1px solid #fa430c; |
2996 | +} |
2997 | +.a-btn-icon-right span{ |
2998 | + width:38px; |
2999 | + height:38px; |
3000 | + |
3001 | + position:absolute; |
3002 | + left:50%; |
3003 | + top:50%; |
3004 | + margin:-20px 0px 0px -20px; |
3005 | + background:transparent url(/static/images/software-download-white-brdr.png) no-repeat 50% 55%; |
3006 | + -webkit-transition:all 0.3s linear; |
3007 | + -moz-transition:all 0.3s linear; |
3008 | + -o-transition:all 0.3s linear; |
3009 | + transition:all 0.3s linear; |
3010 | + |
3011 | +} |
3012 | +.a-btn-green .a-btn-icon-right span { |
3013 | + background:transparent url(/static/images/software-download-white-brdr-green3.png) no-repeat 50% 55%; |
3014 | +} |
3015 | +.a-btn-red .a-btn-icon-right span { |
3016 | + |
3017 | + background:transparent url(/static/images/software-download-white-brdr-red.png) no-repeat 50% 55%; |
3018 | +} |
3019 | +.a-btn:hover{ |
3020 | + height:65px; |
3021 | + -webkit-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4); |
3022 | + -moz-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4); |
3023 | + box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4); |
3024 | +} |
3025 | +.a-btn:hover .a-btn-text{ |
3026 | + |
3027 | + text-shadow:0 1px 0 #000; |
3028 | + color:#fff; |
3029 | +} |
3030 | +.a-btn:hover .a-btn-slide-text:hover{ |
3031 | + height:30px; |
3032 | +} |
3033 | +.a-btn:hover .a-btn-icon-right span{ |
3034 | + opacity:1; |
3035 | + /** |
3036 | + -webkit-transform:rotate(-45deg); |
3037 | + -moz-transform:rotate(-45deg); |
3038 | + -ms-transform:rotate(-45deg); |
3039 | + -o-transform:rotate(-45deg); |
3040 | + transform:rotate(-45deg); |
3041 | + */ |
3042 | +} |
3043 | +.a-btn:active{ |
3044 | + position:relative; |
3045 | + top:1px; |
3046 | + background:#fec354; |
3047 | + background:-webkit-gradient(linear,left top,left bottom,color-stop(#fec354,0),color-stop(#fecd61,1)); |
3048 | + background:-webkit-linear-gradient(top, #fec354 0%, #fecd61 100%); |
3049 | + background:-moz-linear-gradient(top, #fec354 0%, #fecd61 100%); |
3050 | + background:-o-linear-gradient(top, #fec354 0%, #fecd61 100%); |
3051 | + background:linear-gradient(top, #fec354 0%, #fecd61 100%); |
3052 | + filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fec354', endColorstr='#fecd61',GradientType=0 ); |
3053 | + border-color:#d29a3a #cc9436 #c89133; |
3054 | + text-shadow:0 1px 0 #fee1a0; |
3055 | + -webkit-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e; |
3056 | + -moz-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e; |
3057 | + box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e; |
3058 | +} |
3059 | +.body .section blockquote { |
3060 | + margin-left: 25px; |
3061 | +} |
3062 | |
3063 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js' |
3064 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 1970-01-01 00:00:00 +0000 |
3065 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 2012-05-08 06:39:22 +0000 |
3066 | @@ -0,0 +1,269 @@ |
3067 | +window.jQuery(function($) { |
3068 | + |
3069 | + |
3070 | + |
3071 | +function setCookie(c_name, value, expiredays) |
3072 | +{ |
3073 | + var exdate = new Date(); |
3074 | + exdate.setDate(exdate.getDate() + expiredays); |
3075 | + document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";path=/;expires=" + exdate.toUTCString()); |
3076 | +} |
3077 | + |
3078 | +function getCookie(c_name) |
3079 | +{ |
3080 | + if (document.cookie.length > 0) |
3081 | + { |
3082 | + c_start = document.cookie.indexOf(c_name + "="); |
3083 | + if (c_start != -1) |
3084 | + { |
3085 | + c_start = c_start + c_name.length+1; |
3086 | + c_end = document.cookie.indexOf(";",c_start); |
3087 | + if (c_end == -1) |
3088 | + { |
3089 | + c_end = document.cookie.length; |
3090 | + } |
3091 | + return unescape(document.cookie.substring(c_start, c_end)); |
3092 | + } |
3093 | + } |
3094 | + return ""; |
3095 | +} |
3096 | + |
3097 | + |
3098 | +NAVI = new Object(); |
3099 | + |
3100 | +NAVI.CloseTimer = null; |
3101 | + |
3102 | +NAVI.Open = function ( menu_tag, dir ) |
3103 | +{ |
3104 | + NAVI_CancelTimer(); |
3105 | + NAVI_Close(); |
3106 | + SEARCH_CancelTimer(); |
3107 | + SEARCH_Close(); |
3108 | + if ('h' == dir) |
3109 | + { |
3110 | + return; |
3111 | + } |
3112 | + var pos = $("#navilink-span-"+menu_tag).offset(); |
3113 | + if (dir=='r') |
3114 | + { |
3115 | + $("#navi-dropdown-"+menu_tag).css( { "position": "absolute", "left": (pos.left + ($("#navilink-span-"+menu_tag).width()) + 2 - ($("#navi-dropdown-"+menu_tag).width())) + "px", "top": (pos.top + 32) + "px" } ); |
3116 | + } |
3117 | + else |
3118 | + { |
3119 | + $("#navi-dropdown-"+menu_tag).css( { "position": "absolute", "left": (pos.left) + "px", "top": (pos.top + 32) + "px" } ); |
3120 | + } |
3121 | + $("#navi-dropdown-"+menu_tag).show(); |
3122 | + $("#navilink-span-"+menu_tag).bind('mouseover',NAVI_CancelTimer); |
3123 | + $("#navilink-span-"+menu_tag).bind('mouseout',NAVI_Timer); |
3124 | + $("#navi-dropdown-"+menu_tag).bind('mouseover',NAVI_CancelTimer); |
3125 | + $("#navi-dropdown-"+menu_tag).bind('mouseout',NAVI_Timer); |
3126 | +}; |
3127 | + |
3128 | +function NAVI_Close() |
3129 | +{ |
3130 | + $(".navi-dropdown").hide(); |
3131 | + $("#menu div").unbind('mouseover'); |
3132 | + $(".dropdown").unbind('mouseover'); |
3133 | + $(".dropdown").unbind('mouseout'); |
3134 | + |
3135 | + $("#search-dropdown").hide(); |
3136 | + $("#searchlink-anchor").unbind('mouseover'); |
3137 | + $("#searchlink-anchor").unbind('mouseout'); |
3138 | + $("#search-dropdown").unbind('mouseover'); |
3139 | + $("#search-dropdown").unbind('mouseout'); |
3140 | +} |
3141 | + |
3142 | +function NAVI_CancelTimer() |
3143 | +{ |
3144 | + if (NAVI.CloseTimer!=null) |
3145 | + { |
3146 | + window.clearTimeout(NAVI.CloseTimer); |
3147 | + NAVI.CloseTimer = null; |
3148 | + } |
3149 | +} |
3150 | + |
3151 | +function NAVI_Timer() |
3152 | +{ |
3153 | + if (NAVI.CloseTimer==null) |
3154 | + { |
3155 | + NAVI.CloseTimer = window.setTimeout(NAVI_Close, 300); |
3156 | + } |
3157 | +} |
3158 | + |
3159 | + |
3160 | +SUBNAVI = new Object(); |
3161 | + |
3162 | +SUBNAVI.Open = function ( menu_tag ) |
3163 | +{ |
3164 | + if ($("#sidesubnavi-" + menu_tag + ':hidden').length) |
3165 | + { |
3166 | + $(".sidesubnavi").hide(); |
3167 | + $("#sidesubnavi-"+menu_tag).show(); |
3168 | + return false; |
3169 | + } else { |
3170 | + return true; |
3171 | + } |
3172 | +}; |
3173 | + |
3174 | + |
3175 | +SEARCH = new Object(); |
3176 | + |
3177 | +SEARCH.CloseTimer = null; |
3178 | + |
3179 | +SEARCH.Open = function() |
3180 | +{ |
3181 | + NAVI_CancelTimer(); |
3182 | + NAVI_Close(); |
3183 | + SEARCH_CancelTimer(); |
3184 | + SEARCH_Close(); |
3185 | + var pos = $("#searchlink-anchor").offset(); |
3186 | + $("#search-dropdown").css( { "position": "absolute", "left": (pos.left - ($("#search-dropdown").width()) + 40) + "px", "top": (pos.top + 36) + "px" } ); |
3187 | + $("#search-dropdown").show(); |
3188 | + $("#searchlink-anchor").bind('mouseover',NAVI_CancelTimer); |
3189 | + $("#searchlink-anchor").bind('mouseout',NAVI_Timer); |
3190 | + $("#search-dropdown").bind('mouseover',NAVI_CancelTimer); |
3191 | + $("#search-dropdown").bind('mouseout',NAVI_Timer); |
3192 | + $("#search-input")[0].focus(); |
3193 | +}; |
3194 | + |
3195 | +function SEARCH_Close() |
3196 | +{ |
3197 | + $(".navi-dropdown").hide(); |
3198 | + $("#menu div").unbind('mouseover'); |
3199 | + $(".dropdown").unbind('mouseover'); |
3200 | + $(".dropdown").unbind('mouseout'); |
3201 | + |
3202 | + $("#search-dropdown").hide(); |
3203 | + $("#searchlink-anchor").unbind('mouseover'); |
3204 | + $("#searchlink-anchor").unbind('mouseout'); |
3205 | + $("#search-dropdown").unbind('mouseover'); |
3206 | + $("#search-dropdown").unbind('mouseout'); |
3207 | +} |
3208 | + |
3209 | + |
3210 | +function SEARCH_CancelTimer() |
3211 | +{ |
3212 | + if (SEARCH.CloseTimer!=null) |
3213 | + { |
3214 | + window.clearTimeout(SEARCH.CloseTimer); |
3215 | + SEARCH.CloseTimer = null; |
3216 | + } |
3217 | +} |
3218 | + |
3219 | +function SEARCH_Timer() |
3220 | +{ |
3221 | + if (SEARCH.CloseTimer==null) |
3222 | + { |
3223 | + SEARCH.CloseTimer = window.setTimeout(SEARCH_Close, 300); |
3224 | + } |
3225 | +} |
3226 | + |
3227 | +menuImg1 = new Image(); menuImg1.src = 'http://s1.percona.com/ui-dropdown-header-l.png'; |
3228 | +menuImg2 = new Image(); menuImg2.src = 'http://s2.percona.com/ui-dropdown-header-r.png'; |
3229 | +menuImg3 = new Image(); menuImg3.src = 'http://s3.percona.com/ui-dropdown-header-search.png'; |
3230 | +menuImg4 = new Image(); menuImg4.src = 'http://s0.percona.com/ui-dropdown-bg.png'; |
3231 | +menuImg5 = new Image(); menuImg5.src = 'http://s1.percona.com/ui-dropdown-footer.png'; |
3232 | + |
3233 | + |
3234 | +}); |
3235 | + |
3236 | + |
3237 | +var Percona = { |
3238 | + ssl: false, |
3239 | + host: 'www.percona.com' |
3240 | +}; |
3241 | +/** |
3242 | + * @param string selector jQuery selector string |
3243 | + */ |
3244 | +Percona.getRecentServerVersion = function(selector) |
3245 | +{ |
3246 | + if ('string' != typeof(selector)) |
3247 | + { |
3248 | + alert('Percona.getRecentServerVersion: missed or wrong selector!'); |
3249 | + } |
3250 | + /* Localize jQuery variable */ |
3251 | + var jQuery; |
3252 | + /******** Load jQuery if not present *********/ |
3253 | + if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2') |
3254 | + { |
3255 | + var script_tag = document.createElement('script'); |
3256 | + script_tag.setAttribute("type","text/javascript"); |
3257 | + script_tag.setAttribute('src', 'http' + (Percona.ssl ? 's' : '') + ':/' + '/ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'); |
3258 | + script_tag.onload = scriptLoadHandler; |
3259 | + script_tag.onreadystatechange = function () /* Same thing but for IE */ |
3260 | + { |
3261 | + if (this.readyState == 'complete' || this.readyState == 'loaded') |
3262 | + { |
3263 | + scriptLoadHandler(); |
3264 | + } |
3265 | + }; |
3266 | + /* Try to find the head, otherwise default to the documentElement */ |
3267 | + (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag); |
3268 | + } else { |
3269 | + /* The jQuery version on the window is the one we want to use */ |
3270 | + jQuery = window.jQuery; |
3271 | + main(); |
3272 | + } |
3273 | + var scriptLoadHandler_counter = 0; |
3274 | + /******** Called once jQuery has loaded ******/ |
3275 | + function scriptLoadHandler() |
3276 | + { |
3277 | + if (++scriptLoadHandler_counter > 1) |
3278 | + { |
3279 | + return; |
3280 | + } |
3281 | + /* Restore $ and window.jQuery to their previous values and store the |
3282 | + new jQuery in our local jQuery variable */ |
3283 | + jQuery = window.jQuery.noConflict(true); |
3284 | + /* Call our main function */ |
3285 | + main(jQuery); |
3286 | + } |
3287 | + /******** Our main function ********/ |
3288 | + function main($) |
3289 | + { |
3290 | + var fillRecentServerVersion = function($) |
3291 | + { |
3292 | + if ($(selector).get(0)) |
3293 | + { |
3294 | + $.get('http' + (Percona.ssl ? 's' : '') + ':/' + '/' + Percona.host + '/ajax/server-version/?callback=?', {}, function(json) |
3295 | + { |
3296 | + if ('object' == typeof(json) && 'string' == typeof(json.recentServerVersion)) |
3297 | + { |
3298 | + $(selector).text(' ' + json.recentServerVersion); |
3299 | + } |
3300 | + }, 'jsonp'); |
3301 | + } |
3302 | + }; |
3303 | + $(document).ready(function() |
3304 | + { |
3305 | + fillRecentServerVersion(jQuery); |
3306 | + }); |
3307 | + } |
3308 | +}; |
3309 | + |
3310 | +$(document).ready(function(){ |
3311 | + $(window).bind("resize", resizeWindow); |
3312 | + resizeWindow(); |
3313 | + function resizeWindow() { |
3314 | + var win_w = $(window).width(); |
3315 | + var ribon = $("#support-ribbon"); |
3316 | + if(win_w < 1265){ |
3317 | + if(/mobile/i.test(navigator.userAgent)){ |
3318 | + ribon.hide(); |
3319 | + }else{ |
3320 | + if(ribon.hasClass("vertical")){ |
3321 | + ribon.removeClass("vertical"); |
3322 | + ribon.addClass("horizontal"); |
3323 | + } |
3324 | + ribon.css({"left":'50%', "margin-left": '-'+(ribon.width() / 2)+'px'}); |
3325 | + } |
3326 | + }else{ |
3327 | + if(ribon.hasClass("horizontal")){ |
3328 | + ribon.addClass("vertical"); |
3329 | + ribon.removeClass("horizontal"); |
3330 | + ribon.removeAttr("style"); |
3331 | + } |
3332 | + |
3333 | + } |
3334 | + } |
3335 | +}); |
3336 | \ No newline at end of file |
3337 | |
3338 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png' |
3339 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png 2012-05-08 06:39:22 +0000 differ |
3340 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png' |
3341 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png 2012-05-08 06:39:22 +0000 differ |
3342 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png' |
3343 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png 2012-05-08 06:39:22 +0000 differ |
3344 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js' |
3345 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 1970-01-01 00:00:00 +0000 |
3346 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 2012-05-08 06:39:22 +0000 |
3347 | @@ -0,0 +1,151 @@ |
3348 | +/* |
3349 | + * sidebar.js |
3350 | + * ~~~~~~~~~~ |
3351 | + * |
3352 | + * This script makes the Sphinx sidebar collapsible. |
3353 | + * |
3354 | + * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds |
3355 | + * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton |
3356 | + * used to collapse and expand the sidebar. |
3357 | + * |
3358 | + * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden |
3359 | + * and the width of the sidebar and the margin-left of the document |
3360 | + * are decreased. When the sidebar is expanded the opposite happens. |
3361 | + * This script saves a per-browser/per-session cookie used to |
3362 | + * remember the position of the sidebar among the pages. |
3363 | + * Once the browser is closed the cookie is deleted and the position |
3364 | + * reset to the default (expanded). |
3365 | + * |
3366 | + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
3367 | + * :license: BSD, see LICENSE for details. |
3368 | + * |
3369 | + */ |
3370 | + |
3371 | +$(function() { |
3372 | + // global elements used by the functions. |
3373 | + // the 'sidebarbutton' element is defined as global after its |
3374 | + // creation, in the add_sidebar_button function |
3375 | + var bodywrapper = $('.bodywrapper'); |
3376 | + var sidebar = $('.sphinxsidebar'); |
3377 | + var sidebarwrapper = $('.sphinxsidebarwrapper'); |
3378 | + |
3379 | + // for some reason, the document has no sidebar; do not run into errors |
3380 | + if (!sidebar.length) return; |
3381 | + |
3382 | + // original margin-left of the bodywrapper and width of the sidebar |
3383 | + // with the sidebar expanded |
3384 | + var bw_margin_expanded = bodywrapper.css('margin-left'); |
3385 | + var ssb_width_expanded = sidebar.width(); |
3386 | + |
3387 | + // margin-left of the bodywrapper and width of the sidebar |
3388 | + // with the sidebar collapsed |
3389 | + var bw_margin_collapsed = '.8em'; |
3390 | + var ssb_width_collapsed = '.8em'; |
3391 | + |
3392 | + // colors used by the current theme |
3393 | + var dark_color = $('.related').css('background-color'); |
3394 | + var light_color = $('.document').css('background-color'); |
3395 | + |
3396 | + function sidebar_is_collapsed() { |
3397 | + return sidebarwrapper.is(':not(:visible)'); |
3398 | + } |
3399 | + |
3400 | + function toggle_sidebar() { |
3401 | + if (sidebar_is_collapsed()) |
3402 | + expand_sidebar(); |
3403 | + else |
3404 | + collapse_sidebar(); |
3405 | + } |
3406 | + |
3407 | + function collapse_sidebar() { |
3408 | + sidebarwrapper.hide(); |
3409 | + sidebar.css('width', ssb_width_collapsed); |
3410 | + bodywrapper.css('margin-left', bw_margin_collapsed); |
3411 | + sidebarbutton.css({ |
3412 | + 'margin-left': '0', |
3413 | + 'height': bodywrapper.height() |
3414 | + }); |
3415 | + sidebarbutton.find('span').text('»'); |
3416 | + sidebarbutton.attr('title', _('Expand sidebar')); |
3417 | + document.cookie = 'sidebar=collapsed'; |
3418 | + } |
3419 | + |
3420 | + function expand_sidebar() { |
3421 | + bodywrapper.css('margin-left', bw_margin_expanded); |
3422 | + sidebar.css('width', ssb_width_expanded); |
3423 | + sidebarwrapper.show(); |
3424 | + sidebarbutton.css({ |
3425 | + 'margin-left': ssb_width_expanded-12, |
3426 | + 'height': bodywrapper.height() |
3427 | + }); |
3428 | + sidebarbutton.find('span').text('«'); |
3429 | + sidebarbutton.attr('title', _('Collapse sidebar')); |
3430 | + document.cookie = 'sidebar=expanded'; |
3431 | + } |
3432 | + |
3433 | + function add_sidebar_button() { |
3434 | + sidebarwrapper.css({ |
3435 | + 'float': 'left', |
3436 | + 'margin-right': '0', |
3437 | + 'width': ssb_width_expanded - 28 |
3438 | + }); |
3439 | + // create the button |
3440 | + sidebar.append( |
3441 | + '<div id="sidebarbutton"><span>«</span></div>' |
3442 | + ); |
3443 | + var sidebarbutton = $('#sidebarbutton'); |
3444 | + light_color = sidebarbutton.css('background-color'); |
3445 | + // find the height of the viewport to center the '<<' in the page |
3446 | + var viewport_height; |
3447 | + if (window.innerHeight) |
3448 | + viewport_height = window.innerHeight; |
3449 | + else |
3450 | + viewport_height = $(window).height(); |
3451 | + sidebarbutton.find('span').css({ |
3452 | + 'display': 'block', |
3453 | + 'margin-top': (viewport_height - sidebar.position().top - 20) / 2 |
3454 | + }); |
3455 | + |
3456 | + sidebarbutton.click(toggle_sidebar); |
3457 | + sidebarbutton.attr('title', _('Collapse sidebar')); |
3458 | + sidebarbutton.css({ |
3459 | + 'color': '#FFFFFF', |
3460 | + 'border-left': '1px solid ' + dark_color, |
3461 | + 'font-size': '1.2em', |
3462 | + 'cursor': 'pointer', |
3463 | + 'height': bodywrapper.height(), |
3464 | + 'padding-top': '1px', |
3465 | + 'margin-left': ssb_width_expanded - 12 |
3466 | + }); |
3467 | + |
3468 | + sidebarbutton.hover( |
3469 | + function () { |
3470 | + $(this).css('background-color', dark_color); |
3471 | + }, |
3472 | + function () { |
3473 | + $(this).css('background-color', light_color); |
3474 | + } |
3475 | + ); |
3476 | + } |
3477 | + |
3478 | + function set_position_from_cookie() { |
3479 | + if (!document.cookie) |
3480 | + return; |
3481 | + var items = document.cookie.split(';'); |
3482 | + for(var k=0; k<items.length; k++) { |
3483 | + var key_val = items[k].split('='); |
3484 | + var key = key_val[0]; |
3485 | + if (key == 'sidebar') { |
3486 | + var value = key_val[1]; |
3487 | + if ((value == 'collapsed') && (!sidebar_is_collapsed())) |
3488 | + collapse_sidebar(); |
3489 | + else if ((value == 'expanded') && (sidebar_is_collapsed())) |
3490 | + expand_sidebar(); |
3491 | + } |
3492 | + } |
3493 | + } |
3494 | + |
3495 | + add_sidebar_button(); |
3496 | + var sidebarbutton = $('#sidebarbutton'); |
3497 | + set_position_from_cookie(); |
3498 | +}); |
3499 | |
3500 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png' |
3501 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png 2012-05-08 06:39:22 +0000 differ |
3502 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png' |
3503 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png 2012-05-08 06:39:22 +0000 differ |
3504 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png' |
3505 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png 2012-05-08 06:39:22 +0000 differ |
3506 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png' |
3507 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png 2012-05-08 06:39:22 +0000 differ |
3508 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png' |
3509 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png 2012-05-08 06:39:22 +0000 differ |
3510 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png' |
3511 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png 2012-05-08 06:39:22 +0000 differ |
3512 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png' |
3513 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png 2012-05-08 06:39:22 +0000 differ |
3514 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png' |
3515 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png 2012-05-08 06:39:22 +0000 differ |
3516 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png' |
3517 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png 2012-05-08 06:39:22 +0000 differ |
3518 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png' |
3519 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png 2012-05-08 06:39:22 +0000 differ |
3520 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png' |
3521 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png 2012-05-08 06:39:22 +0000 differ |
3522 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png' |
3523 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png 2012-05-08 06:39:22 +0000 differ |
3524 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png' |
3525 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png 2012-05-08 06:39:22 +0000 differ |
3526 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png' |
3527 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png 2012-05-08 06:39:22 +0000 differ |
3528 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png' |
3529 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png 2012-05-08 06:39:22 +0000 differ |
3530 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png' |
3531 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png 2012-05-08 06:39:22 +0000 differ |
3532 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png' |
3533 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png 2012-05-08 06:39:22 +0000 differ |
3534 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png' |
3535 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png 2012-05-08 06:39:22 +0000 differ |
3536 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png' |
3537 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png 2012-05-08 06:39:22 +0000 differ |
3538 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png' |
3539 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png 2012-05-08 06:39:22 +0000 differ |
3540 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png' |
3541 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png 2012-05-08 06:39:22 +0000 differ |
3542 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png' |
3543 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png 2012-05-08 06:39:22 +0000 differ |
3544 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf' |
3545 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 1970-01-01 00:00:00 +0000 |
3546 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 2012-05-08 06:39:22 +0000 |
3547 | @@ -0,0 +1,32 @@ |
3548 | +[theme] |
3549 | +inherit = default |
3550 | +stylesheet = default.css |
3551 | +pygments_style = sphinx |
3552 | + |
3553 | +[options] |
3554 | +rightsidebar = false |
3555 | +stickysidebar = false |
3556 | +collapsiblesidebar = false |
3557 | +externalrefs = false |
3558 | + |
3559 | +footerbgcolor = #11303d |
3560 | +footertextcolor = #ffffff |
3561 | +sidebarbgcolor = #1c4e63 |
3562 | +sidebarbtncolor = #3c6e83 |
3563 | +sidebartextcolor = #ffffff |
3564 | +sidebarlinkcolor = #98dbcc |
3565 | +relbarbgcolor = #133f52 |
3566 | +relbartextcolor = #ffffff |
3567 | +relbarlinkcolor = #ffffff |
3568 | +bgcolor = #ffffff |
3569 | +textcolor = #000000 |
3570 | +headbgcolor = #f2f2f2 |
3571 | +headtextcolor = #20435c |
3572 | +headlinkcolor = #c60f0f |
3573 | +linkcolor = #355f7c |
3574 | +visitedlinkcolor = #355f7c |
3575 | +codebgcolor = #eeffcc |
3576 | +codetextcolor = #333333 |
3577 | + |
3578 | +bodyfont = sans-serif |
3579 | +headfont = 'Arial', 'Helvetica' sans-serif |
3580 | |
3581 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona_favicon.ico' |
3582 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona_favicon.ico 1970-01-01 00:00:00 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona_favicon.ico 2012-05-08 06:39:22 +0000 differ |
3583 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/release-notes.rst' |
3584 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/release-notes.rst 1970-01-01 00:00:00 +0000 |
3585 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/release-notes.rst 2012-05-08 06:39:22 +0000 |
3586 | @@ -0,0 +1,8 @@ |
3587 | +============================================================ |
3588 | + |Percona| PAM authentication plugin for MySQL Release Notes |
3589 | +============================================================ |
3590 | + |
3591 | +Preview Release |
3592 | +=============== |
3593 | + |
3594 | +Initial public release |
3595 | |
3596 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/m4' |
3597 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/src' |
3598 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/Makefile.am' |
3599 | --- Percona-Server/plugin/percona-pam-for-mysql/src/Makefile.am 1970-01-01 00:00:00 +0000 |
3600 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/Makefile.am 2012-05-08 06:39:22 +0000 |
3601 | @@ -0,0 +1,37 @@ |
3602 | +# (C) 2011 Percona Inc. |
3603 | +# |
3604 | +# This program is free software; you can redistribute it and/or modify |
3605 | +# it under the terms of the GNU General Public License as published by |
3606 | +# the Free Software Foundation; version 2 of the License. |
3607 | +# |
3608 | +# This program is distributed in the hope that it will be useful, |
3609 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3610 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3611 | +# GNU General Public License for more details. |
3612 | +# |
3613 | +# You should have received a copy of the GNU General Public License |
3614 | +# along with this program; if not, write to the Free Software |
3615 | +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
3616 | +# |
3617 | + |
3618 | +plugindir = @PLUGINDIR@ |
3619 | + |
3620 | +plugin_LTLIBRARIES = auth_pam.la auth_pam_compat.la test_auth_pam_client.la dialog.la |
3621 | +plugin_CPPFLAGS = -DMYSQL_DYNAMIC_PLUGIN |
3622 | +plugin_LDFLAGS = -module -avoid-version -shared |
3623 | + |
3624 | +auth_pam_la_SOURCES = auth_pam_common.c auth_pam.c lib_auth_pam_client.h lib_auth_pam_client.c auth_mapping.c |
3625 | +auth_pam_la_CPPFLAGS = $(plugin_CPPFLAGS) |
3626 | +auth_pam_la_LDFLAGS = $(plugin_LDFLAGS) $(AUTH_PAM_LIBS) |
3627 | + |
3628 | +auth_pam_compat_la_SOURCES = auth_pam_common.c auth_pam_compat.c lib_auth_pam_client.h lib_auth_pam_client.c auth_mapping.c |
3629 | +auth_pam_compat_la_CPPFLAGS = $(plugin_CPPFLAGS) |
3630 | +auth_pam_compat_la_LDFLAGS = $(plugin_LDFLAGS) $(AUTH_PAM_LIBS) |
3631 | + |
3632 | +test_auth_pam_client_la_SOURCES = test_auth_pam_client.c \ |
3633 | + lib_auth_pam_client.h lib_auth_pam_client.c |
3634 | +test_auth_pam_client_la_LDFLAGS = $(plugin_LDFLAGS) |
3635 | + |
3636 | +dialog_la_SOURCES = dialog.c |
3637 | +dialog_la_CPPFLAGS = $(plugin_CPPFLAGS) |
3638 | +dialog_la_LDFLAGS = $(plugin_LDFLAGS) $(DIALOG_LIBS) |
3639 | |
3640 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.c' |
3641 | --- Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.c 1970-01-01 00:00:00 +0000 |
3642 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.c 2012-05-08 06:39:22 +0000 |
3643 | @@ -0,0 +1,249 @@ |
3644 | +/* |
3645 | +(C) 2012 Percona Inc. |
3646 | + |
3647 | +This program is free software; you can redistribute it and/or modify |
3648 | +it under the terms of the GNU General Public License as published by |
3649 | +the Free Software Foundation; version 2 of the License. |
3650 | + |
3651 | +This program is distributed in the hope that it will be useful, |
3652 | +but WITHOUT ANY WARRANTY; without even the implied warranty of |
3653 | +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3654 | +GNU General Public License for more details. |
3655 | + |
3656 | +You should have received a copy of the GNU General Public License |
3657 | +along with this program; if not, write to the Free Software |
3658 | +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
3659 | +*/ |
3660 | + |
3661 | +#include "auth_mapping.h" |
3662 | +#include <pwd.h> |
3663 | +#include <grp.h> |
3664 | +#include <string.h> |
3665 | +#include <stdlib.h> |
3666 | +#include <ctype.h> |
3667 | + |
3668 | +#define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) |
3669 | + |
3670 | +/** The maximum length of buffer for storing NSS record. NSS will store in |
3671 | + buffer the whole result of lookup request including user name, |
3672 | + gecos, etc. */ |
3673 | +enum { max_nss_name_len = 10240 }; |
3674 | + |
3675 | +/** Token representation: |
3676 | + token type, string repr, length of token */ |
3677 | +struct token |
3678 | +{ |
3679 | + enum { tok_id, tok_comma, tok_eq, tok_eof } token_type; |
3680 | + const char *token; |
3681 | + int token_len; |
3682 | +}; |
3683 | + |
3684 | +/** Iterator in key-value mapping: |
3685 | + position and length of key, |
3686 | + position and length of value, |
3687 | + current position in string */ |
3688 | +struct mapping_iter { |
3689 | + const char *key; |
3690 | + int key_len; |
3691 | + const char *value; |
3692 | + int value_len; |
3693 | + const char *ptr; |
3694 | +}; |
3695 | + |
3696 | + |
3697 | +/** Lookup NSS database for group name by specified user name. |
3698 | + On sucess user_group returned, otherwise NULL */ |
3699 | +char *lookup_user_group (const char *user_name, |
3700 | + char *user_group, int user_group_len) |
3701 | +{ |
3702 | + struct passwd pwd, *pwd_result; |
3703 | + struct group grp, *grp_result; |
3704 | + char *buf; |
3705 | + int error; |
3706 | + |
3707 | + buf= malloc(max_nss_name_len); |
3708 | + if (buf == NULL) |
3709 | + return NULL; |
3710 | + |
3711 | + error= getpwnam_r(user_name, &pwd, buf, max_nss_name_len, &pwd_result); |
3712 | + if (error != 0 || pwd_result == NULL) |
3713 | + { |
3714 | + free(buf); |
3715 | + return NULL; |
3716 | + } |
3717 | + |
3718 | + error= getgrgid_r(pwd_result->pw_gid, |
3719 | + &grp, buf, max_nss_name_len, &grp_result); |
3720 | + if (error != 0 || grp_result == NULL) |
3721 | + { |
3722 | + free(buf); |
3723 | + return NULL; |
3724 | + } |
3725 | + |
3726 | + strncpy(user_group, grp_result->gr_name, user_group_len); |
3727 | + user_group[user_group_len]= '\0'; |
3728 | + free(buf); |
3729 | + |
3730 | + return user_group; |
3731 | +} |
3732 | + |
3733 | +/** Get next token from buf. Returns new buf position. */ |
3734 | +static const char *get_token(struct token *token, |
3735 | + const char *buf) |
3736 | +{ |
3737 | + const char *ptr= buf; |
3738 | + |
3739 | + while (*ptr && isspace(*ptr)) |
3740 | + ++ptr; |
3741 | + |
3742 | + token->token= ptr; |
3743 | + switch (*ptr) |
3744 | + { |
3745 | + case '\0': |
3746 | + token->token_type= tok_eof; |
3747 | + break; |
3748 | + case ',': |
3749 | + token->token_len= 1; |
3750 | + token->token_type = tok_comma; |
3751 | + ++ptr; |
3752 | + break; |
3753 | + case '=': |
3754 | + token->token_len= 1; |
3755 | + token->token_type = tok_eq; |
3756 | + ++ptr; |
3757 | + break; |
3758 | + default: |
3759 | + token->token_len= 0; |
3760 | + while (*ptr && !isspace(*ptr) && *ptr != ',' && *ptr != '=') |
3761 | + { |
3762 | + ++token->token_len; |
3763 | + ++ptr; |
3764 | + } |
3765 | + token->token_type= tok_id; |
3766 | + } |
3767 | + |
3768 | + return ptr; |
3769 | +} |
3770 | + |
3771 | +/** Create iterator through mapping string. |
3772 | + Initially iterator set to position before first |
3773 | + key-value pair. On success non-NULL pointer returned, otherwise NULL */ |
3774 | +struct mapping_iter *mapping_iter_new(const char *mapping_string) |
3775 | +{ |
3776 | + struct mapping_iter *it= malloc(sizeof(struct mapping_iter)); |
3777 | + struct token token; |
3778 | + if (it != NULL) |
3779 | + { |
3780 | + it->key= NULL; |
3781 | + it->value= NULL; |
3782 | + /* eat up service name and move to (, key = value)* part */ |
3783 | + it->ptr= get_token(&token, mapping_string); |
3784 | + } |
3785 | + return it; |
3786 | +} |
3787 | + |
3788 | +/** Move iterator to next key-value pair. |
3789 | + On success pointer to key position in string returned, |
3790 | + otherwise NULL */ |
3791 | +const char *mapping_iter_next(struct mapping_iter *it) |
3792 | +{ |
3793 | + struct token token[4]; |
3794 | + |
3795 | + /* read next 4 tokens */ |
3796 | + it->ptr= get_token(token + 3, |
3797 | + get_token(token + 2, |
3798 | + get_token(token + 1, |
3799 | + get_token(token, it->ptr)))); |
3800 | + |
3801 | + /* was it ", id = id"? */ |
3802 | + if (!((token[0].token_type == tok_comma) && |
3803 | + (token[1].token_type == tok_id) && |
3804 | + (token[2].token_type == tok_eq) && |
3805 | + (token[3].token_type == tok_id))) |
3806 | + { |
3807 | + /* we got something inconsistent */ |
3808 | + return NULL; |
3809 | + } |
3810 | + |
3811 | + /* set key */ |
3812 | + it->key= token[1].token; |
3813 | + it->key_len= token[1].token_len; |
3814 | + |
3815 | + /* set value */ |
3816 | + it->value= token[3].token; |
3817 | + it->value_len= token[3].token_len; |
3818 | + |
3819 | + return it->key; |
3820 | +} |
3821 | + |
3822 | +/** Finish iteration and release iterator */ |
3823 | +void mapping_iter_free(struct mapping_iter *it) |
3824 | +{ |
3825 | + free(it); |
3826 | +} |
3827 | + |
3828 | +/** Get value by given key. On success value_buf returned, |
3829 | + otherwise NULL */ |
3830 | +char *mapping_get_value(const char *key, char *value_buf, int value_buf_len, |
3831 | + const char *mapping_string) |
3832 | +{ |
3833 | + struct mapping_iter *it= mapping_iter_new(mapping_string); |
3834 | + int key_len= strlen(key); |
3835 | + |
3836 | + if (it == NULL) |
3837 | + return NULL; |
3838 | + |
3839 | + while (mapping_iter_next(it)) |
3840 | + { |
3841 | + if (key_len == it->key_len && strncmp(key, it->key, key_len) == 0) |
3842 | + { |
3843 | + memcpy(value_buf, it->value, MIN(value_buf_len, it->value_len)); |
3844 | + value_buf[MIN(value_buf_len, it->value_len)]= '\0'; |
3845 | + mapping_iter_free(it); |
3846 | + return value_buf; |
3847 | + } |
3848 | + } |
3849 | + mapping_iter_free(it); |
3850 | + |
3851 | + return NULL; |
3852 | +} |
3853 | + |
3854 | +/** Get key in current iterator pos. On success buf returned, |
3855 | + otherwise NULL */ |
3856 | +char *mapping_iter_get_key(struct mapping_iter *it, char *buf, int buf_len) |
3857 | +{ |
3858 | + if (it->key == NULL) |
3859 | + return NULL; |
3860 | + memcpy(buf, it->key, MIN(buf_len, it->key_len)); |
3861 | + buf[MIN(buf_len, it->key_len)]= '\0'; |
3862 | + return buf; |
3863 | +} |
3864 | + |
3865 | +/** Get value in current iterator pos. On success buf returned, |
3866 | + otherwise NULL */ |
3867 | +char *mapping_iter_get_value(struct mapping_iter *it, char *buf, int buf_len) |
3868 | +{ |
3869 | + if (it->value == NULL) |
3870 | + return NULL; |
3871 | + memcpy(buf, it->value, MIN(buf_len, it->value_len)); |
3872 | + buf[MIN(buf_len, it->value_len)]= '\0'; |
3873 | + return buf; |
3874 | +} |
3875 | + |
3876 | +/** Get value by key. On success pointer to service_name |
3877 | + returned, otherwise NULL */ |
3878 | +char *mapping_get_service_name(char *buf, int buf_len, |
3879 | + const char *mapping_string) |
3880 | +{ |
3881 | + struct token token; |
3882 | + |
3883 | + get_token(&token, mapping_string); |
3884 | + if (token.token_type == tok_id) |
3885 | + { |
3886 | + memcpy(buf, token.token, MIN(buf_len, token.token_len)); |
3887 | + buf[MIN(buf_len, token.token_len)]= '\0'; |
3888 | + return buf; |
3889 | + } |
3890 | + |
3891 | + return NULL; |
3892 | +} |
3893 | |
3894 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.h' |
3895 | --- Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.h 1970-01-01 00:00:00 +0000 |
3896 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_mapping.h 2012-05-08 06:39:22 +0000 |
3897 | @@ -0,0 +1,74 @@ |
3898 | +#ifndef AUTH_MAPPING_INCLUDED |
3899 | +#define AUTH_MAPPING_INCLUDED |
3900 | +/* |
3901 | + (C) 2012 Percona Inc. |
3902 | + |
3903 | + This program is free software; you can redistribute it and/or modify |
3904 | + it under the terms of the GNU General Public License as published by |
3905 | + the Free Software Foundation; version 2 of the License. |
3906 | + |
3907 | + This program is distributed in the hope that it will be useful, |
3908 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
3909 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3910 | + GNU General Public License for more details. |
3911 | + |
3912 | + You should have received a copy of the GNU General Public License |
3913 | + along with this program; if not, write to the Free Software |
3914 | + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
3915 | +*/ |
3916 | + |
3917 | +/** |
3918 | + @file |
3919 | + |
3920 | + PAM authentication for MySQL, interface for user mapping. |
3921 | + |
3922 | +*/ |
3923 | + |
3924 | +#ifdef __cplusplus |
3925 | +extern "C" { |
3926 | +#endif |
3927 | + |
3928 | +/** Mapping iterator. It's not exposed outsude */ |
3929 | +struct mapping_iter; |
3930 | + |
3931 | +/** Lookup NSS database for group name by specified user name. |
3932 | + On sucess user_group returned, otherwise NULL */ |
3933 | +char *lookup_user_group (const char *user_name, |
3934 | + char *user_group, int user_group_len); |
3935 | + |
3936 | +/** Create iterator through mapping string. |
3937 | + Initially iterator set to position before first |
3938 | + key-value pair. On success non-NULL pointer returned, otherwise NULL */ |
3939 | +struct mapping_iter *mapping_iter_new(const char *mapping_string); |
3940 | + |
3941 | +/** Move iterator to next key-value pair. |
3942 | + On success pointer to key position in string returned, |
3943 | + otherwise NULL */ |
3944 | +const char *mapping_iter_next(struct mapping_iter *it); |
3945 | + |
3946 | +/** Finish iteration and release iterator */ |
3947 | +void mapping_iter_free(struct mapping_iter *it); |
3948 | + |
3949 | +/** Get key at current iterator position. On success buf returned, |
3950 | + otherwise NULL */ |
3951 | +char *mapping_iter_get_key(struct mapping_iter *it, char *buf, int buf_len); |
3952 | + |
3953 | +/** Get value at current iterator position. On success buf returned, |
3954 | + otherwise NULL */ |
3955 | +char *mapping_iter_get_value(struct mapping_iter *it, char *buf, int buf_len); |
3956 | + |
3957 | +/** Get value by given key. On success value_buf returned, |
3958 | + otherwise NULL */ |
3959 | +char *mapping_get_value(const char *key, char *value_buf, int value_buf_len, |
3960 | + const char *mapping_string); |
3961 | + |
3962 | +/** Get service name for auth_string. On success buf returned, |
3963 | + otherwise NULL */ |
3964 | +char *mapping_get_service_name(char *buf, int buf_len, |
3965 | + const char *mapping_string); |
3966 | + |
3967 | +#ifdef __cplusplus |
3968 | +} |
3969 | +#endif |
3970 | + |
3971 | +#endif |
3972 | |
3973 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam.c' |
3974 | --- Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam.c 1970-01-01 00:00:00 +0000 |
3975 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam.c 2012-05-08 06:39:22 +0000 |
3976 | @@ -0,0 +1,175 @@ |
3977 | +/* |
3978 | +(C) 2012 Percona Inc. |
3979 | + |
3980 | +This program is free software; you can redistribute it and/or modify |
3981 | +it under the terms of the GNU General Public License as published by |
3982 | +the Free Software Foundation; version 2 of the License. |
3983 | + |
3984 | +This program is distributed in the hope that it will be useful, |
3985 | +but WITHOUT ANY WARRANTY; without even the implied warranty of |
3986 | +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3987 | +GNU General Public License for more details. |
3988 | + |
3989 | +You should have received a copy of the GNU General Public License |
3990 | +along with this program; if not, write to the Free Software |
3991 | +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
3992 | +*/ |
3993 | + |
3994 | +/** |
3995 | + @file |
3996 | + |
3997 | + PAM authentication for MySQL, server-side plugin for the |
3998 | + production use. |
3999 | + |
4000 | + A general-purpose PAM authentication plugin for MySQL. Acts as a mediator |
4001 | + between the MySQL server, the MySQL client, and the PAM backend. Dialog plugin |
4002 | + used as client plugin. |
4003 | + |
4004 | + The server plugin requests authentication from the PAM backend, forwards any |
4005 | + requests and messages from the PAM backend over the wire to the client (in |
4006 | + cleartext) and reads back any replies for the backend. |
4007 | + |
4008 | + This plugin does not encrypt the communication channel in any way. If this is |
4009 | + required, a SSL connection should be used. |
4010 | + |
4011 | + To install this plugin, copy the .so file to the plugin directory and do |
4012 | + |
4013 | + INSTALL PLUGIN auth_pam SONAME 'auth_pam.so'; |
4014 | + |
4015 | + To use this plugin for one particular user, specify it at user's creation time |
4016 | + (TODO: tested with localhost only): |
4017 | + |
4018 | + CREATE USER 'username'@'hostname' IDENTIFIED WITH auth_pam; |
4019 | + |
4020 | + Alternatively UPDATE the mysql.user table to set the plugin value for an |
4021 | + existing user. |
4022 | + |
4023 | + Also it is possible to use this plugin to authenticate anonymous users: |
4024 | + |
4025 | + CREATE USER ''@'hostname' IDENTIFIED WITH auth_pam; |
4026 | + |
4027 | +*/ |
4028 | + |
4029 | +#ifdef HAVE_CONFIG_H |
4030 | +#include "config.h" |
4031 | +#endif |
4032 | + |
4033 | +#include "auth_pam_common.h" |
4034 | + |
4035 | +/** The maximum length of buffered PAM messages, i.e. any messages up to the |
4036 | + next PAM reply-requiring message. 10K should be more than enough by order |
4037 | + of magnitude. */ |
4038 | +enum { max_pam_buffered_msg_len = 10240 }; |
4039 | + |
4040 | +struct pam_msg_buf { |
4041 | + unsigned char buf[max_pam_buffered_msg_len]; |
4042 | + unsigned char* ptr; |
4043 | +}; |
4044 | + |
4045 | +static char pam_msg_style_to_char (int pam_msg_style) |
4046 | +{ |
4047 | + /* Magic byte for the dialog plugin, '\2' is defined as ORDINARY_QUESTION |
4048 | + and '\4' as PASSWORD_QUESTION there. */ |
4049 | + return (pam_msg_style == PAM_PROMPT_ECHO_ON) ? '\2' : '\4'; |
4050 | +} |
4051 | + |
4052 | +int auth_pam_client_talk_init(void **talk_data) |
4053 | +{ |
4054 | + struct pam_msg_buf *msg_buf= calloc(1, sizeof(struct pam_msg_buf)); |
4055 | + *talk_data= (void*)msg_buf; |
4056 | + if (msg_buf != NULL) |
4057 | + { |
4058 | + msg_buf->ptr= msg_buf->buf + 1; |
4059 | + return PAM_SUCCESS; |
4060 | + } |
4061 | + return PAM_BUF_ERR; |
4062 | +} |
4063 | + |
4064 | +void auth_pam_client_talk_finalize(void *talk_data) |
4065 | +{ |
4066 | + free(talk_data); |
4067 | +} |
4068 | + |
4069 | +int auth_pam_talk_perform(const struct pam_message *msg, |
4070 | + struct pam_response *resp, |
4071 | + struct pam_conv_data *data, |
4072 | + void *talk_data) |
4073 | +{ |
4074 | + struct pam_msg_buf *msg_buf= (struct pam_msg_buf*)talk_data; |
4075 | + |
4076 | + /* Append the PAM message or prompt to the unsent message buffer */ |
4077 | + if (msg->msg) |
4078 | + { |
4079 | + unsigned char *last_buf_pos = msg_buf->buf + max_pam_buffered_msg_len - 1; |
4080 | + if (msg_buf->ptr + strlen(msg->msg) >= last_buf_pos) |
4081 | + { |
4082 | + /* Cannot happen: the PAM message buffer too small. */ |
4083 | + MY_ASSERT_UNREACHABLE(); |
4084 | + return PAM_CONV_ERR; |
4085 | + } |
4086 | + memcpy(msg_buf->ptr, msg->msg, strlen(msg->msg)); |
4087 | + msg_buf->ptr+= strlen(msg->msg); |
4088 | + *(msg_buf->ptr)++= '\n'; |
4089 | + } |
4090 | + |
4091 | + if (msg->msg_style == PAM_PROMPT_ECHO_OFF |
4092 | + || msg->msg_style == PAM_PROMPT_ECHO_ON) |
4093 | + { |
4094 | + int pkt_len; |
4095 | + unsigned char *pkt; |
4096 | + |
4097 | + msg_buf->buf[0]= pam_msg_style_to_char(msg->msg_style); |
4098 | + |
4099 | + /* Write the message. */ |
4100 | + if (data->vio->write_packet(data->vio, msg_buf->buf, |
4101 | + msg_buf->ptr - msg_buf->buf - 1)) |
4102 | + return PAM_CONV_ERR; |
4103 | + |
4104 | + /* Read the answer */ |
4105 | + if ((pkt_len= data->vio->read_packet(data->vio, &pkt)) |
4106 | + < 0) |
4107 | + return PAM_CONV_ERR; |
4108 | + |
4109 | + resp->resp= malloc(pkt_len + 1); |
4110 | + if (resp->resp == NULL) |
4111 | + return PAM_BUF_ERR; |
4112 | + |
4113 | + strncpy(resp->resp, (char *)pkt, pkt_len); |
4114 | + resp->resp[pkt_len]= '\0'; |
4115 | + |
4116 | + if (msg->msg_style == PAM_PROMPT_ECHO_OFF) |
4117 | + data->info->password_used= PASSWORD_USED_YES; |
4118 | + |
4119 | + msg_buf->ptr= msg_buf->buf + 1; |
4120 | + } |
4121 | + |
4122 | + return PAM_SUCCESS; |
4123 | +} |
4124 | + |
4125 | +static struct st_mysql_auth pam_auth_handler= |
4126 | +{ |
4127 | + MYSQL_AUTHENTICATION_INTERFACE_VERSION, |
4128 | + "dialog", |
4129 | + &authenticate_user_with_pam_server |
4130 | +}; |
4131 | + |
4132 | +mysql_declare_plugin(auth_pam) |
4133 | +{ |
4134 | + MYSQL_AUTHENTICATION_PLUGIN, |
4135 | + &pam_auth_handler, |
4136 | + "auth_pam", |
4137 | + "Percona, Inc.", |
4138 | + "PAM authentication plugin", |
4139 | + PLUGIN_LICENSE_GPL, |
4140 | + NULL, |
4141 | + NULL, |
4142 | + 0x0001, |
4143 | + NULL, |
4144 | + NULL, |
4145 | + NULL |
4146 | +#if MYSQL_PLUGIN_INTERFACE_VERSION >= 0x103 |
4147 | + , |
4148 | + 0 |
4149 | +#endif |
4150 | +} |
4151 | +mysql_declare_plugin_end; |
4152 | |
4153 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.c' |
4154 | --- Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.c 1970-01-01 00:00:00 +0000 |
4155 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.c 2012-05-08 06:39:22 +0000 |
4156 | @@ -0,0 +1,190 @@ |
4157 | +/* |
4158 | +(C) 2011 Percona Inc. |
4159 | + |
4160 | +This program is free software; you can redistribute it and/or modify |
4161 | +it under the terms of the GNU General Public License as published by |
4162 | +the Free Software Foundation; version 2 of the License. |
4163 | + |
4164 | +This program is distributed in the hope that it will be useful, |
4165 | +but WITHOUT ANY WARRANTY; without even the implied warranty of |
4166 | +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4167 | +GNU General Public License for more details. |
4168 | + |
4169 | +You should have received a copy of the GNU General Public License |
4170 | +along with this program; if not, write to the Free Software |
4171 | +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
4172 | +*/ |
4173 | + |
4174 | +#ifdef HAVE_CONFIG_H |
4175 | +#include "config.h" |
4176 | +#endif |
4177 | + |
4178 | +#include "auth_pam_common.h" |
4179 | +#include "auth_mapping.h" |
4180 | + |
4181 | +/* The server plugin */ |
4182 | + |
4183 | +/** The MySQL service name for PAM configuration */ |
4184 | +static const char* service_name_default= "mysqld"; |
4185 | + |
4186 | +static int valid_pam_msg_style (int pam_msg_style) |
4187 | +{ |
4188 | + switch (pam_msg_style) |
4189 | + { |
4190 | + case PAM_PROMPT_ECHO_OFF: |
4191 | + case PAM_PROMPT_ECHO_ON: |
4192 | + case PAM_ERROR_MSG: |
4193 | + case PAM_TEXT_INFO: |
4194 | + return 1; |
4195 | + default: |
4196 | + return 0; |
4197 | + } |
4198 | +} |
4199 | + |
4200 | +/** The maximum length of service name. It shouldn't be too long as it's |
4201 | + filename in pam.d directory also */ |
4202 | +enum { max_pam_service_name_len = 64 }; |
4203 | + |
4204 | +static void free_pam_response (struct pam_response ** resp, int n) |
4205 | +{ |
4206 | + int i; |
4207 | + for (i = 0; i < n; i++) |
4208 | + { |
4209 | + free((*resp)[i].resp); |
4210 | + } |
4211 | + free(*resp); |
4212 | + *resp= NULL; |
4213 | +} |
4214 | + |
4215 | +static int vio_server_conv (int num_msg, const struct pam_message **msg, |
4216 | + struct pam_response ** resp, void *appdata_ptr) |
4217 | +{ |
4218 | + int i; |
4219 | + int error; |
4220 | + void *talk_data; |
4221 | + struct pam_conv_data *data= (struct pam_conv_data *)appdata_ptr; |
4222 | + |
4223 | + if (data == NULL) |
4224 | + { |
4225 | + MY_ASSERT_UNREACHABLE(); |
4226 | + return PAM_CONV_ERR; |
4227 | + } |
4228 | + |
4229 | + *resp = calloc (sizeof (struct pam_response), num_msg); |
4230 | + if (*resp == NULL) |
4231 | + return PAM_BUF_ERR; |
4232 | + |
4233 | + error= auth_pam_client_talk_init(&talk_data); |
4234 | + if (error != PAM_SUCCESS) |
4235 | + { |
4236 | + free_pam_response(resp, 0); |
4237 | + return error; |
4238 | + } |
4239 | + |
4240 | + for (i = 0; i < num_msg; i++) |
4241 | + { |
4242 | + if (!valid_pam_msg_style(msg[i]->msg_style)) |
4243 | + { |
4244 | + auth_pam_client_talk_finalize(talk_data); |
4245 | + free_pam_response(resp, i); |
4246 | + return PAM_CONV_ERR; |
4247 | + } |
4248 | + |
4249 | + error= auth_pam_talk_perform(msg[i], resp[i], data, talk_data); |
4250 | + if (error != PAM_SUCCESS) |
4251 | + { |
4252 | + auth_pam_client_talk_finalize(talk_data); |
4253 | + free_pam_response(resp, i); |
4254 | + return error; |
4255 | + } |
4256 | + } |
4257 | + auth_pam_client_talk_finalize(talk_data); |
4258 | + return PAM_SUCCESS; |
4259 | +} |
4260 | + |
4261 | +int authenticate_user_with_pam_server (MYSQL_PLUGIN_VIO *vio, |
4262 | + MYSQL_SERVER_AUTH_INFO *info) |
4263 | +{ |
4264 | + pam_handle_t *pam_handle; |
4265 | + struct pam_conv_data data= { vio, info }; |
4266 | + struct pam_conv conv_func_info= { &vio_server_conv, &data }; |
4267 | + int error; |
4268 | + char *pam_mapped_user_name; |
4269 | + char user_group[MYSQL_USERNAME_LENGTH]; |
4270 | + char service_name[max_pam_service_name_len]; |
4271 | + |
4272 | + /* Set service name as specified in auth_string. If no auth_string |
4273 | + provided or parsing error occurs, then keep default value */ |
4274 | + strcpy(service_name, service_name_default); |
4275 | + if (info->auth_string) |
4276 | + mapping_get_service_name(service_name, sizeof(service_name), info->auth_string); |
4277 | + |
4278 | + info->password_used= PASSWORD_USED_NO_MENTION; |
4279 | + |
4280 | + error= pam_start(service_name, |
4281 | + info->user_name, |
4282 | + &conv_func_info, &pam_handle); |
4283 | + if (error != PAM_SUCCESS) |
4284 | + return CR_ERROR; |
4285 | + |
4286 | + error= pam_set_item(pam_handle, PAM_RUSER, info->user_name); |
4287 | + if (error != PAM_SUCCESS) |
4288 | + { |
4289 | + pam_end(pam_handle, error); |
4290 | + return CR_ERROR; |
4291 | + } |
4292 | + |
4293 | + error= pam_set_item(pam_handle, PAM_RHOST, info->host_or_ip); |
4294 | + if (error != PAM_SUCCESS) |
4295 | + { |
4296 | + pam_end(pam_handle, error); |
4297 | + return CR_ERROR; |
4298 | + } |
4299 | + |
4300 | + error= pam_authenticate(pam_handle, 0); |
4301 | + if (error != PAM_SUCCESS) |
4302 | + { |
4303 | + pam_end(pam_handle, error); |
4304 | + return CR_ERROR; |
4305 | + } |
4306 | + |
4307 | + error= pam_acct_mgmt(pam_handle, 0); |
4308 | + if (error != PAM_SUCCESS) |
4309 | + { |
4310 | + pam_end(pam_handle, error); |
4311 | + return CR_ERROR; |
4312 | + } |
4313 | + |
4314 | + /* Get the authenticated user name from PAM */ |
4315 | + error= pam_get_item(pam_handle, PAM_USER, (void *)&pam_mapped_user_name); |
4316 | + if (error != PAM_SUCCESS) |
4317 | + { |
4318 | + pam_end(pam_handle, error); |
4319 | + return CR_ERROR; |
4320 | + } |
4321 | + |
4322 | + /* Check if user name from PAM is the same as provided for MySQL. If |
4323 | + different, use the new user name for MySQL authorization and as |
4324 | + CURRENT_USER() value. */ |
4325 | + if (strcmp(info->user_name, pam_mapped_user_name)) |
4326 | + { |
4327 | + strncpy(info->authenticated_as, pam_mapped_user_name, |
4328 | + MYSQL_USERNAME_LENGTH); |
4329 | + info->authenticated_as[MYSQL_USERNAME_LENGTH]= '\0'; |
4330 | + } |
4331 | + |
4332 | + /* If auth_string specified, then lookup user group, |
4333 | + get mapped MySQL user name and use it as CURRENT_USER() value */ |
4334 | + if (info->auth_string && |
4335 | + lookup_user_group(pam_mapped_user_name, user_group, sizeof(user_group))) |
4336 | + { |
4337 | + mapping_get_value(user_group, info->authenticated_as, |
4338 | + MYSQL_USERNAME_LENGTH, info->auth_string); |
4339 | + } |
4340 | + |
4341 | + error= pam_end(pam_handle, error); |
4342 | + if (error != PAM_SUCCESS) |
4343 | + return CR_ERROR; |
4344 | + |
4345 | + return CR_OK; |
4346 | +} |
4347 | |
4348 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h' |
4349 | --- Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 1970-01-01 00:00:00 +0000 |
4350 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 2012-05-08 06:39:22 +0000 |
4351 | @@ -0,0 +1,71 @@ |
4352 | +#ifndef AUTH_PAM_COMMON_INCLUDED |
4353 | +#define AUTH_PAM_COMMON_INCLUDED |
4354 | +/* |
4355 | + (C) 2012 Percona Inc. |
4356 | + |
4357 | + This program is free software; you can redistribute it and/or modify |
4358 | + it under the terms of the GNU General Public License as published by |
4359 | + the Free Software Foundation; version 2 of the License. |
4360 | + |
4361 | + This program is distributed in the hope that it will be useful, |
4362 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
4363 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4364 | + GNU General Public License for more details. |
4365 | + |
4366 | + You should have received a copy of the GNU General Public License |
4367 | + along with this program; if not, write to the Free Software |
4368 | + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
4369 | +*/ |
4370 | + |
4371 | +/** |
4372 | + @file |
4373 | + |
4374 | + PAM authentication for MySQL, common definitions for side plugins. |
4375 | + |
4376 | + For the general description, see the top comment in auth_pam_common.c. |
4377 | +*/ |
4378 | + |
4379 | +/* Define these macros ourselves, so we don't have to include my_global.h and |
4380 | +can compile against unconfigured MySQL source tree. */ |
4381 | +#define STDCALL |
4382 | + |
4383 | +#include <security/pam_appl.h> |
4384 | +#include <security/pam_modules.h> |
4385 | +#include <security/pam_misc.h> |
4386 | + |
4387 | +#include <mysql/plugin.h> |
4388 | +#include <mysql/plugin_auth.h> |
4389 | +#include <mysql/client_plugin.h> |
4390 | + |
4391 | +#include <assert.h> |
4392 | + |
4393 | +#define MY_ASSERT_UNREACHABLE() assert(0) |
4394 | + |
4395 | +#ifdef __cplusplus |
4396 | +extern "C" { |
4397 | +#endif |
4398 | + |
4399 | +struct pam_conv_data { |
4400 | + MYSQL_PLUGIN_VIO *vio; |
4401 | + MYSQL_SERVER_AUTH_INFO *info; |
4402 | +}; |
4403 | + |
4404 | +/** Define following three functions for your specific client plugin */ |
4405 | + |
4406 | +int auth_pam_client_talk_init(void **talk_data); |
4407 | + |
4408 | +int auth_pam_talk_perform(const struct pam_message *msg, |
4409 | + struct pam_response *resp, |
4410 | + struct pam_conv_data *data, |
4411 | + void *talk_data); |
4412 | + |
4413 | +void auth_pam_client_talk_finalize(void *talk_data); |
4414 | + |
4415 | +int authenticate_user_with_pam_server (MYSQL_PLUGIN_VIO *vio, |
4416 | + MYSQL_SERVER_AUTH_INFO *info); |
4417 | + |
4418 | +#ifdef __cplusplus |
4419 | +} |
4420 | +#endif |
4421 | + |
4422 | +#endif |
4423 | |
4424 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_compat.c' |
4425 | --- Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_compat.c 1970-01-01 00:00:00 +0000 |
4426 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_compat.c 2012-05-08 06:39:22 +0000 |
4427 | @@ -0,0 +1,131 @@ |
4428 | +/* |
4429 | +(C) 2012 Percona Inc. |
4430 | + |
4431 | +This program is free software; you can redistribute it and/or modify |
4432 | +it under the terms of the GNU General Public License as published by |
4433 | +the Free Software Foundation; version 2 of the License. |
4434 | + |
4435 | +This program is distributed in the hope that it will be useful, |
4436 | +but WITHOUT ANY WARRANTY; without even the implied warranty of |
4437 | +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4438 | +GNU General Public License for more details. |
4439 | + |
4440 | +You should have received a copy of the GNU General Public License |
4441 | +along with this program; if not, write to the Free Software |
4442 | +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
4443 | +*/ |
4444 | + |
4445 | +/** |
4446 | + @file |
4447 | + |
4448 | + PAM authentication for MySQL, server-side plugin for the |
4449 | + production use. |
4450 | + |
4451 | + Oracle MySQL-compatible plugin. Acts as a mediator |
4452 | + between the MySQL server, the MySQL client, and the PAM backend. |
4453 | + |
4454 | + The server plugin requests authentication from the PAM backend, and reads one |
4455 | + phrase from client plugin. mysql_clear_password plugin used as client plugin. |
4456 | + |
4457 | + This plugin does not encrypt the communication channel in any way. If this is |
4458 | + required, a SSL connection should be used. |
4459 | + |
4460 | + To install this plugin, copy the .so file to the plugin directory and do |
4461 | + |
4462 | + INSTALL PLUGIN auth_pam SONAME 'auth_pam_compat.so'; |
4463 | + |
4464 | + To use this plugin for one particular user, specify it at user's creation time |
4465 | + (TODO: tested with localhost only): |
4466 | + |
4467 | + CREATE USER 'username'@'hostname' IDENTIFIED WITH auth_pam_compat; |
4468 | + |
4469 | + Alternatively UPDATE the mysql.user table to set the plugin value for an |
4470 | + existing user. |
4471 | + |
4472 | + Also it is possible to use this plugin to authenticate anonymous users: |
4473 | + |
4474 | + CREATE USER ''@'hostname' IDENTIFIED WITH auth_pam_compat; |
4475 | + |
4476 | +*/ |
4477 | + |
4478 | +#ifdef HAVE_CONFIG_H |
4479 | +#include "config.h" |
4480 | +#endif |
4481 | + |
4482 | +#include "auth_pam_common.h" |
4483 | + |
4484 | +int auth_pam_client_talk_init(void **talk_data) |
4485 | +{ |
4486 | + int *num_talks= calloc(1, sizeof(int)); |
4487 | + *talk_data= (void*)num_talks; |
4488 | + return (num_talks != NULL) ? PAM_SUCCESS : PAM_BUF_ERR; |
4489 | +} |
4490 | + |
4491 | +void auth_pam_client_talk_finalize(void *talk_data) |
4492 | +{ |
4493 | + free(talk_data); |
4494 | +} |
4495 | + |
4496 | +int auth_pam_talk_perform(const struct pam_message *msg, |
4497 | + struct pam_response *resp, |
4498 | + struct pam_conv_data *data, |
4499 | + void *talk_data) |
4500 | +{ |
4501 | + int pkt_len; |
4502 | + unsigned char *pkt; |
4503 | + int *num_talks= (int*)talk_data; |
4504 | + |
4505 | + if (msg->msg_style == PAM_PROMPT_ECHO_OFF |
4506 | + || msg->msg_style == PAM_PROMPT_ECHO_ON) |
4507 | + { |
4508 | + /* mysql_clear_password plugin has support for only single phrase */ |
4509 | + if (*num_talks > 1) |
4510 | + return PAM_CONV_ERR; |
4511 | + |
4512 | + /* Read the answer */ |
4513 | + if ((pkt_len= data->vio->read_packet(data->vio, &pkt)) |
4514 | + < 0) |
4515 | + return PAM_CONV_ERR; |
4516 | + |
4517 | + resp->resp= malloc(pkt_len + 1); |
4518 | + if (resp->resp == NULL) |
4519 | + return PAM_BUF_ERR; |
4520 | + |
4521 | + strncpy(resp->resp, (char *)pkt, pkt_len); |
4522 | + resp->resp[pkt_len]= '\0'; |
4523 | + |
4524 | + /* we could only guess whether password was used or not */ |
4525 | + data->info->password_used= PASSWORD_USED_NO_MENTION; |
4526 | + ++(*num_talks); |
4527 | + } |
4528 | + |
4529 | + return PAM_SUCCESS; |
4530 | +} |
4531 | + |
4532 | +static struct st_mysql_auth pam_auth_handler= |
4533 | +{ |
4534 | + MYSQL_AUTHENTICATION_INTERFACE_VERSION, |
4535 | + "mysql_clear_password", |
4536 | + &authenticate_user_with_pam_server |
4537 | +}; |
4538 | + |
4539 | +mysql_declare_plugin(auth_pam) |
4540 | +{ |
4541 | + MYSQL_AUTHENTICATION_PLUGIN, |
4542 | + &pam_auth_handler, |
4543 | + "auth_pam_compat", |
4544 | + "Percona, Inc.", |
4545 | + "PAM authentication plugin", |
4546 | + PLUGIN_LICENSE_GPL, |
4547 | + NULL, |
4548 | + NULL, |
4549 | + 0x0001, |
4550 | + NULL, |
4551 | + NULL, |
4552 | + NULL |
4553 | +#if MYSQL_PLUGIN_INTERFACE_VERSION >= 0x103 |
4554 | + , |
4555 | + 0 |
4556 | +#endif |
4557 | +} |
4558 | +mysql_declare_plugin_end; |
4559 | |
4560 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/dialog.c' |
4561 | --- Percona-Server/plugin/percona-pam-for-mysql/src/dialog.c 1970-01-01 00:00:00 +0000 |
4562 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/dialog.c 2012-05-08 06:39:22 +0000 |
4563 | @@ -0,0 +1,351 @@ |
4564 | +/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. |
4565 | + |
4566 | + This program is free software; you can redistribute it and/or |
4567 | + modify it under the terms of the GNU General Public License as |
4568 | + published by the Free Software Foundation; version 2 of the |
4569 | + License. |
4570 | + |
4571 | + This program is distributed in the hope that it will be useful, |
4572 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
4573 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4574 | + GNU General Public License for more details. |
4575 | + |
4576 | + You should have received a copy of the GNU General Public License |
4577 | + along with this program; if not, write to the Free Software |
4578 | + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ |
4579 | + |
4580 | +/** |
4581 | + @file |
4582 | + |
4583 | + dialog client authentication plugin with examples |
4584 | + |
4585 | + dialog is a general purpose client authentication plugin, it simply |
4586 | + asks the user the question, as provided by the server and reports |
4587 | + the answer back to the server. No encryption is involved, |
4588 | + the answers are sent in clear text. |
4589 | + |
4590 | + Two examples are provided: two_questions server plugin, that asks |
4591 | + the password and an "Are you sure?" question with a reply "yes, of course". |
4592 | + It demonstrates the usage of "password" (input is hidden) and "ordinary" |
4593 | + (input can be echoed) questions, and how to mark the last question, |
4594 | + to avoid an extra roundtrip. |
4595 | + |
4596 | + And three_attempts plugin that gives the user three attempts to enter |
4597 | + a correct password. It shows the situation when a number of questions |
4598 | + is not known in advance. |
4599 | +*/ |
4600 | +#if defined (WIN32) && !defined (RTLD_DEFAULT) |
4601 | +# define RTLD_DEFAULT GetModuleHandle(NULL) |
4602 | +#endif |
4603 | + |
4604 | +#include <my_global.h> |
4605 | +#include <mysql.h> |
4606 | +#include <mysql/plugin_auth.h> |
4607 | +#include <mysql/client_plugin.h> |
4608 | +#include <string.h> |
4609 | +#include <stdio.h> |
4610 | +#include <stdlib.h> |
4611 | + |
4612 | +#if !defined (_GNU_SOURCE) |
4613 | +# define _GNU_SOURCE /* for RTLD_DEFAULT */ |
4614 | +#endif |
4615 | + |
4616 | +/** |
4617 | + first byte of the question string is the question "type". |
4618 | + It can be an "ordinary" or a "password" question. |
4619 | + The last bit set marks a last question in the authentication exchange. |
4620 | +*/ |
4621 | +#define ORDINARY_QUESTION "\2" |
4622 | +#define LAST_QUESTION "\3" |
4623 | +#define PASSWORD_QUESTION "\4" |
4624 | +#define LAST_PASSWORD "\5" |
4625 | + |
4626 | +/********************* SERVER SIDE ****************************************/ |
4627 | + |
4628 | +/** |
4629 | + dialog demo with two questions, one password and one, the last, ordinary. |
4630 | +*/ |
4631 | +static int two_questions(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info) |
4632 | +{ |
4633 | + unsigned char *pkt; |
4634 | + int pkt_len; |
4635 | + |
4636 | + /* send a password question */ |
4637 | + if (vio->write_packet(vio, (const unsigned char *) PASSWORD_QUESTION "Password, please:", 18)) |
4638 | + return CR_ERROR; |
4639 | + |
4640 | + /* read the answer */ |
4641 | + if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) |
4642 | + return CR_ERROR; |
4643 | + |
4644 | + info->password_used= PASSWORD_USED_YES; |
4645 | + |
4646 | + /* fail if the password is wrong */ |
4647 | + if (strcmp((const char *) pkt, info->auth_string)) |
4648 | + return CR_ERROR; |
4649 | + |
4650 | + /* send the last, ordinary, question */ |
4651 | + if (vio->write_packet(vio, (const unsigned char *) LAST_QUESTION "Are you sure ?", 15)) |
4652 | + return CR_ERROR; |
4653 | + |
4654 | + /* read the answer */ |
4655 | + if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) |
4656 | + return CR_ERROR; |
4657 | + |
4658 | + /* check the reply */ |
4659 | + return strcmp((const char *) pkt, "yes, of course") ? CR_ERROR : CR_OK; |
4660 | +} |
4661 | + |
4662 | +static struct st_mysql_auth two_handler= |
4663 | +{ |
4664 | + MYSQL_AUTHENTICATION_INTERFACE_VERSION, |
4665 | + "dialog", /* requires dialog client plugin */ |
4666 | + two_questions |
4667 | +}; |
4668 | + |
4669 | +/* dialog demo where the number of questions is not known in advance */ |
4670 | +static int three_attempts(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info) |
4671 | +{ |
4672 | + unsigned char *pkt; |
4673 | + int pkt_len, i; |
4674 | + |
4675 | + for (i= 0; i < 3; i++) |
4676 | + { |
4677 | + /* send the prompt */ |
4678 | + if (vio->write_packet(vio, |
4679 | + (const unsigned char *) PASSWORD_QUESTION "Password, please:", 18)) |
4680 | + return CR_ERROR; |
4681 | + |
4682 | + /* read the password */ |
4683 | + if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) |
4684 | + return CR_ERROR; |
4685 | + |
4686 | + info->password_used= PASSWORD_USED_YES; |
4687 | + |
4688 | + /* |
4689 | + finish, if the password is correct. |
4690 | + note, that we did not mark the prompt packet as "last" |
4691 | + */ |
4692 | + if (strcmp((const char *) pkt, info->auth_string) == 0) |
4693 | + return CR_OK; |
4694 | + } |
4695 | + |
4696 | + return CR_ERROR; |
4697 | +} |
4698 | + |
4699 | +static struct st_mysql_auth three_handler= |
4700 | +{ |
4701 | + MYSQL_AUTHENTICATION_INTERFACE_VERSION, |
4702 | + "dialog", /* requires dialog client plugin */ |
4703 | + three_attempts |
4704 | +}; |
4705 | + |
4706 | +mysql_declare_plugin(dialog) |
4707 | +{ |
4708 | + MYSQL_AUTHENTICATION_PLUGIN, |
4709 | + &two_handler, |
4710 | + "two_questions", |
4711 | + "Sergei Golubchik", |
4712 | + "Dialog plugin demo 1", |
4713 | + PLUGIN_LICENSE_GPL, |
4714 | + NULL, |
4715 | + NULL, |
4716 | + 0x0100, |
4717 | + NULL, |
4718 | + NULL, |
4719 | + NULL, |
4720 | + 0, |
4721 | +}, |
4722 | +{ |
4723 | + MYSQL_AUTHENTICATION_PLUGIN, |
4724 | + &three_handler, |
4725 | + "three_attempts", |
4726 | + "Sergei Golubchik", |
4727 | + "Dialog plugin demo 2", |
4728 | + PLUGIN_LICENSE_GPL, |
4729 | + NULL, |
4730 | + NULL, |
4731 | + 0x0100, |
4732 | + NULL, |
4733 | + NULL, |
4734 | + NULL, |
4735 | + 0, |
4736 | +} |
4737 | +mysql_declare_plugin_end; |
4738 | + |
4739 | +/********************* CLIENT SIDE ***************************************/ |
4740 | +/* |
4741 | + This plugin performs a dialog with the user, asking questions and |
4742 | + reading answers. Depending on the client it may be desirable to do it |
4743 | + using GUI, or console, with or without curses, or read answers |
4744 | + from a smartcard, for example. |
4745 | + |
4746 | + To support all this variety, the dialog plugin has a callback function |
4747 | + "authentication_dialog_ask". If the client has a function of this name |
4748 | + dialog plugin will use it for communication with the user. Otherwise |
4749 | + a default fgets() based implementation will be used. |
4750 | +*/ |
4751 | + |
4752 | +/** |
4753 | + type of the mysql_authentication_dialog_ask function |
4754 | + |
4755 | + @param mysql mysql |
4756 | + @param type type of the input |
4757 | + 1 - ordinary string input |
4758 | + 2 - password string |
4759 | + @param prompt prompt |
4760 | + @param buf a buffer to store the use input |
4761 | + @param buf_len the length of the buffer |
4762 | + |
4763 | + @retval a pointer to the user input string. |
4764 | + It may be equal to 'buf' or to 'mysql->password'. |
4765 | + In all other cases it is assumed to be an allocated |
4766 | + string, and the "dialog" plugin will free() it. |
4767 | +*/ |
4768 | +typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql, |
4769 | + int type, const char *prompt, char *buf, int buf_len); |
4770 | + |
4771 | +static mysql_authentication_dialog_ask_t ask; |
4772 | + |
4773 | +static char *builtin_ask(MYSQL *mysql __attribute__((unused)), |
4774 | + int type __attribute__((unused)), |
4775 | + const char *prompt, |
4776 | + char *buf, int buf_len) |
4777 | +{ |
4778 | + fputs(prompt, stdout); |
4779 | + fputc(' ', stdout); |
4780 | + |
4781 | + if (type == 2) /* password */ |
4782 | + { |
4783 | + char *password; |
4784 | + password= get_tty_password(""); |
4785 | + strncpy(buf, password, buf_len-1); |
4786 | + buf[buf_len-1]= 0; |
4787 | + free(password); |
4788 | + } |
4789 | + else |
4790 | + { |
4791 | + if (!fgets(buf, buf_len-1, stdin)) |
4792 | + buf[0]= 0; |
4793 | + else |
4794 | + { |
4795 | + int len= strlen(buf); |
4796 | + if (len && buf[len-1] == '\n') |
4797 | + buf[len-1]= 0; |
4798 | + } |
4799 | + } |
4800 | + |
4801 | + return buf; |
4802 | +} |
4803 | + |
4804 | +/** |
4805 | + The main function of the dialog plugin. |
4806 | + |
4807 | + Read the prompt, ask the question, send the reply, repeat until |
4808 | + the server is satisfied. |
4809 | + |
4810 | + @note |
4811 | + 1. this plugin shows how a client authentication plugin |
4812 | + may read a MySQL protocol OK packet internally - which is important |
4813 | + where a number of packets is not known in advance. |
4814 | + 2. the first byte of the prompt is special. it is not |
4815 | + shown to the user, but signals whether it is the last question |
4816 | + (prompt[0] & 1 == 1) or not last (prompt[0] & 1 == 0), |
4817 | + and whether the input is a password (not echoed). |
4818 | + 3. the prompt is expected to be sent zero-terminated |
4819 | +*/ |
4820 | +static int perform_dialog(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) |
4821 | +{ |
4822 | + unsigned char *pkt, cmd= 0; |
4823 | + int pkt_len, res; |
4824 | + char reply_buf[1024], *reply; |
4825 | + int first = 1; |
4826 | + |
4827 | + do |
4828 | + { |
4829 | + /* read the prompt */ |
4830 | + pkt_len= vio->read_packet(vio, &pkt); |
4831 | + if (pkt_len < 0) |
4832 | + return CR_ERROR; |
4833 | + |
4834 | + if (pkt == 0 && first) |
4835 | + { |
4836 | + /* |
4837 | + in mysql_change_user() the client sends the first packet, so |
4838 | + the first vio->read_packet() does nothing (pkt == 0). |
4839 | + |
4840 | + We send the "password", assuming the client knows what it's doing. |
4841 | + (in other words, the dialog plugin should be only set as a default |
4842 | + authentication plugin on the client if the first question |
4843 | + asks for a password - which will be sent in clear text, by the way) |
4844 | + */ |
4845 | + reply= mysql->passwd; |
4846 | + } |
4847 | + else |
4848 | + { |
4849 | + cmd= *pkt++; |
4850 | + |
4851 | + /* is it MySQL protocol packet ? */ |
4852 | + if (cmd == 0 || cmd == 254) |
4853 | + return CR_OK_HANDSHAKE_COMPLETE; /* yes. we're done */ |
4854 | + |
4855 | + /* |
4856 | + asking for a password in the first packet mean mysql->password, if it's set |
4857 | + otherwise we ask the user and read the reply |
4858 | + */ |
4859 | + if ((cmd >> 1) == 2 && first && mysql->passwd[0]) |
4860 | + reply= mysql->passwd; |
4861 | + else |
4862 | + reply= ask(mysql, cmd >> 1, (const char *) pkt, |
4863 | + reply_buf, sizeof(reply_buf)); |
4864 | + if (!reply) |
4865 | + return CR_ERROR; |
4866 | + } |
4867 | + /* send the reply to the server */ |
4868 | + res= vio->write_packet(vio, (const unsigned char *) reply, |
4869 | + strlen(reply)+1); |
4870 | + |
4871 | + if (reply != mysql->passwd && reply != reply_buf) |
4872 | + free(reply); |
4873 | + |
4874 | + if (res) |
4875 | + return CR_ERROR; |
4876 | + |
4877 | + /* repeat unless it was the last question */ |
4878 | + first= 0; |
4879 | + } while ((cmd & 1) != 1); |
4880 | + |
4881 | + /* the job of reading the ok/error packet is left to the server */ |
4882 | + return CR_OK; |
4883 | +} |
4884 | + |
4885 | +/** |
4886 | + initialization function of the dialog plugin |
4887 | + |
4888 | + Pick up the client's authentication_dialog_ask() function, if exists, |
4889 | + or fall back to the default implementation. |
4890 | +*/ |
4891 | + |
4892 | +static int init_dialog(char *unused1 __attribute__((unused)), |
4893 | + size_t unused2 __attribute__((unused)), |
4894 | + int unused3 __attribute__((unused)), |
4895 | + va_list unused4 __attribute__((unused))) |
4896 | +{ |
4897 | + void *sym= dlsym(RTLD_DEFAULT, "mysql_authentication_dialog_ask"); |
4898 | + ask= sym ? (mysql_authentication_dialog_ask_t) sym : builtin_ask; |
4899 | + return 0; |
4900 | +} |
4901 | + |
4902 | +mysql_declare_client_plugin(AUTHENTICATION) |
4903 | + "dialog", |
4904 | + "Sergei Golubchik", |
4905 | + "Dialog Client Authentication Plugin", |
4906 | + {0,1,0}, |
4907 | + "GPL", |
4908 | + NULL, |
4909 | + init_dialog, |
4910 | + NULL, |
4911 | + NULL, |
4912 | + perform_dialog |
4913 | +mysql_end_client_plugin; |
4914 | + |
4915 | |
4916 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/src/lib_auth_pam_client.c' |
4917 | --- Percona-Server/plugin/percona-pam-for-mysql/src/lib_auth_pam_client.c 1970-01-01 00:00:00 +0000 |
4918 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/lib_auth_pam_client.c 2012-05-08 06:39:22 +0000 |
4919 | @@ -0,0 +1,80 @@ |
4920 | +/* |
4921 | + (C) 2011 Percona Inc. |
4922 | + |
4923 | + This program is free software; you can redistribute it and/or modify |
4924 | + it under the terms of the GNU General Public License as published by |
4925 | + the Free Software Foundation; version 2 of the License. |
4926 | + |
4927 | + This program is distributed in the hope that it will be useful, |
4928 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
4929 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4930 | + GNU General Public License for more details. |
4931 | + |
4932 | + You should have received a copy of the GNU General Public License |
4933 | + along with this program; if not, write to the Free Software |
4934 | + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
4935 | +*/ |
4936 | + |
4937 | +/** |
4938 | + @file |
4939 | + |
4940 | + PAM authentication for MySQL, common code for client-side plugins. |
4941 | + |
4942 | + For the general description, see the top comment in auth_pam.c. |
4943 | +*/ |
4944 | +#ifdef HAVE_CONFIG_H |
4945 | +#include "config.h" |
4946 | +#endif |
4947 | + |
4948 | +#include "lib_auth_pam_client.h" |
4949 | + |
4950 | +#include <assert.h> |
4951 | +#include <string.h> |
4952 | + |
4953 | +#define MY_ASSERT_UNREACHABLE() assert(0) |
4954 | + |
4955 | +int authenticate_user_with_pam_client_common (MYSQL_PLUGIN_VIO *vio, |
4956 | + struct st_mysql *mysql __attribute__((unused)), |
4957 | + prompt_fn echoless_prompt_fn, |
4958 | + prompt_fn echo_prompt_fn, |
4959 | + info_fn show_error_fn, |
4960 | + info_fn show_info_fn) |
4961 | +{ |
4962 | + do { |
4963 | + char *buf; |
4964 | + int pkt_len; |
4965 | + |
4966 | + if ((pkt_len= vio->read_packet(vio, (unsigned char **)&buf)) < 0) |
4967 | + return CR_ERROR; |
4968 | + |
4969 | + /* The first byte is the message type, followed by the message itself. */ |
4970 | + |
4971 | + if (buf[0] == '\2' || buf[0] == '\3') |
4972 | + { |
4973 | + /* '\2' - PAM_PROMPT_ECHO_OFF, '\3' - PAM_PROMPT_ECHO_ON */ |
4974 | + char *reply = (buf[0] == '\2') |
4975 | + ? echoless_prompt_fn(&buf[1]) : echo_prompt_fn(&buf[1]); |
4976 | + if (!reply) |
4977 | + return CR_ERROR; |
4978 | + if (vio->write_packet(vio, (unsigned char *)reply, strlen(reply) + 1)) |
4979 | + { |
4980 | + free(reply); |
4981 | + return CR_ERROR; |
4982 | + } |
4983 | + free(reply); |
4984 | + } |
4985 | + else if (buf[0] == '\4') /* PAM_ERROR_MSG */ |
4986 | + show_error_fn(&buf[1]); |
4987 | + else if (buf[0] == '\5') /* PAM_TEXT_INFO */ |
4988 | + show_info_fn(&buf[1]); |
4989 | + else if (buf[0] == '\0') /* end-of-authorization */ |
4990 | + return CR_OK; |
4991 | + else |
4992 | + return CR_ERROR; /* Unknown! */ |
4993 | + } |
4994 | + while (1); |
4995 | + |
4996 | + /* Should not come here */ |
4997 | + MY_ASSERT_UNREACHABLE(); |
4998 | + return CR_ERROR; |
4999 | +} |
5000 |
The diff has been truncated for viewing.
http:// jenkins. percona. com/job/ percona- server- 5.5-param/ 356/