Кът на програмиста...

За коментари и излияния от всякакъв род, число, спрежение и залог

Moderator: Moridin

User avatar
Xellos
Moderator
Posts: 20429
Joined: Fri Apr 02, 2004 10:08 pm

Post by Xellos » Wed Jun 11, 2008 7:46 pm

Интересно ми е дали е така кръстено, защото е насочено към предимно мъжка аудитория или просто е рекламен тъпизъм.

:roll:

http://www.viruswoman.com/us/index.php
„Ние можещите, водени от незнаещите, вършим невъзможното за кефа на неблагодарните. И сме направили толкова много, с толкова малко, за толкова кратко време, че можем да правим всичко от нищо. ... За мен най-лошото в България е чудесното наслаждение, което тук имат хората да се преследват един друг и да развалят един другиму работата.”

User avatar
Roamer
Ascendent
Posts: 4895
Joined: Wed Jan 03, 2007 5:25 pm
Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
Contact:

Post by Roamer » Fri Jun 13, 2008 11:32 pm

Мдаааа... MySQL-ски потребители, или "тука има, тука нема!" :mrgreen:

Поредният случай, в който се убеждавам, че не трябва да разрешавам на близките си приятели да ползват тази бледа имитация на сървър за бази данни :) Днес в един момент установих, че на един от сървърите ми има база данни, към която има потребител, на когото НЕ МОГА да сменя паролата, защото MySQL сървърът НЕ ГО НАМИРА в списъка си от акаунти :)

Такааа... започваме сесията:
roam's console wrote:Script started on Fri Jun 13 23:08:38 2008
Setting up interactive shell params..
[roam@straylight ~]$ mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.0.51a FreeBSD port: mysql-server-5.0.51a

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Ако някой се интересува, ето пълните настройки на сървъра:
Spoiler: show
The MySQL server wrote:mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.51a, for portbld-freebsd6.3 (i386) using 5.2

Connection id: 38
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: /usr/bin/less
Using outfile: ''
Using delimiter: ;
Server version: 5.0.51a FreeBSD port: mysql-server-5.0.51a
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: cp1251
Db characterset: cp1251
Client characterset: cp1251
Conn. characterset: cp1251
UNIX socket: /tmp/mysql.sock
Uptime: 11 hours 52 min 46 sec

Threads: 1 Questions: 190 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 5 Queries per second avg: 0.004
--------------
Такаааа... и забавленията започват :) Я да видим какво мисли сървърът за потребителя "testowa" (уф, не питайте, имаме си и ние едни програмисти и едни QA-и, не си е работа :))...
The MySQL server wrote:mysql> SHOW GRANTS FOR 'testowa'@'%';
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for testowa@% |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'testowa'@'%' IDENTIFIED BY PASSWORD '18a2f9611fa3f604' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON `vily`.* TO 'testowa'@'%' |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Аааа-ха. Значи ако има акаунт "testowa", той има право да си играе с две от базите. Я да видим имаме ли изобщо такъв акаунт? (в спойлер, че редът със заглавието е малко дългичък)
Spoiler: show
The MySQL server wrote:mysql> SELECT * FROM mysql.user WHERE user = 'testowa';
+------+---------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |
+------+---------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
| % | testowa | 18a2f9611fa3f604 | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 |
+------+---------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+
1 row in set (0.00 sec)
Имаме нещо такова, да.

Следващите две-три заявки може да ви се видят малко странни ("откъде ли пък му хрумна да прави *такива* неща?"), но потърпете, смисъл има :) Я да видим все пак *точно* откъде може да се върже някой с този акаунт?
The MySQL server wrote:mysql> SELECT Host, User FROM mysql.user WHERE User = 'testowa';
+------+---------+
| Host | User |
+------+---------+
| % | testowa |
+------+---------+
1 row in set (0.00 sec)

mysql> SELECT Host = '%', User FROM mysql.user WHERE User = 'testowa';
+------------+---------+
| Host = '%' | User |
+------------+---------+
| 1 | testowa |
+------------+---------+
1 row in set (0.00 sec)
"Aaaaand now, ladies and gentlemen, the moment you've all been waiting for!" В таблицата mysql.user има ред, в който User = "testowa", и за този ред изразът Host = "%" има стойност 1, демек верно, истина ти казвам! И тогава...

...тогава...

...тогава КАКВО, ПО ДЯВОЛИТЕ, ЗНАЧИ ТОВА?!
The MySQL server wrote:mysql> SELECT Host = '%', User FROM mysql.user WHERE User = 'testowa' AND Host = '%';
Empty set (0.00 sec)
:shock: :shock: :shock: :shock: :shock:

:dash:

И, да, заявката, от която тръгна всичко:
The MySQL server wrote:mysql> SET PASSWORD FOR 'testowa'@'%' = PASSWORD('foo');
ERROR 1133 (42000): Can't find any matching row in the user table
:shock: :twisted: :shock: :< :shock:

