Perl для системного администрирования



         

Служба доменных имен (DNS) - часть 4


Существует по крайней мере два способа сделать так, чтобы порядковый номер всегда увеличивался:

  • Считывать предыдущий конфигурационный файл и увеличивать найденное там значение.
  • Вычислять новое значение, основываясь на внешних данных, которые «гарантированно» увеличиваются (это могут быть, например, системные часы или номера версий файла в RCS).
  • Ниже приведен пример программы, где применяется комбинация этих двух методов для создания допустимого заголовка файла зоны DNS. Порядковый номер будет представлен в виде, который рекомендуют использовать Альбиц и Лью в своей книге (YYYYMMDDXX, где Y=rofl, М=месяц, В=день и ХХ=двузначный счетчик, позволяющий вносить более одного изменения за день):

    ft получаем текущую дату в формате YYYYMMDD

    @localtime = localtime;

    Stoday = sprintf("%04d%02d%02d",$localtime[5]+1900,

    $localtime[4]+1,

    $localtime[3]);

    # имя пользователя как в NT/2000, так и в Unix

    $user = ($"0 eq "MSWin32")? $ENV{USERNAME} :

    (getpwuid($<))[6]." (".(getpwuid($<))[0].")";

    sub GenerateHeader{ my($header);

    открываем старый файл, если это возможно, и считываем

    # порядковый номер, принимая во внимание формат старого файла

    if (open (OLDZONE,$target)){ while (<OLDZONE>) {

    next unless (/(\d{8}).«serial/); Soldserial = $1; last; }

    close (OLDZONE); } else {

    Soldserial = "00000000";

    иначе начинаем с О >

    К если предыдущий порядковый номер соответствует

    # сегодняшнему дню, то увеличиваем последние 2 цифры, в

    # противном случае используем новый номер для сегодняшнего дня

    Solddate = substr($oldserial,0,8);

    Scount = ((Solddate == $today) ? substr($oldserial,8,2)+1 : 0);

    Sserial = sprintf("%8d%02d",$today,Scount);

    П начало заголовка

    $header .= "; Файл зоны dns - СОЗДАН

    $0\л": Sheader .= ";

    НЕ РЕДАКТИРУЙТЕ ВРУЧНУЮ1\п:\п"; Sheader .= ";

    преобразован пользователем $user в ".scalar((localtime)). "\n;\n";

    # пересчитать число записей для каждого отдела и сообщить




    Содержание  Назад  Вперед