Змея / Говнокод #15833 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
srp_base64_table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./"

def srpb64decode(s):
    ints = [srp_base64_table.index(c) for c in s]
    pad = len(ints) % 4
    if pad != 0:
        pad = 4 - pad
    ints = [0 for i in range(0, pad)] + ints
    notleading = False
    buf = []

    pos = 0
    while pos < len(ints):
        b = (ints[pos] << 2) | ((ints[pos+1] & 0x30) >> 4)
        if notleading or b != 0:
            buf.append(b)
            notleading = True
        b = ((ints[pos+1] & 0x0f) << 4) | ((ints[pos+2] & 0x3c) >> 2)
        if notleading or b != 0:
            buf.append(b)
            notleading = True
        b = ((ints[pos+2] & 0x03) << 6) | ints[pos+3]
        if notleading or b != 0:
            buf.append(b)
            notleading = True
        pos += 4

    return bytes(buf)

def srpb64encode(b):
    pos = len(b) % 3
    b0 = 0
    b1 = 0
    b2 = 0
    notleading = False
    buf = ""

    if pos == 1:
        b2 = b[0]
    elif pos == 2:
        b1 = b[0]
        b2 = b[1]

    while True:
        c = (b0 & 0xfc) >> 2
        if notleading or c != 0:
            buf += srp_base64_table[c]
            notleading = True
        c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4)
        if notleading or c != 0:
            buf += srp_base64_table[c]
            notleading = True
        c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6)
        if notleading or c != 0:
            buf += srp_base64_table[c]
            notleading = True
        c = b2 & 0x3f
        if notleading or c != 0:
            buf += srp_base64_table[c]
            notleading = True
        if pos >= len(b):
            break
        b0 = b[pos]
        b1 = b[pos + 1]
        b2 = b[pos + 2]
        pos += 3

    return buf

Кодирование и декодирование блобов для openssl SRP.

А я построю свой диснейленд с блекджеком и шлюхами! (c) тот, кто пилил SRP в openssl

Запостил: bormand bormand, (Updated )

