1. bash / Говнокод #28416

    −6

    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
    #!/bin/bash
    
    CODE='timezone.txt'
    WDIR="dl-${CODE}"
    TGTDIR="/etc/puppet/modules/nginx/files/etc/nginx/maxmind/"
    URL='http://www.maxmind.com/timezone.txt'
    
    mkdir "${WDIR}"
    cd "${WDIR}"
    wget ${URL} -O "${CODE}"
    
    find -name "${CODE}" | while read F
    do
      chown root:root -vf "${F}"
      chmod -vf 644 "${F}"
      mv -vf "${F}" "${TGTDIR}"
    
      TMPDIR=`dirname "${F}"`
      if [[ ${TMPDIR} == '.' || ${TMPDIR} == '..' || ${TMPDIR} == '/' ]]
      then
        # root's rm -rf safety
        continue
      fi
      echo rm -rfv "${TMPDIR}"
      rm -rfv "${TMPDIR}"
    done

    Задача стояла всего лишь скачать txt файл.

    Запостил: alexeykey, 12 Октября 2022

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

    • показать все, что скрытокак мрачно и сыро... ёб твою мать!
      Ответить
    • показать все, что скрытоКод написан вполне себе по канонам шелл программирования (баш точнее, двойные скбоки -- башизм ради ||), но есть странные вещи:
      * нафига find скачанного файла? Может быть realpath хотя бы?
      * CODE лучше бы передавать аргументом ( ане через глобальную переменную окруженмя)
      * на 14 строчке лучше бы проверить, что файл есть
      * защита на 19 строке -- странная. А если там ``/etc/`` ? А если ``~`` ?
      * ${TMPDIR} лучше всегда брать в кавычки если уж по канонам
      Ответить
    • показать все, что скрыто>set -e
      ...тут бы точно не был лишним

      >CODE='timezone.txt'
      >WDIR="dl-${CODE}"
      Скрипт оперирует относительными путями, что намекает, что скрипт рассчитывает быть вызванным из определенной директории. Каков будет багор, если в $PWD будет, скажем, /sys? Всё выглядит так, что текущая директория здесь используется как временная, так что можно было условиться использовать /tmp по её прямому назначению, тем самым оперировать абсолютными путями и избавиться от хаков с find / realpath и root's rm -rf safety

      >chown root:root -vf "${F}"
      >chmod -vf 644 "${F}"
      А как такое может быть, что файл создался wget'ом с неправильными правами? Защита от предыдущего запуска скрипта от неверного пользователя?

      >if [[ ${TMPDIR} == '.' || ${TMPDIR} == '..' || ${TMPDIR} == '/' ]]
      Микродоёбка: можно избавиться от башизма, будет выглядеть чуть грязнее, но если на портабельность этого говна похуй, то и ладно
      if [ "$TMP" = 'aaa' ] || [ "$TMP" = 'bbb' ] ... etc
      Ответить
      • показать все, что скрыто>Скрипт оперирует относительными путями
        Это плохо, да

        >, так что можно было условиться использовать /tmp
        ``mktemp(1)``

        >А как такое может быть, что файл создался wget'ом с неправильными правами?
        ``umask(2)``, ``apropos umask``

        >>ожно избавиться от башизма, будет выглядеть чуть грязнее, но если на портабельность этого говна похуй,
        Если на портабельность похуй, то зачем избавляться от башизма?:)
        Ответить
      • >похуй
        нет, не похуй
        Ответить
    • показать все, что скрытоЧем std::get_money отличаетсчя от std::money_get ?
      Ответить
    • показать все, что скрытоКАКАЯ ГНИДА МИНУСУЕТ???? СЛАБО В ЛИЦО СКАЗАТЬ ЧТО НЕ ТАК???
      Ответить

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