Ами... това беше. Сървърът си играе с акаунтите на "тука има, тука нема". И, да, ако се чудите, този акаунт *може* да се свърже със сървъра с досегашната си парола. И, не, НЕ МОЖАХ да пресъздам такава ситуация с новосъздадена база и нов акаунт за нея. Нямам представа точно как се е стигнало дотук, но самият факт, че *може* да се стигне до ситуация, в която потребител може да се свърже със сървъра, а администраторът НЕ МОЖЕ да му смени паролата... ами, как да ви кажа, не ми харесва :)

И, да, знам, че мога да направя някоя щуротия като "UPDATE mysql.user SET `Password` = PASSWORD('foo') WHERE User = 'testowa' AND Host LIKE '_'; FLUSH PRIVILEGES;"... ама... как да ви кажа... ЗАЩО Е НУЖНО?! :)
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.

User avatar
Moridin
Global Moderator
Posts: 19290
Joined: Fri Dec 19, 2003 10:21 pm
Location: On the other side
Contact:

Post by Moridin » Sat Jun 14, 2008 12:09 am

Хм, дали причината не е, че по някакви неведоми съображения mysql смята точно ТОЗИ конкретен знак (%) за нещо специално при сравненията на стрингове, дори когато не е с LIKE? В смисъл.. по един начин да го смята при булевата оценка и по друг при изключването на редове, знам ли.

Иначе забавно индийд
This is it. Ground zero.

User avatar
Roamer
Ascendent
Posts: 4895
Joined: Wed Jan 03, 2007 5:25 pm
Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
Contact:

Post by Roamer » Sat Jun 14, 2008 12:55 am

Всъщност ситуацията в крайна сметка беше още по-забавна, свързана и с леко неверни данни върху диска заради не-съвсем-добре преминала проверка на файловите системи след идиотско изпълнение с UPS-и :) (мня, това не беше в големия datacenter на TPN, там само едно изпълнение с UPS-и са имали миналата година, ама още държи влага на всички, които си го спомнят :)) Та в крайна сметка MySQL сървърът не е по-черен от дявола, не само той е виновен, ама... като са му в ненормално състояние базите, като има несъответствия в рамките и на една-единствена таблица в системната схема, той що изобщо пали бре?... Грррррф.
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.

User avatar
The Dragon
Elder God
Posts: 9062
Joined: Wed Jan 14, 2004 9:03 pm

Post by The Dragon » Sat Jun 14, 2008 1:54 am

Бтв - нали знаеш че % не включва localhost, както в безкрайната си мъдрост са го решили господата от MySQL ?

А с това се забавлявам последните 2-3 дни ... Пича рути :)

http://linuxhaters.blogspot.com/

Днес ми е рекорд за годината - 4 хилки код :)

А се оказа че симпатягите от моно заради малоумния GC който използват той не работи добре когато се създават много бързо много малки обеки - крашва като стой та гледай с фрагментран heap. Разбира се под .NET такива проблеми няма. Крайния резултат - брой си нишките внимателно при асинхронно IO. Май го закрепих ама е гнуслярщина ...
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.

User avatar
termit
Jaghut Tyrant
Posts: 1758
Joined: Thu Jan 15, 2004 5:04 pm

Post by termit » Sat Jun 14, 2008 9:56 am

Този блог кефи, ако и да съм по-скоро от групата на Линукс феновете. Донякъде пича дразни, прекалено е брутален и много простее, но май разните върли фенбойчета са си заслужили това отношение. Иначе определено има мнения за простотиите в Линукс, с които съм мнооого съгласен.
Elves dig rocket launchers.

User avatar
thunder
Forsaken
Posts: 3376
Joined: Wed Jan 21, 2004 2:18 pm
Location: София

Post by thunder » Sat Jun 14, 2008 10:29 am

Аха :) и аз го чета сега, забавен е :)
Scalpel. Sponge. Magic Wand!

User avatar
Roamer
Ascendent
Posts: 4895
Joined: Wed Jan 03, 2007 5:25 pm
Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
Contact:

Post by Roamer » Wed Jun 18, 2008 6:47 pm

Мдаааа... изтрещял съм. Току-що установих, че преди три часа съм написал следните редове код:

Code: Select all

for (i = 0; i < wrapcnt; i++)
  if (...)
    break;
if (i == wrapcnt)
  err(...);
...
...
for (i = 0; i < wrap[i].argcnt; i++)
  nargv[i + 1] = wrap[i].args[i];
(ако не ви се виждат твърде странни, пребройте променливите, които ползвам за индексиране на циклите...)

В моя защита държа да отбележа, че горните две парчета код бяха написани в градинка до автосервиз, и че упоритото рециклиране и пестене на променливи вероятно ми е било внушено от рошавата немска овчарка, която пазеше дворчето на сервиза и се правеше, че не ми обръща внимание!
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.

User avatar
The Dragon
Elder God
Posts: 9062
Joined: Wed Jan 14, 2004 9:03 pm

Post by The Dragon » Wed Jun 18, 2008 6:50 pm