Комментарии (153) RSS

  • Сишный оригинал (авторское форматирование сохранено):
    static int t_fromb64(unsigned char *a, const char *src)
    	{
    	char *loc;
    	int i, j;
    	int size;
    
    	while(*src && (*src == ' ' || *src == '\t' || *src == '\n'))
    		++src;
    	size = strlen(src);
    	i = 0;
    	while(i < size)
    		{
    		loc = strchr(b64table, src[i]);
    		if(loc == (char *) 0) break;
    		else a[i] = loc - b64table;
    		++i;
    		}
    	size = i;
    	i = size - 1;
    	j = size;
    	while(1)
    		{
    		a[j] = a[i];
    		if(--i < 0) break;
    		a[j] |= (a[i] & 3) << 6;
    		--j;
    		a[j] = (unsigned char) ((a[i] & 0x3c) >> 2);
    		if(--i < 0) break;
    		a[j] |= (a[i] & 0xf) << 4;
    		--j;
    		a[j] = (unsigned char) ((a[i] & 0x30) >> 4);
    		if(--i < 0) break;
    		a[j] |= (a[i] << 2);
    
    		a[--j] = 0;
    		if(--i < 0) break;
    		}
    	while(a[j] == 0 && j <= size) ++j;
    	i = 0;
    	while (j <= size) a[i++] = a[j++];
    	return i;
    	}
    Ответить
  • И оригинал энкодера:
    static char *t_tob64(char *dst, const unsigned char *src, int size)
    	{
    	int c, pos = size % 3;
    	unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0;
    	char *olddst = dst;
    
    	switch(pos)
    		{
    	case 1:
    		b2 = src[0];
    		break;
    	case 2:
    		b1 = src[0];
    		b2 = src[1];
    		break;
    		}
    
    	while(1)
    		{
    		c = (b0 & 0xfc) >> 2;
    		if(notleading || c != 0)
    			{
    			*dst++ = b64table[c];
    			notleading = 1;
    			}
    		c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4);
    		if(notleading || c != 0)
    			{
    			*dst++ = b64table[c];
    			notleading = 1;
    			}
    		c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6);
    		if(notleading || c != 0)
    			{
    			*dst++ = b64table[c];
    			notleading = 1;
    			}
    		c = b2 & 0x3f;
    		if(notleading || c != 0)
    			{
    			*dst++ = b64table[c];
    			notleading = 1;
    			}
    		if(pos >= size) break;
    		else
    			{
    			b0 = src[pos++];
    			b1 = src[pos++];
    			b2 = src[pos++];
    			}
    		}
    
    	*dst++ = '\0';
    	return olddst;
    	}
    Сорри за простыню ;(
    Ответить
  • Классический вариант сишного "падсибя". Пытаясь спортировать это гавно, понимаешь, каким огромным шагом вперед была стандартная библиотека сишарпов и питонов.
    Ответить
    • Спроси у автора этого прыщеговна. Там какой-то другой base64, если сможешь понять какой - дам печеньку. У меня пока тесты не проходят.
      Ответить
    • Не, это я набайтоёбил на основе исходниклв из опенссл (см. выше) по просьбе анонимба.

      Там в модуле srp вообще внезапное бейс64 используется - таблица символов совсем другая, и паддинг слева(!). Причем лишние ведущие нули отбрасываются. Видимо числа в таком формате компактнее хранятся...
      Ответить
      • > The bytearray type is a mutable sequence of integers in the range 0 <= x < 256
        Вместо buf напрашивается его использовать.
        Ответить
        • На cpython они равнозначны, на каких-то других реализациях может выскочить О(n**2). Кстати, а почему нет unicodearray?
          Ответить
          • Я тоже видел в доках, что конкатенация для строк оптимизирована. Но на практике я вижу совсем другое: http://ideone.com/4CtQHQ
            Ответить
                  • Вот ещё вариант с list. Причем у меня на компьютере он получается даже (немного) быстрее, чем bytearray. На Ideone - чуть медленнее.
                    http://ideone.com/3bBJT9

                    Так что отвечаю на вопрос s-a--m: используй list в качестве unicodearray.
                    Ответить
                    • Это не совсем то.
                      Видишь ты код с bytes += bytes2. Если у тебя это где-то начнет выдавать плохую асимптотику, заменяешь bytes на bytearray и все заебись. А теперь вопрос - почему не сделать такое же для юникода?

                      Плюс в тройке bytes должен вылететь сразу, когда ты попытаешься добавить туда что-нибудь другое, например, юникод, а списке - когда джойнить будешь, и по исключению хуй поймешь где это произошло.
                      Ответить
              • хм... чтобы выявить сложность, надо изменять входной размер (тут фиксированный 1024) и смотреть изменение времени работы в рамках ОДНОЙ реализации, сейчас понятно только что строки медленнее на 1024 элементах при добавлении по одному байту.
                Ответить
            • > конкатенация для строк оптимизирована
              как оптимизирована? можно ссылку?
              строки в питоне иммутабельные, как можно оптимизировать их сложение по сравнению с деструктивным буфером?
              Ответить
  • Кстати, код вообще работает? Срез от строки - это строка, так что в b0-b2 сразу же оказывается строка, и b0 & 3 кидает TypeError.
    Ответить
    • Код работает, тесты проходит. Индексирование байтстринга на третьепитоне дает целое число.
      Ответить
      • Понятно. Меня просто напрягло, что srp_base64_table - это строка (а не bytes).
        Ответить
        • Да, кстати, борманд забыл указать для какой это ветки.
          Ответить
        • in progress...

          Там, как оказалось, тот еще квест 😉 В лучших традициях прыщеблядства, как ты его называешь.

          Потом на форуме туториал отпишу в отдельной теме, может кому-то еще пригодится.
          Ответить
          • Ну это не я, это еще, кажется, с лора пошло. ПРЫЩЕКВЕСТ.
            Ответить
              • ненавижу прыщи. Почему этот мир полон прыщей? Так господа мы коммунизм и человекоподобных роботов никогда не построим. Борманд про них только в аниме будет смотреть.
                Ответить
              • > нельзя распаковывать его 7zip, winrar и т.п. - похерятся симлинки!)
                Под виндой собирали? Там симлинки нормально сохранились? На фат разделе это даже не собрать?

                > openssl, выполнив в msys'ной консоли
                Ну как-то не модно. Нужно было все команды записать через &&. Шучу. Где make install или препаковка перед установкой в пакет?
                Ответить
                • > Под виндой собирали? Там симлинки нормально сохранились? На фат разделе это даже не собрать?
                  Не, под виндой tar -xf их тупо пропускает. Зато потом конфигур их пересоздает, если их нет. Так что соберется где угодно.

                  А жопа с 7z и winrar в том, что они эти симлинки извлекают из tar'а как файл, внутри которого написано имя объекта, на который ссылался симлинк. Конфигур видя эти файлы не заменяет их на копии нормальных. И все ломается.

                  > Где make install
                  Вопрос к авторам либы. Думаешь от хорошей жизни ручками копировали файлы от openssl? 🙂

                  > пакет?
                  msm что ли? Какие еще пакеты под виндой?
                  Ответить
                  • > Не, под виндой tar -xf их тупо пропускает.
                    Потестил еще раз - тупо делает копию файла. Даже на нтфс.
                    Ответить
                    • На винде с дефолтными настройками для создания симлинков нужны права админа.

                      P.S. Но вряд ли это спасёт tar.
                      Ответить
                      • >На винде с дефолтными настройками для создания симлинков нужны права админа.
                        ЧТОААА?
                        Ответить
                      • А как их там вообще создают? Есть какие-то консольные или гуишные средства?
                        Ответить
                        • Через гуй — никак. Только консолечка в срачло, только хардкор:
                          MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение
                          
                                  /D          Создание символической ссылки на каталог.
                                              По умолчанию создается символическая ссылка на файл.
                                  /H          Создание жесткой связи вместо символической ссылки.
                                  /J          Создание соединения для каталога.
                                  Ссылка      Имя новой символической ссылки.
                                  Назначение  Путь (относительный или абсолютный), на который ссылается
                                              новая ссылка.


                          Да, кстати, чем отличается /D (симлинк) от /J (джойн)?

                          Есть ещё вариант — сторонний софт. Виндоюзеры ищут софт для того, что должно быть из коробки.
                          Ответить
                  • А если виндопрогу захочу собрать под линём? msys и mingw ставить или msys и gcc?

                    > ./config shared
                    Вроде же обычно configure и что здесь означает shared?

                    > cp -r include c:/test/openssl-1.0.1g-inst
                    А что тут происходит?

                    > export ZLIB_PATH=c:/test/zlib-1.2.8
                    А тут?
                    Ответить
                    • > А если виндопрогу захочу собрать под линём?
                      То ты ебанулся. Тут и нативно то еле собирается, а ты еще кросскомпиляцию захотел...

                      > Вроде же обычно configure и что здесь означает shared?
                      Вопрос к авторам либы 🙂 shared - то что собирать дллки, а не только статику.

                      > А что тут происходит?
                      Рекурсивное копирование, не?

                      > А тут?
                      Эм, переменную окружения замутили и экспортнули... Что не так?
                      Ответить
                      • > замутили и экспортнули
                        Ну это понятно. Я просто на виндовом set остановился. Меня интересует что значит экспортнули?

                        С остальными пунктами все ясно... То есть ты настоятельно рекомендуешь собирать под нужный таргет всегда на таргете? А как же всякие телефоны с эплом или андроидом? Не на них же самих собирать. Понятно что с моим последнем примером вопрос больше провокационный, но все же.
                        Ответить
                        • >Понятно что с моим последнем примером вопрос больше провокационный

                          Сам же и ответил.
                          Ответить
                          • Я торжественно обещаю не создавать аккаунт LinuxGovno.

                            PS: Как Борманд так быстро отвечает на комментарии? Неужели говнутифи?
                            Ответить
                        • >Меня интересует что значит экспортнули?
                          Передали в шелл из которого этот шелл запустили.

                          >А как же всякие телефоны с эплом или андроидом? Не на них же самих собирать.
                          А в чем проблема? Там гектар оперативы и хотя бы двухядерник.
                          Ответить
                          • > Передали в шелл из которого этот шелл запустили.
                            Не совсем... Если написать var=val, то переменная будет доступна только текущему шеллу, если экспортнуть - то и все запускаемым из него прогам.
                            Ответить
                            • Это же странно. Когда пишешь var=val, то по идеи это должно записываться в таблицу переменных окружения текущего процесса. При этом шел делает форк перед запуском нового дочернего процесса, а значит эта таблица наследуется и в дочерний процесс переменная попасть уже должна.
                              Ответить
                              • Кто сказал, что эти таблицы обязаны совпадать? 🙂 Там когда exec делаешь, можешь вообще что угодно дочернему процессу передать.
                                Ответить
                              • >var=val, то по идеи это должно записываться в таблицу переменных окружения текущего процесса.
                                Нет, в случае шелла в окружение это не попадает.
                                Ответить
                            • Судя по описанию выше:
                              > Передали в шелл из которого этот шелл запустили.
                              экспорт в текущем шеле приводит к наследованию потомками этой переменной окружения, а в родительском шеле это выглядит как var=val и при этом не наследуется его потомками, все верно? А что будет если я в своём приложении выполню например через stdlib.system var=val или export? Родительский шел что-нибудь узнает?
                              Ответить
                              • > Родительский шел что-нибудь узнает?
                                Нет конечно. Передача односторонняя.

                                Ибо передавать переменные окружения от детей к родителям несекурно и ненадежно. Получилась бы херня на порядок опасней чем register globals в php.

                                P.S. А вот от передачи каких-нибудь структурированных результатов помимо stdout и exit code я бы не отказался 😉
                                Ответить
                                • Ну значит экспорт все-таки нифига не экспортирует переменные окружения предку? А я уж надеялся...
                                  Ответить
                                  • > не экспортирует переменные окружения предку
                                    Да как он это сделает то? 🙂 Это же было бы страшное колдунство с IPC, да еще и работающее не всегда... Вдруг предок - другой шелл, или вообще не шелл, или тупо сдох...
                                    Ответить
                                • Но в бате так и есть, баты изменяют переменные шелла, если не юзать setlocal
                                  Ответить
                                  • > баты изменяют переменные шелла
                                    Дык баты исполняются в том же шелле...

                                    Линупсовый аналог такого режима будет source script.sh вместо script.sh.
                                    Ответить
                                      • > script.sh запускает новый шелл? ух ты
                                        Ну да. Причем тот, который указан в шабанге запускаемого скрипта.
                                        Ответить
                                        • > script.sh
                                          То есть если я в своем шкрипте напишу только строку EXPORT блабла=бла, то это будет бесполезная лажа и я зря напишал этот шкрипт, тк оно выкинется в помойку по завершению шкрипта? А как это обойти, чтобы из шкрипта вызвать шкрипт и экшпорт в шкрипте-потомке попал в шкрипт предок?
                                          Ответить
                                          • > экшпорт в шкрипте-потомке попал в шкрипт предок
                                            Только через source child.sh. Больше никак.
                                            Ответить
                        • > То есть ты настоятельно рекомендуешь собирать под нужный таргет всегда на таргете?
                          Если есть такая возможность - да. Ибо кросскомпиляция по определению жопа, с которой не стоит связываться без уважительной причины.
                          Ответить
                          • Ну как же так... А я уже хотел уйти в подполье в линух. Достали мингвпроблемы уровня не работает нормально многопоточность или отставание на многоверсий от гцц. Там как раз лямбды с "выводом типов параметров" добавили.
                            Ответить
                  • > А сам бинарник curl'а в c:/test/curl-7.36.0/src
                    А что он там делает? Там же сырцы должны лежать.

                    > mingw32-make mingw32-ssl-zlib-srp
                    Это какой-то особый мингевешный мейк mingw32-make и мейк файл он берет из mingw32-ssl-zlib-srp?

                    А пакеты под линь приходилось собирать? Допустим хочу собрать deb. Например я к своей проге накатал руками мекфайл. Какие там ещё этапы важные? Или там это только начало и мне ещё придется накатать тонну прыщей?
                    Ответить
                    • > А что он там делает? Там же сырцы должны лежать.
                      Ну где собрали, там и лежит 🙂 out of directory build я на винде не рискнул пробовать, да и он может тупо не поддерживаться кривожопыми самодельными конфигуряторами.

                      > мейк файл он берет из mingw32-ssl-zlib-srp
                      Это таргет. Файл у мейков задается через -f.

                      > Допустим хочу собрать deb. Например я к своей проге накатал руками мекфайл. Какие там ещё этапы важные?
                      Не, там совсем немного - описание, правила сборки и еще немного никому не нужного мусора типа чейнджлогов.
                      Ответить
                      • А как же SSH ключ где-то там регистрировать, майл, дифы и ещё что-то там...
                        Ответить
                        • Так ты для себя пакет собираешь (чтобы по сервакам растащить к примеру), или собрался в реальную репу пропихивать? 🙂

                          Если для себя - то все это нинужно.

                          Если пропихивать - то сборка деба всяко будет для тебя самой простой из проблем 🙂
                          Ответить
                          • > Если пропихивать - то сборка деба всяко будет для тебя самой простой из проблем 🙂

                            Вот кстати да. Тоже интересно. Вон в бусте жесткий контроль кода, документации, тесты, ждешь кодеревьювера пару лет и тд. А у этих как? Как они там бюрократничают в андроиде или в репах убунты? В конце концов можно свой репсервер наверное завести, если будет в ихних сильно жестко.
                            Ответить
                            • > в андроиде
                              В гуглплей - платишь 20 баксов и распространяешь что хочешь 😉 Пока твою учетку не выпилят за вирей отправлялки смс и детский прон.

                              > в репах убунты?
                              Вроде как довольно жестко. Но полегче чем в бусте.
                              Ответить
                                • > Чтоо? Там за право аплоада надо платить?
                                  Дык защита от школоты и прочих долбоёбов 😉 Там и так то все засрано, представь что было бы, если бы можно было бесплатно выкладывать...

                                  Один раз в жизни заплатить 20 баксов это разве много? В виндовом маркете вроде как $40 было, тоже по сути копейки. А вот про iOS лучше забудь 😉
                                  Ответить
                                  • От школоты - мб, а от тех, кто своим троем 20 баксов в состоянии отбить - кагбе нет.
                                    Ответить
                                    • > а от тех, кто своим троем 20 баксов в состоянии отбить - кагбе нет
                                      Там вроде бы какой-то робот еще проверяет файлы. Ну и не все юзеры любят ставить проги с правами в духе "отправка SMS" и "чтение SMS".
                                      Ответить
                            • > в репах убунты?
                              Есть ещё такая штука - PPA. можно захостить свой репозиторий на сервере бубунты и заливать туда пакеты, потом на любой машине подключать его одной командой. Я себе завёл архивчик.
                              Ответить
                              • Я тоже думал где-нибудь такой поднять на вдс. Вообще я уже гуглил. Есть онлайн сервисы предоставляющие ПАПу. Думаю их зазать.

                                > на сервере бубунты
                                ЭЭэ. Апстор бубунты или убунту ван?
                                Ответить
                      • Там ещё и какая-то дебилизация деабинизация что-бы он раскидывал по нужным папкам файлы. экзешники в одно. конфиги в другое. что-то где-то регистрировать. тригеры какие-то... что там за тригеры такие...
                        А ещё мне не понятно как он пакетный менеджер деинсталить будет мои файлы. мало ли что я куда напихал...
                        Ответить
                        • > Там ещё и какая-то дебилизация деабинизация что-бы он раскидывал по нужным папкам
                          Опять же - для внутренних нужд - всем похуй. Как удобней так и раскладывай. Можешь вообще в /opt/yourprogram захуярить, если лень читать доки.

                          > тригеры какие-то
                          Ну это уже advanced магия, если просто копирования файлов недостаточно, и надо что-то подкрутить после установки/перед удалением.

                          > А ещё мне не понятно как он пакетный менеджер деинсталить будет мои файлы. мало ли что я куда напихал...
                          Так он знает куда чего ложил при установке 😉
                          Ответить
                          • > Так он знает куда чего ложил при установке
                            Он слежение что-ли включает со стороны системы за моим инсталятором и записывает обратный лог для деинсталятора? Магия какая-то...

                            > надо что-то подкрутить после установки/перед удалением.
                            Типа как в винде 1% установлено обновлений перед загрузкой или перед выключением? Типа на это действие регистрируешь свой обработчик?

                            В моём мейкфайле вроде что-то собирается на моей конкретной машине, но как при сборке в пакет зафигачить зависимости от библиотек тех что нужно доставить дополнительно? И вообще как линух разруливает зависимости? На каждое приложение напихивает симлинки на файлы нужных версий в зависимости от того какие префиксы передал в мейкфайл приложения?
                            Ответить
                            • Дык тут тебе не венда, в которой инсталляторы делают что хотят... Если без триггеров, то максимум что оно сделает при установке - скопирует файлы в указанные места, и всё.

                              Ну вот например пост-установочный триггер пыхи рестартит апач, чтобы он подсосал новый модуль.

                              Зависимости пишутся как раз в тех дополнительных файликах. Собирается deb в специальном чистом окружении... Короче читай ман, если ты реально собрался пилить. А если не собрался - то нахуй тебе заморачиваться всем этим 😉

                              > И вообще как линух разруливает зависимости?
                              1) при установке тупо не дает ставить конфликтующие пакеты
                              2) да, у so'шек есть версии в названиях
                              Ответить
                              • С файликами понятно, а вот как быть с реальным процессом работы. Как одновременно разные версии библиотек уживаются на одном лине? И почему нужные приложения берут именно нужные версии динамических библиотек или вызывают нужные бинарники?

                                А... Чистое окружение.. Чеашрутишь на пустую директорию. Типа никаких библиотек не поставлено, они накатываются на чистое окружение и вот у меня уже либа нужной версии в зависимостях. Но это работает только со статическими либами, а как это организовано для динамических? неужели и запускаются в почти чистом окружении о_О
                                Ответить
                                • Чистое окружение только для сборки - чтобы то что сейчас на твоей системе не влияло, и чтобы сборочные скрипты не насрали куда-попало...

                                  А насчет версий - там хитрая херня с именованием сошек. Лень с телефона рассказывать.... загугли если интересно.

                                  Вкратце - большинство либ обратно-совместимые, поэтому если одной проге надо 1.0.5, второй 1.0.7, а в системе стоит 1.1.5, то они обе будут ее юзать.
                                  Ответить
                                  • > телефона
                                    Как на этом можно на говнокоде сидеть... Никак не иначе лопата... Для лесенок то...

                                    > одной проге надо 1.0.5, второй 1.0.7, а в системе стоит 1.1.5, то они обе будут ее юзать.

                                    Как страшно жить... Мне кажется что-то линуксоиды не продумали. Но интересно, спасибо...
                                    Ответить
                                    • > Как страшно жить... Мне кажется что-то линуксоиды не продумали.
                                      В общем там есть такое соглашение, что либы с одинаковой мажорной версией обратно совместимы. Соблюдать его должен автор либы, не забывая проинкрементить т.н. soname, который вшивается в so'шку. Если не соблюдает - то он пидорас и вообще редиска.

                                      Например у libfuck.so.6.2.4 вшит soname libfuck.so.6. Если следующая версия несоместима - она должна называться к примеру libfuck.so.7.0.1 с soname = libfuck.so.7.

                                      В зависимости бинарников вкомпиливается не полная версия, а тот самый soname. Поэтому если прогу собирали с 6.2.4, то она будет работать и с 6.7.2 и с 6.3.5 (с 6.1.0 она работать не будет, и такую ситуацию не допустит пакетный менеджер: "или крестик сними ставь более старую прогу или трусы надень обновляй либу").

                                      А 6.2.5 и 7.3.5 могут стоять одновременно, не мешая друг другу.

                                      P.S. Блин, плохо поди объясняю?
                                      Ответить
                                      • > Блин, плохо поди объясняю?
                                        Не, вообще всё понятно. Тебе нужно что-то повышающее самоуверенность. Скилл не прокачен.(
                                        Ответить
                                        • >Тебе нужно что-то повышающее самоуверенность. Скилл не прокачен.(
                                          Только что вы могли наблюдать парадокс Даннинга-Крюгера живьём. Спасибо за внимание.
                                          Обратный пример на этом сайте полагаю тоже все видели.
                                          Ответить
                                            • Лол, менее чем через три минуты после моего поста прибежал сюда оправдываться, дескать "всё на самом деле не так".

                                              Я ж твой ник не упоминал. С чего это тебя так зацепило?
                                              Ответить
                                              • > С чего это тебя так зацепило
                                                Да ты меня затраллел, лалка 🙂
                                                Ответить
                                              • Где-то была картинка, где один человечек говорит другому "Мне не нравится X", тут подбегает третий, начинает кувыркаться и кричать "ололо, пукан порвало". Я думаю, все поняли, про кого это.
                                                Ответить
                                                • >> тут подбегает третий, начинает кувыркаться и кричать "ололо, пукан порвало"
                                                  >>Я думаю, все поняли, про кого это.
                                                  Конечно поняли.
                                                  http://govnokod.ru/15791#comment228425
                                                  http://govnokod.ru/12940#comment176220

                                                  s-a--m 8 дней назад #
                                                  Но тебе же так печет пукан от слова прыщееб

                                                  anonimb84a2f6fd141 02.05.2013 21:40 #
                                                  Блядь, да зашей ты уже себе пукан, что ты им в каждом треде сверкаешь, сучечка.
                                                  http://govnokod.ru/13413#comment187715
                                                  Ответить
                                                  • Мань, я логически не могу распарсить твой комент. AST формируется, а вот дальше - труба.
                                                    Ответить
                                                    • >я логически не могу распарсить твой комент

                                                      Это просто оттого что ты совершенно не обучен логике .
                                                      Ответить
                                    • >Мне кажется что-то линуксоиды не продумали.
                                      Есть еще LD_PRELOAD.
                                      Ответить
                              • > 1) при установке тупо не дает ставить конфликтующие пакеты

                                Хз. Вон у меня куча питонов и Qt стоит. Как-то все вместе живут...

                                > пост-установочный триггер пыхи рестартит апач
                                А что он из себя представляет на системном уровне? Сигнал посикс? Я кроме названия просто про него ничего не знаю.

                                А мне тут один линуксоид рассказывал, что линух очень крут и вообще разруливает конфликты версий библиотек через симлинки и позволяет заменять библиотеки которые сейчас используются! тоже посредством симлинков. Это тоже должен я в своем инсталяторе как-то обеспечивать, если допустим мне это понадобится?

                                А ввобще исчерпывающее объяснение. Спасибо. Глядишь свой пакет соберу. Но нельзя собирать не по правилам. У меня начнется синдром незавершенности. Так что только деабинизация. 🙂
                                Ответить
                                • > позволяет заменять библиотеки которые сейчас используются
                                  Это сила и слабость линуха... mandatory lock'ов по умолчанию нет. Поэтому и можно творить такие непотребства как удаление открытых файлов...

                                  Триггер? Да просто набор команд, который надо выполнить в процессе установки.Вроде бы и все...
                                  Ответить
                                  • > как удаление открытых файлов...
                                    А что в этом плохого, если приложение не падает при этом все равно и может обращаться к старому файлу?
                                    Ответить
                                  • >Поэтому и можно творить такие непотребства как удаление открытых файлов...
                                    почему непотребство? Замечательная вещь. Особенно, если у тубя открыто что-нибудь, что не хочет освобождать файл. Винда у меня частенько ругалась из-за того, что не могла удалить директории, т.к. они были открыты в других приложениях
                                    Ответить
                                    • > Винда у меня частенько ругалась
                                      У меня в Windows 8 довольно часто не хочет удалять папки из-за того, что кто-то использует служебные файлы типа thumbs.db. Иногда даже только что созданные папки так "застревают". Фиг знает, баг explorerа или вирус какой установился.
                                      Ответить
                                  • Это для школьников. Ну и вроде как пакет то он все равно не формирует и зависимости правильно не проверяет. Случись что посреди установки - откатить уж не удастся.
                                    Ответить
                      • > > мейк файл он берет из mingw32-ssl-zlib-srp
                        > Это таргет. Файл у мейков задается через -f.
                        А почему это вообще приходится собирать мингевешным мейком, а не стандартным гнутым? Как это вообще определить?
                        Ответить
                        • > А почему это вообще приходится собирать мингевешным мейком
                          Х.з., в мане по сборке так написано было, я и не стал выпендриваться. А вообще - mingw32-make и make это один и тот же файл. Чем меньше выпендриваешься - тем больше вероятность успеха 😉
                          Ответить
                  • >Не, под виндой tar -xf их тупо пропускает. Зато потом конфигур их пересоздает, если их нет. Так что соберется где угодно.
                    Блин, а зачем тогда писал?
                    Edit: дочитал
                    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8