1. Си / Говнокод #4530

    +106

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    // процедура ввода новой даты в RTC
    long __new_date()
    	{
    	date sysdate;
    	unsigned long str,i;
    	unsigned char tmpbuf[16];
    
    // ...
    
    nextda:	__putsV("\n\rВведите новую дату: ");
    	__getsV(tmpbuf,10); 
    	if(tmpbuf[0]==0) goto daok;
    	//проверка строки на допустимые символы '0'-'9' и '.'
    	for(i=0; tmpbuf[i]!=0; i++)
    	 { if((tmpbuf[i]>0x39 || tmpbuf[i]<0x30) && tmpbuf[i]!=0x2e) goto baddat;
    	 }
    	//проверка числа в диапазоне 01-31
    	if(((tmpbuf[0]==0x33)&&(tmpbuf[1]>0x31)) || (tmpbuf[0]>0x33) 
    		|| (tmpbuf[1]==0x2e) || ((tmpbuf[0]==0x30)&&(tmpbuf[1]==0x30)) ) goto baddat;
    	//проверка точки после числа
    	if((tmpbuf[2]!=0x2e) && (tmpbuf[2]!=0x0)) goto baddat; 
    	if((tmpbuf[2]==0x0) || (tmpbuf[3]==0x00)) 
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  goto fordok; }
    	//проверка месяца в диапазоне 01-12
    	if(((tmpbuf[3]==0x31)&&(tmpbuf[4]>0x32)) || (tmpbuf[3]>0x31) 
    		|| (tmpbuf[4]==0x2e) || ((tmpbuf[3]==0x30)&&(tmpbuf[4]==0x30)) ) goto baddat;
    	//проверка точки после месяца
    	if((tmpbuf[5]!=0x2e) && (tmpbuf[5]!=0x0)) goto baddat; 
    	if((tmpbuf[5]==0x0) || (tmpbuf[6]==0x00)) 
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4); 
    		  goto fordok; }
    	//проверка года в диапазоне 00-99
    	if((tmpbuf[6]==0x2e) || (tmpbuf[7]==0x2e)) goto baddat;
    	if(tmpbuf[7]==0x00) goto baddat; 
    	if(tmpbuf[8]==0x0)  
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4); 
    		  sysdate.ti_year=(tmpbuf[7]-0x30)+((tmpbuf[6]-0x30)<<4); 
    		  goto fordok; }
    baddat:	__putsV("\n\rДата введена неверно (дд.мм.гг)");
    	goto nextda;
    	//установка новой даты
    fordok: 
    	__set_date(&sysdate);
    daok: 
       return 0;
    	}

    Из ПО отечественного шифродевайса. Функция получает от "оператора" время (дд.мм.гг), проверяет его на корректность и пишет в Real Time Clock.

    Запостил: greyspy, 03 Ноября 2010

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

    • Код старый?
      Ответить
    • >Из ПО отечественного шифродевайса.
      Хорошо шифруют
      Ответить
    • А шо за девайс, секрет?
      Спрашиваю из пустого любопытства, потому что все-таки почти 10 лет с криптухой провел:)
      Ответить
      • Получает по самопальному протоколу (поверх UDP) файлы, шифрует (включая имена) и передает дальше, в "хранилище". Когда файл запрашивается из хранилища - расшифровывает.

        Производство штучное. Таких девайсов в природе два (один запасной). До реальной эксплуатации, по всей видимости, это поделье не дойдет, что собственно и к лучшему :)
        Ответить
        • Очень востребованное при нашей бурной жизни устройство!
          Ответить
        • лол, не проще взять коробочку с интеловым процом и линухом внутри, взять веб-сервачек, получать файлы по http, и шифровать каким-нить 3DES?

          писать вообще ничо не надо
          Ответить
          • высокопроизводительная серверная платформа класса писюк
            Ответить
            • да, коробочка с самописным говном конечно куда более производительна)
              Ответить
              • если это русская ОС отечественный шифродевайс, то где-то рядом притаились алчные фапсишники, а это значит, что проще и дешевле было бы купить решение от juniper или cisco и еще на откат бы осталось

                > получать файлы по http
                samba же!

                > шифровать каким-нить 3DES
                устарело
                Ответить
                • >>samba же!
                  SMB/CIFS -- очень плохой протокол. Говно.
                  Samba -- болезное дитя реверс-инжениринга (хотя и протокол уже открыт -- но гены, гены). Говно в квадрате.

                  >>устарело
                  уже сломали? Ребята на этой коробочке сделали что-то более криптостойкое?
                  Ответить
                  • ну ладно, не самба, тогда что? Только не говорите мне про HTTP POST и advanced ajax uploader.php :-P

                    3DES морально устарел и медленно работает
                    ...The AES [AES], formerly known as Rijndael, was chosen...
                    Ответить
                    • причем тут ajax?
                      по HTTP POST прекрасно передаются файлы. На серверной стороне может быть модуль апача писанный на сях.

                      Про аес -- ок. защитано
                      Ответить
                      • > по HTTP POST прекрасно передаются файлы
                        ORLY? Если проектируем автомобить, то получается ИЖ, если сторадж - то рапида :D

                        > модуль апача писанный на сях
                        вот, уже вырисовывается, где можно применить запощенный сниппет :D
                        Ответить
                        • >>ORLY?
                          думаете свой протокол писать приятнее?
                          Ответить
                          • придется писать, т.к. ни один из двух возможных методов не подошел :D
                            Ответить
                            • ))))широта знаний -- наш конек)

                              на самом деле я имел ввиду что:
                              1) для HTTP уже всё есть
                              2) он проходит через все прокси.

                              потому его и надо юзать) прежде чем говорить что он тормозной -- надо узнать требования по производительности. А то будете как тот товарищ который printf не использует в веб приложениях, потому что медленно
                              Ответить
                              • для HTTP, внезапно, есть PUT
                                если ходит через прокси, то шифровать уже не надо
                                Ответить
                    • tftp и ниипет!
                      Ответить
                      • пойдет, хотя по-моему здесь от легковесности выигрыша не будет
                        Ответить
        • слать файлы по UDP - это пиздец
          Ответить
          • Если какой-нибудь видео-аудио-поток, то почему бы нет... незначительные потери не страшны, а скорость при этом выше, чем по TCP.
            Ответить
            • послать файл, или вещать поток - кагбе разные вещи, да? :)
              Ответить
              • А что такое поток? Потенциально бесконечный файл. К тому же может быть в данных избыточное кодирование идет. И на приемной стороне они восстанавливаются в случае чего.
                Ответить
                • Ок, желаю удачи вам в передаче жизненно важных файлов данных по UDP. Пофигу что один пакет где-то может затеряться и не долететь до получателя, пофигу что контрольные суммы уже не совпадут, и данные по сути уже будут битыми...

                  я это к тому, что UDP быстрее TCP, потому что отправителю пофигу, долетели покеты до получателя или нет, он их в сокет плюет просто, и все...
                  Ответить
                • Видеопоток всё-таки учитывает ключевые фреймы. Кроме того, там отправителю довольно безразлично, получил что-то получатель или нет.
                  Ответить
          • да не по UDP же. написали же: свой лисапед с костылями и медсестрами сверху. хотите - контроль потока, хотите - транзакции, не хотите - как хотите.

            а вообще на uTorrent посмотрите. работает себе по uTP, который сверху UDP, и вроде даже все в порядке. только провайдеры кирпичи откладывают.
            Ответить
            • > работает себе по uTP
              > провайдеры кирпичи откладывают
              спасибо, посмеялся, μ-срач великолепен, комстаровский говнотрекер извиваясь от баттхёрта банит пользователей uTorrent 2.x, пионерские маршрутизаторы из писюков с линупсом и iptables нагибаются, слышны крики "душить в зародыше!!!11"
              Ответить
              • да, да.
                потрясающие маршрутизаторы, не режущие и не считающие udp
                жалобы несправедливо забаненных пользоавателей
                яростные высеры админов разного маштаба
                вот только это Дѣла давно минувшихъ дней, педанья старины глубокой.
                Ответить
                • поскольку традиция продавать абонентам несуществующие каналы никуда не делась - ждем второго сезона :)
                  Ответить
                  • "Жильцы, как правило, народ спокойный. Думаю, и погода не подведет." (ц)
                    Ответить
                  • в моей юносте некоторым хомякам давали только HTTP proxy (сквид например) и весь тебе интернет.
                    Ответить
                    • HTTP или HTTPS? А то CONNECT и понеслась... =)
                      Ответить
                      • UDP по коннекту не пойдет)
                        Ответить
                        • зато прекрасно пойдет осёл :)
                          Ответить
                        • для UDP-сокетов можно делать connect, чтобы потом использовать send() вместо sendto() и ещё кое-какие нюансы.
                          Ответить
                          • гг)
                            речь не о connect из берклевских сокетов (или winsock)
                            речь о CONNECT методе HTTP proxy
                            Ответить
                • а что, на опеннете уже кто-то написал статью про то, что кроме TCP есть и другие протоколы?
                  и даже выложил конфиг для убунты?
                  иначе откуда школоташные админы (коих over 80%) узнали как работать с udp?
                  Ответить
    • В 2007-м году использовать переходы? Да, они иногда наоборот полезны, но здесь неоправданы. Плюсую.
      Ответить
    • "tmpbuf[1]>0x31", "tmpbuf[6]==0x2e"

      это, видимо, "труЪ".
      Ответить
    • regexp такой regexp...
      Ответить
      • а где regexp?
        Ответить
        • Ну, ваще любой подтекст будет регэкспом. Да что там, любой символ им будет!
          Ответить
        • regexp в этом вот:
          //проверка строки на допустимые символы '0'-'9' и '.'
          //проверка числа в диапазоне 01-31
          //проверка точки после числа
          //проверка месяца в диапазоне 01-12
          //проверка точки после месяца
          //проверка года в диапазоне 00-99
          Ответить

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