Текста който форума на бард ми върна преди малко
ERROR:
SQL: SELECT COUNT(*) AS cnt FROM book_comments WHERE name = 'Daniel' AND city = 'София' AND email = '' AND comment = 'Не знам Бароу дали обича константата на финната структутра или просто и го казва за да я вкара в кревата, но цикли основно за нея през цялата книга. Както и за антропния прицип. Интересна е несъмнено, но като цяло новата информация в нея е малко, но е по-сложна от entry level книга. Цели се в някаква много странна ниша от читатели.' AND errors = '
допуска се само текст на кирилица!' AND dateposted = '2008-06-18' AND bid = '1086' AND approved = 'Y'
Unknown column 'errors' in 'where clause'
Изкушавам се да напиша като коментар TRUNCATE TABLE book_comments;.
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.

User avatar
Roamer
Ascendent
Posts: 4895
Joined: Wed Jan 03, 2007 5:25 pm
Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
Contact:

Post by Roamer » Wed Jun 18, 2008 6:54 pm

Е, сега, това не ми прилича на SQL injection :) По-скоро е просто неправилно протекъл процес на обновяване на работещо приложение - "дай новия сорс... мдам, дай новия сорс... мдам, и тука новия сорс... ааааа, ма то и промени в базата ли имало?! Уф, добре че са тия клиенти, че да ни подсетят!" :?

(мдам, усмивката е крива, защото горното е донякъде от личен опит :))
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.

User avatar
The Dragon
Elder God
Posts: 9062
Joined: Wed Jan 14, 2004 9:03 pm

Post by The Dragon » Wed Jun 18, 2008 7:03 pm

Roamer wrote:Е, сега, това не ми прилича на SQL injection :) По-скоро е просто неправилно протекъл процес на обновяване на работещо приложение - "дай новия сорс... мдам, дай новия сорс... мдам, и тука новия сорс... ааааа, ма то и промени в базата ли имало?! Уф, добре че са тия клиенти, че да ни подсетят!" :?

(мдам, усмивката е крива, защото горното е донякъде от личен опит :))
А моя емпиричен показва, че сайтове които връщат като грешка части от SQL заявките си, обикновенно не са много добре защитени и от SQL injection. Да двете нямат нищо общо, но ... . Пък и става дума за бард ...
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.

User avatar
thunder
Forsaken
Posts: 3376
Joined: Wed Jan 21, 2004 2:18 pm
Location: София

Post by thunder » Wed Jun 18, 2008 8:11 pm

Термита да постне какво е открил в проекта си днес :)

inspire-нат от него аз се поразрових из нашия днес и на 4 места открих код от вида:

Code: Select all

if (блахблах > нещоси) {

направи нещо

} else {

направи същото нещо от if частта

}
при един от случаите имаше коментар: "do not use else if in this method if you value your life" :)
Scalpel. Sponge. Magic Wand!

User avatar
The Dragon
Elder God
Posts: 9062
Joined: Wed Jan 14, 2004 9:03 pm

Post by The Dragon » Wed Jun 18, 2008 8:23 pm

thunder wrote:Термита да постне какво е открил в проекта си днес :)

inspire-нат от него аз се поразрових из нашия днес и на 4 места открих код от вида:

Code: Select all

if (блахблах > нещоси) {

направи нещо

} else {

направи същото нещо от if частта

}
при един от случаите имаше коментар: "do not use else if in this method if you value your life" :)
Е не е готино. Виж ако беше if(true) :0
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.

User avatar
termit
Jaghut Tyrant
Posts: 1758
Joined: Thu Jan 15, 2004 5:04 pm

Post by termit » Thu Jun 19, 2008 10:53 am

Мдаа, това си заслужава пускането. В интерес на истината говорих с колегата, който го е писал, и наистина се налага да е така. Така че това е WTF на ниво дизайн, над който за съжаление колегата не е имал контрол, но все пак си струва да се види.
Behold the power of Java!

public class ControlFrameView extends Canvas implements FocusListener, PaintListener, IPropertyChangeListener,
MouseListener, SelectionListener, DisposeListener, ICopyAction, ICutAction, IDeleteAction, IRenameAction,
IMoveToPasteboardAction, ISaveAsTemplateAction, IConvertToCopyAction, IConvertToCrossReferenceAction,
IInsertNoteAction, IEditNoteAction, IDeleteNoteAction, IMarkAsDoneAction, IObjectListener, MetaDataListener {
Elves dig rocket launchers.

User avatar
Moridin
Global Moderator
Posts: 19290
Joined: Fri Dec 19, 2003 10:21 pm
Location: On the other side
Contact:

Post by Moridin » Thu Jun 19, 2008 11:06 am

Баси, ако тоя клас е нещо бъгав, вероятно цялото приложение заспива моментално, като гледам кво е призован от Силите да свърши :mrgreen: :mrgreen: :mrgreen:
This is it. Ground zero.

Who is online

Users browsing this forum: No registered users and 2 guests