[NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Stauffenberg »

Hephaestus писал(а):
06.02.2015 13:59
P.S. И кстати, это никак не объясняет, почему Леннарту опасно ездить на конференции.
Киллер его только там может достать что ли?

Если бы я был бы киллером, я бы постарался "достать" его именно там. Сразу столько подозреваемых :)
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
chitatel
Сообщения: 2063

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение chitatel »

Stauffenberg писал(а):
06.02.2015 15:49
Если бы я был бы киллером, я бы постарался "достать" его именно там. Сразу столько подозреваемых :)

:laugh:
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

Hephaestus писал(а):
06.02.2015 10:53
Скажите, Вы действительно уверены, что сишный код писать легче, чем скрипты
Да.

Hephaestus писал(а):
06.02.2015 10:53
и, следовательно, в поделках Леннарта нет ошибок?
Не уловил логики, как из того что писать легче следует, что "нет ошибок".

Hephaestus писал(а):
06.02.2015 10:53
если не уверены, тогда непонятно, почему сишный код лучше скриптов (в рамках задачи, разумеется).
Тем, что сишный код проще писать, потому что
Hephaestus писал(а):
06.02.2015 10:53
скрипты сложно писать, сложно отлаживать, подводные камни и т.п.


Hephaestus писал(а):
06.02.2015 10:53
Беда в том, что эта идея проводится через всю статью, как основание для повсеместного отказа от sysvinit и внедрения systemd.
То есть Леннарт не осилил скрипты и поэтому sysvinit безнадежно плох и все быстренько должны перейти на systemd.
Здесь просто надо понять, что Леннарт не уникален, а типичен: из тех, кто вынужден эти скрипты писать, их мало кто "осилил".

Hephaestus писал(а):
06.02.2015 10:53
Но эту логику очень легко довести до конца: Леннарт избавляет сообщество от скриптов, как источника ошибок, для этого он создаёт свой бинарный (не скриптовый) продукт, и это означает, что в данном продукте ошибок нет - он просто не имеет права на ошибку, иначе какой смысл менять один источник ошибок на другой?
Я не увидел в вашем рассуждении логики. Логика же Леннарта проста: раз сообщество не хочет писать скрипты, давайте сделаем, чтобы можно было их не писать.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Bizdelnick »

yoshakar писал(а):
07.02.2015 16:28
Логика же Леннарта проста: раз сообщество не хочет писать скрипты, давайте сделаем, чтобы можно было их не писать.

А с чего он взял, что сообщество не хочет писать скрипты? Какой-то опрос проводился? Пусть покажет результаты. И потом, кто сказал, что сообщество хочет писать юниты? Я бы предпочёл вообще ничего не писать, чтобы всё тупо работало. Только в таком случае я - не "сообщество", а потреб...итель.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

Bizdelnick писал(а):
07.02.2015 16:33
А кто сказал, что оно не хочет писать скрипты? Какой-то опрос проводился? Покажите результаты.
Не знаю. Ну если хочет - пусть пишет, лично я только за. Но сообщество - в лице разработчиков дистров - почему-то не пишет скрипты, а внедряет systemd. Значит, и правда не хочет.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Bizdelnick »

yoshakar писал(а):
07.02.2015 16:44
Но сообщество - в лице разработчиков дистров - почему-то не пишет скрипты, а внедряет systemd.

И что? Причём тут скрипты? Они давным-давно уже были написаны большей частью. Если б всё дело было в нежелании что-то писать, как раз никаких systemd никто бы не внедрял.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

Bizdelnick писал(а):
07.02.2015 16:56
yoshakar писал(а):
07.02.2015 16:44
Но сообщество - в лице разработчиков дистров - почему-то не пишет скрипты, а внедряет systemd.

И что? Причём тут скрипты? Они давным-давно уже были написаны большей частью. Если б всё дело было в нежелании что-то писать, как раз никаких systemd никто бы не внедрял.
Ну тогда я не знаю, чем им systemd так понравился. Я как-то больше достоинств не вижу.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение drBatty »

yoshakar писал(а):
07.02.2015 16:28
Не уловил логики, как из того что писать легче следует, что "нет ошибок".

имелось ввиду "писать легче хороший, годный код, в котором мало ошибок, а те, что есть, легко найти и исправить"
А писать говнокод несложно и на brainfuck'е. Советую попробовать, и убедиться самостоятельно.
yoshakar писал(а):
07.02.2015 16:28
скрипты сложно писать, сложно отлаживать, подводные камни и т.п.

полный бред.
Bizdelnick писал(а):
07.02.2015 16:33
Я бы предпочёл вообще ничего не писать, чтобы всё тупо работало.

всё и так работает.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

drBatty писал(а):
07.02.2015 17:24
имелось ввиду "писать легче хороший, годный код, в котором мало ошибок, а те, что есть, легко найти и исправить"
Да, легче. Но это же не значит, что ошибок не будет. Даже не обязательно, что ошибок будет меньше. Но их не будет намного больше, а трудозатрат при написании этих "скриптов" (или как их аналог в systemd называется) будут намного меньше.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение drBatty »

yoshakar писал(а):
07.02.2015 17:58
имелось ввиду "писать легче хороший, годный код, в котором мало ошибок, а те, что есть, легко найти и исправить"
Да, легче.

может вы нам покажете немного своего кода на сишечке? Хотя-бы сотню строчек.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yars »

yoshakar писал(а):
07.02.2015 17:58
Но их не будет намного больше, а трудозатрат при написании... ...будет намного меньше.

Ага, будете корпеть над кодом с отладчиком и компилятором в обнимку :)
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

drBatty писал(а):
07.02.2015 18:03
может вы нам покажете немного своего кода на сишечке? Хотя-бы сотню строчек.
Свежего - не покажу, нету его. Но вот нашёл из времён когда я был студентом, практически продакшен-код (в смысле писался не для себя):

Код: Выделить всё

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <ncurses.h>

#define KEY_RETURN 0012

#define COLOR_BASE COLOR_PAIR(1)
#define COLOR_SELECT COLOR_PAIR(2) | A_DIM
#define COLOR_INVISIBLE COLOR_PAIR(3)

typedef void (*Action)(void);

void changeHeight(void);
void measureTime(void);
void calculateAcceleration(void);
void quit(void);
void poweroff(void);
void reboot(void);
void resetResults(void);

#define ITEMS_COUNT 7

static Action actions[ITEMS_COUNT] = {
    resetResults,
    changeHeight,
    measureTime,
    calculateAcceleration,
    quit,
    poweroff,
    reboot
};

#define ITEM_MAX_LENGTH 24

#define ITEM_MEASUREMENT_START "Провести измерение"
#define ITEM_MEASUREMENT_BREAK "Прервать измерение"

static char items[ITEMS_COUNT][ITEM_MAX_LENGTH] = {
    "Сброс результатов",
           "Изменить высоту",
    ITEM_MEASUREMENT_START,
    "Рассчитать ускорение",
    "Выход",
    "Выключить компьютер",
    "Перезагрузить компьютер"
};

#define ITEM_MEASUREMENT_INDEX 2

static int itemIndex = 0;

void createPallete(void);
void showTable(void);
void showMenu(void);
void showAverage(void);
void processKey(int key);

static double currentHeight = 2.0;

#define MEASUREMENTS_MAX_COUNT 5

static double time[MEASUREMENTS_MAX_COUNT];
static double height[MEASUREMENTS_MAX_COUNT];
static double acceleration[MEASUREMENTS_MAX_COUNT];
static int measurementsCount = 0;
static double average = 0.0;

static char message[128] = "";
void showMessage(void);

static int measurementRun = 0;
static int filedes = 0;
static pid_t pid = 0;
enum MeasurementStatus {
    MeasurementStatus_waitTimer,
    MeasurementStatus_waitFinish,
    MeasurementStatus_waitProcess
};

static enum MeasurementStatus measurementStatus = MeasurementStatus_waitTimer;

int measurementStatusChanged(void);
void addTime(double newTime);

void updateScreen(void);

int main() {
    initscr();
    createPallete();
    noecho();
    nodelay(stdscr, TRUE);
    keypad(stdscr, TRUE);
    updateScreen();
    while(1) {
        /* Без этой задержки компьютер начинает странно
         * пищать, хотя всё работает
         */
        usleep(100);

        int key = getch();
        if(key != ERR) {
            processKey(key);
            updateScreen();
        }
        if(measurementStatusChanged())
            updateScreen();
    }
    endwin();
    return 0;
}

void updateScreen() {
    clear();
    showTable();
    showMessage();
    showAverage();
    showMenu();
}

void showMenu() {
    int n;
    for(n = 0; n < ITEMS_COUNT; ++n) {
        move(15 + n, (getmaxx(stdscr) - ITEM_MAX_LENGTH + 1) / 2);
        if(n == itemIndex) attron(COLOR_SELECT);
        printw("%s", items[n]);
        char s[10]; sprintf(s, "%%%ds",
            ITEM_MAX_LENGTH - strlen(items[n]));
        printw(s, " ");
        if(n == itemIndex) attron(COLOR_BASE);
    }
    move(0, 0); delch(); insch(' ' | COLOR_INVISIBLE);
    refresh();
}

void createPallete() {
    if(!has_colors()) {
        endwin();
        perror("Terminal not supported colors");
        exit(1);
    }
    start_color();
    init_pair(1, COLOR_GREEN, COLOR_BLACK);
    init_pair(2, COLOR_GREEN, COLOR_YELLOW);
    init_pair(3, COLOR_BLACK, COLOR_BLACK);
}

void processKey(int key) {
    switch(key) {
    case KEY_DOWN:
        itemIndex = (itemIndex + 1) % ITEMS_COUNT;
        break;
    case KEY_UP:
        itemIndex = (itemIndex - 1 + ITEMS_COUNT) % ITEMS_COUNT;
        break;
    case KEY_RETURN:
        actions[itemIndex]();
        break;
    }
}

void showTable() {
    attron(COLOR_BASE);
    static const smx = 20;
    move(0, smx); printw("+-------+----------+----------+----------+");
    move(1, smx); printw("| N п/п |   t, с   |   L, м   | g, м/с^2 |");
    move(2, smx); printw("+-------+----------+----------+----------+");
    int n;
    for(n = 0; n < measurementsCount; ++n) {
        move(3 + n * 2, smx);
        printw("|   %d   | %8.4f | %8.4f | %8.4f |",
            n + 1, time[n], height[n], acceleration[n]);
        move(4 + n * 2, smx);
        printw("+-------+----------+----------+----------+");
    }
    if(measurementsCount == MEASUREMENTS_MAX_COUNT) return;
    move(3 + n * 2, smx);
    printw("|   %d   |          | %8.4f |          |",
            n + 1, currentHeight);
    move(4 + n * 2, smx);
    printw("+-------+----------+----------+----------+");
}

void showMessage() {
    move(13, 30);
    printw("%s", message);
}

void changeHeight() {
    move(13, 30);
    /* Длинный ряд пробелов, чтобы стереть сообщение,
     * которое выводится в этом же месте.
     * Можно было сделать и красивее,
     * но работает и так, так что париться не стал.
     */
    printw("L =                                           ");

    move(13, 34);
    echo();
    nodelay(stdscr, FALSE);
    float newHeight;
    scanw("%f", &newHeight);
    currentHeight = newHeight;
    noecho();
    nodelay(stdscr, TRUE);
}

void addTime(double newTime) {
    if(measurementsCount == MEASUREMENTS_MAX_COUNT) return;
    time[measurementsCount] = newTime;
    height[measurementsCount] = currentHeight;
    acceleration[measurementsCount++] = 0.0;
}

void calculateAcceleration() {
    int n;
    for(n = 0; n < measurementsCount; ++n)
        acceleration[n] = 2 * height[n] / (time[n] * time[n]);
    average = 0.0;
    if(!n) return;
    for(n = 0; n < measurementsCount; ++n)
        average += acceleration[n];
    average /= measurementsCount;
}

/* Эта переменная не должна быть глобальной, но программа глючит,
 * если сделать её локальной. Сука.
 * Идиотизм какой-то...
 */
static char killCommand[128];

void killMeasurement(void) {
    /* Из-за того, что мы запускаем get_time через sudo
     * (а иначе нельзя будет работать с портами),
     * убивать его также приходиться через sudo
     */
    sprintf(killCommand, "/usr/bin/sudo kill %d", pid);
    system(killCommand);

    waitpid(pid, 0, WNOHANG);
    close(filedes);
}

void quit() {
    if(measurementRun) {
    }
    endwin();
    exit(0);
}

void showAverage() {
    move(23, 29);
    printw("<g> = %.4f м/с^2", average);
}

void poweroff() {
    if(measurementRun) {
        sprintf(killCommand, "/usr/bin/sudo kill %d", pid);
        system(killCommand);
        waitpid(pid, 0, WNOHANG);
        close(filedes);
    }
    endwin();
    system("/usr/bin/sudo /sbin/poweroff");
}

void reboot() {
    if(measurementRun) {
        sprintf(killCommand, "/usr/bin/sudo kill %d", pid);
        system(killCommand);
        waitpid(pid, 0, WNOHANG);
        close(filedes);
    }
    endwin();
    system("/usr/bin/sudo /sbin/reboot");
}
void resetResults() {measurementsCount = 0;}

void measureTime() {
    if(measurementRun) {
        sprintf(killCommand, "/usr/bin/sudo kill %d", pid);
        system(killCommand);
        waitpid(pid, 0, WNOHANG);
        close(filedes);
        strcpy(message, "Измерение прервано");
        measurementRun = 0;
        strcpy(items[ITEM_MEASUREMENT_INDEX], ITEM_MEASUREMENT_START);
        return;
    }
    int files[2];
    if(pipe(files) < 0) {
        strcpy(message, "Can't create pipe");
        return;
    }
    fcntl(files[0], F_SETFL & ~O_NONBLOCK);
    pid = fork();
    if(pid < 0) {
        strcpy(message, "Can't fork child process for get time");
        close(files[0]);
        close(files[1]);
        return;
    }
    if(pid) {
        close(files[1]);
        filedes = files[0];
        measurementRun = 1;
        measurementStatus = MeasurementStatus_waitTimer;
        strcpy(message, "Измерение началось");
        strcpy(items[ITEM_MEASUREMENT_INDEX], ITEM_MEASUREMENT_BREAK);
        return;
    }
    close(files[0]);
    close(1);
    if(dup2(files[1], 1) < 0) exit(1);
    close(files[1]);
    execl("/usr/bin/sudo", "/usr/bin/sudo",    "/usr/sbin/get_time", 0);
    exit(1);
}

int readString(int fd, char *string, int maxLength) {
    if(read(fd, string, 1) < 0) return 0;
    int charIndex = 0;
    while(charIndex < maxLength && string[charIndex] != '\n') {
        ++charIndex;
        while(read(fd, string + charIndex, 1) < 0)
            ;
    }
    string[charIndex] = '\0';
    return 1;
}

int measurementStatusChanged() {
    if(!measurementRun) return 0;
    switch(measurementStatus) {
    case MeasurementStatus_waitTimer: {
        char s[16];
        if(!readString(filedes, s, 16)) return 0;
        measurementStatus = MeasurementStatus_waitFinish;
        strcpy(message, "Таймер запущен");
        } return 1;
    case MeasurementStatus_waitFinish: {
        char s[16];
        if(!readString(filedes, s, 16)) return 0;
        double newTime;
        sscanf(s, "%lf", &newTime);
        measurementStatus = MeasurementStatus_waitProcess;
        strcpy(message, "Время измерено");
        addTime(newTime);
        } return 1;
    default: /* case MeasurementStatus_waitProcess: */
        waitpid(pid, 0, WNOHANG);
        close(filedes);
        measurementRun = 0;
        strcpy(message, "Измерение завершено");
        strcpy(items[ITEM_MEASUREMENT_INDEX], ITEM_MEASUREMENT_START);
        return 1;
    };
    return 0;
}

/* Надо бы сделать рефакторинг: глобальных переменных многовато
 * и ещё по-мелочи...
 * И заодно переработать интерфейс: добавить консоль,
 * куда будут выводиться сообщения и диалог смены высоты.
 * Может и ещё что-нибудь
 */
/* EOF */
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Hephaestus »

yoshakar писал(а):
07.02.2015 16:28
Hephaestus писал(а):
06.02.2015 10:53
Скажите, Вы действительно уверены, что сишный код писать легче, чем скрипты
Да.
Однако даже из примера в данной теме, можно видеть, что это не так.
Вами была поставлена элементарная задача, и даже она вызвала обсуждение, то есть решение оказалось неоднозначным.
Ну и, честно говоря, Ваше решение на Си для этой задачи написать уж никак не легче, чем решение Bizdelnick'а для bash. Может быть, не сложнее, но и не легче.
Даже просто по количеству строк - для bash файл в две строчки, Ваш код на Си - пять строчек.
Не говоря уже о том, что сишный код вообще-то надо компилировать и здесь появляются дополнительные факторы - версия компилятора и т.п.

yoshakar писал(а):
07.02.2015 16:28
Не уловил логики, как из того что писать легче следует, что "нет ошибок".
Поясняю. Основная идея Леннарта: Скрипты сложны в написании, отладке да ещё и содержат ошибки.
Леннарт берется решить эту проблему и создаёт свой продукт.
То есть, исходя из исходной проблемы, данный продукт должен быть простым в написании, простым в отладке и не содежать ошибок. Если же это не так, то созданный продукт исходную проблему не решает.
А раз не решает, повторяю вопрос: Какой смысл менять один источник ошибок на другой?

yoshakar писал(а):
07.02.2015 16:28
Здесь просто надо понять, что Леннарт не уникален, а типичен: из тех, кто вынужден эти скрипты писать, их мало кто "осилил".
Да перестаньте что ль... Куча дистров существовала много лет. Система инициализации (и не только она) была построена на скриптах. Вы хотите сказать, что все эти скрипты писали те, кто их не осилил? Это как?
Или может быть, все эти годы люди писали скрипты, подавляя рвотный рефлекс и мечтая поскорее избавиться от них?
И если уж пошло на то, что из числа скприптописателей мал процент осиляторов, то простите, из числа сишников процент осиляторов ещё меньше.

yoshakar писал(а):
07.02.2015 16:28
Логика же Леннарта проста: раз сообщество не хочет писать скрипты, давайте сделаем, чтобы можно было их не писать.
А он у сообщества спросил, прежде чем делать вывод, чего оно хочет, а чего нет?
Если он всего лишь реализует давнюю мечту сообщества, тогда к чему все эти лозунги в его статье? (Лозунги там в духе: Уважаемые дистростроители, поддержите мою поделку!).
И опять-таки, если это всего лишь воплощение давней всеобщей мечты, то его, по идее, должны бы на руках носить. А чего тогда ему киллера всем миром нанимают?

yoshakar писал(а):
07.02.2015 17:58
Да, легче. Но это же не значит, что ошибок не будет. Даже не обязательно, что ошибок будет меньше. Но их не будет намного больше, а трудозатрат при написании этих "скриптов" (или как их аналог в systemd называется) будут намного меньше.
Увы. Во-первых, про ошибки я уже сказал: при таком раскладе довольно бессмысленная затея - шило на мыло меняем.
Во-вторых, при внедрении systemd соотношение трудозатрат никак не в его пользу. Почему?
Очень просто: скрипты уже написаны. А для systemd аналоги предстоит ещё писать и писать.
Поэтому на данный момент трудозатраты для скриптов близки к нулю, а вот о systemd этого никак нельзя сказать.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение drBatty »

yoshakar писал(а):
07.02.2015 18:21

Код: Выделить всё

void processKey(int key) {
    switch(key) {
    case KEY_DOWN:
        itemIndex = (itemIndex + 1) % ITEMS_COUNT;
        break;
    case KEY_UP:
        itemIndex = (itemIndex - 1 + ITEMS_COUNT) % ITEMS_COUNT;
        break;
    case KEY_RETURN:
        actions[itemIndex]();
        break;
    }
}

даже не дыра, а ЗИЯЮЩАЯ ДЫРИЩА. Это надо было додуматься: выполнять функцию по указателю на функцию, из таблицы, индексированной глобальной переменной, которая меняется где угодно!

И да, хозяйке на заметку: вы зря переменную индекса сделали знаковой, и потом берёте остаток от деления. Вы наверное хорошо знаете арифметику, да? Остаток от деления всегда положительный, да? У меня для вас плохие новости:

Код: Выделить всё

#include <stdio.h>

int main(int argc, const char* argv[])
{
    int x =  (argc+10)/(argc-2);
    printf("%d\n", x);
    return 0;
}

вы видимо когда писали уже увидели, что ваша программа рушиться, если UP несколько раз подряд нажать, ну и методом тыка накостылили фикс. Ставлю 146 против одного, что вы так и не поняли, в чём тут проблема.
yoshakar писал(а):
07.02.2015 18:21
close(1);

ну как же без этого?!

yoshakar писал(а):
07.02.2015 18:21
execl("/usr/bin/sudo", "/usr/bin/sudo", "/usr/sbin/get_time", 0);

это вообще настолько гениально, что ЯННП.
yoshakar писал(а):
07.02.2015 18:21
Надо бы сделать рефакторинг

проще сразу в помойку.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

drBatty, вот какой смысл в вашем посте? Он имеет какое-то отношение к systemd? Если вы не поняли, я подчеркну: я не пишу systemd, и этот код - не часть systemd. Он вообще не имеет никакого отношения к systemd. Вы попросили меня выложить код - я выложил. Если б я знал, что за этим последует - не стал бы выкладывать.
Если вы пытаетесь показать, что вот вы то разбираетесь в программировании куда лучше чем я, то это вполне возможно так и есть, и я не вижу смысла в этом мериться - я не понимаю, какое это имеет отношение к теме. Тем не менее, со своей стороны могу заметить, что ваши замечания показывают, что вы, увы, слабо разбираетесь в программировании вообще, в программировании на C, и особенно в security-critial программировании. Просто такое вот впечатление складывается. Но, повторяю, это не имеет отношения к теме никакого. И, думаю, надо ещё надо сделать поправку на то, что вам очень хотелось что-нибудь покритиковать в коде, и поэтому вы могли написать то, что в здравом уме писать бы не стали.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение drBatty »

yoshakar писал(а):
08.02.2015 14:28
Вы попросили меня выложить код - я выложил.

ваш код доказывает, что для вас писать на сишке — сплошные мучения. И в итоге получается уязвимое и не поддерживаемое УГ.
yoshakar писал(а):
08.02.2015 14:28
Если вы пытаетесь показать, что вот вы то разбираетесь в программировании куда лучше чем я

нет, я хотел вам доказать, что писать на сишке ОЧЕНЬ сложно, намного сложнее, чем на каком-нить баше или на питоне. В скриптовых ЯП вам никто-бы не дал попрыгать через указатели на функции, индексированные отрицательным остатком от деления. Такое извращение возможно только в сишке. И что самое печальное, на сишке без такого быдлокода — никак. Где-то глубоко внутри системы это конечно нужно, но для инициализации системы это не только не нужно, но и вредно.


yoshakar писал(а):
08.02.2015 14:28
Тем не менее, со своей стороны могу заметить, что ваши замечания показывают, что вы, увы, слабо разбираетесь в программировании вообще, в программировании на C, и особенно в security-critial программировании. Просто такое вот впечатление складывается.

можно короче: "сам дурак". Я не обижусь.

yoshakar писал(а):
08.02.2015 14:28
вам очень хотелось что-нибудь покритиковать в коде

там ещё много можно покритиковать, лень. Этого вполне хватит. И это прямо на поверхности валяется, в глубине наверняка много ещё ошибок.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

drBatty писал(а):
08.02.2015 15:11
ваш код доказывает, что для вас писать на сишке — сплошные мучения. И в итоге получается уязвимое и не поддерживаемое УГ.
Нет, вы знаете, для меня писать на си - удовольствие, и совсем не напряжно. Хотя иногда к современным плюсам душа больше лежит, но вот со знанием тонкостей плюсов у меня есть проблемы. При этом, как можно видеть по вышеприведённому коду, даже спайковый код получается относительно красивым и легкоподдерживаемым. А вот если применить ваши советы, то действительно получится либо неподдерживаемое УГ, либо вообще ничего не получится, поскольку написание хэлловорлда затянется на годы. А об уязвимостях здесь говорить смысла вообще нет.

drBatty писал(а):
08.02.2015 15:11
нет, я хотел вам доказать, что писать на сишке ОЧЕНЬ сложно, намного сложнее, чем на каком-нить баше или на питоне. В скриптовых ЯП вам никто-бы не дал попрыгать через указатели на функции, индексированные отрицательным остатком от деления. Такое извращение возможно только в сишке. И что самое печальное, на сишке без такого быдлокода — никак.
Вот то, что для вас это - извращение, быдлокод и очень сложно, означает, что для вас писать на си сложно, а не для меня. Что, впрочем замечу, свидетельствует скорее в вашу пользу, если вы понимаете о чём я. Но нет, не убедили вы меня в отсутствии преимуществ у си перед шеллом (см. также ниже).

drBatty писал(а):
08.02.2015 15:11
там ещё много можно покритиковать, лень. Этого вполне хватит. И это прямо на поверхности валяется, в глубине наверняка много ещё ошибок.
В ваших рассуждениях есть одно очень слабое место: вы ещё моих скриптов не видели. Но я не смогу показать даже сотню строк, потому что писать на скриптах для меня - действительно мучение.

Возвращаясь к systemd - да, уязвимостей там вполне возможно понаделают некоторое количество. Но того же serzh-a это видимо не особо волнует. В конце-концов, ну вряд ли их будет много (можно и на си писать безопасный код - просто это нужно уметь, и предпогается, что они умеют), и их же всё-таки когда-нибудь найдут и поправят. Но, конечно, Хаскелл был бы лучше, и не только из-за безопасности.
Спасибо сказали:
Аватара пользователя
Aviator
Сообщения: 65
ОС: Debian GNU/Linux amd64

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Aviator »

Vascom писал(а):
03.02.2015 12:08
В старом инструменте многое не так, достаточно сравнить фичи ситемд, почитать давние интервью Леннарта. Уже надоело вспоминать то старьё.
Простой пример - видел я как-то инит-скрипт запуска сервиса для System V - ад и израиль, чёрт ногу сломит. А вот системд-юнит - всё просто, кратко, понятно.

Ага, ага. :rolleyes:
Вот, столкнулся вчера. systemd версий с 215 по 217. Свежак. Начал проявляться глюк на относительно быстром ПК: i5 4590 + H97. Состоит в том, что при параллельном запуске, процессы, зависящие от d-bus начинают запускаться раньше, чем завершится запуск самого d-bus. Т.е. стартуется d-bus, затем проходит небольшое время и запускаются остальные, зависящие от него службы. Вся гадость в том, что неправильно определяется момент, когда d-bus уже пришел в себя и готов принимать подключения. А на Core2Quad процесс запуска более растянут во времени и d-bus успевал прочихаться до того, как к нему обратятся.
Кратно, понятно, но не работает. Класс! Всю жизнь мечтал! 10 лет разрабатываю железо под Linux и никогда такого треша ещё не видел.
С уважением, Сергей.
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

Aviator, это же просто баг. Его пофиксят, и всё будет хорошо. Нельзя делать выводы из таких досадных, но абсолютно частный случаев, не носящих принципиального характера. Вот такими придирками противники systemd и производят обратное впечатление.
Спасибо сказали:
Аватара пользователя
Aviator
Сообщения: 65
ОС: Debian GNU/Linux amd64

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Aviator »

yoshakar писал(а):
08.02.2015 17:05
Aviator, это же просто баг. Его пофиксят, и всё будет хорошо. Нельзя делать выводы из таких досадных, но абсолютно частный случаев, не носящих принципиального характера. Вот такими придирками противники systemd и производят обратное впечатление.

Да, баг. Да, не бывает программ без багов. Но в этих поделках таких багов зашкаливающее количество. Аналогично и pulseaudio, и network-manager, и firewalld (тоже изучаю с недавних пор), который умудряется генерить нелогичные и неправильные правила. И это всё тянут в мэйнстрим, в рабочие системы! Вот это и возмущает. Systemd ещё пилить и пилить, не один год, а его даже в энтерпрайз уже протащили!
Утонем же ж в ошибках, товарищи!

Единственный плюс этого - какое-никакое однообразие в различных дистрибутивах. Но! Сейчас каждый мэинтейнер поналепит своих костылей для обхода этих багов и конец однообразию.
С уважением, Сергей.
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

Aviator писал(а):
08.02.2015 17:14
Но в этих поделках таких багов зашкаливающее количество. Аналогично и pulseaudio, и network-manager, и firewalld (тоже изучаю с недавних пор), который умудряется генерить нелогичные и неправильные правила. И это всё тянут в мэйнстрим, в рабочие системы! Вот это и возмущает. Systemd ещё пилить и пилить, не один год, а его даже в энтерпрайз уже протащили!
А вот под этими словами готов подписаться.

И мне кажется, что проталкивают его ещё и по техническим причинам - у них выбора нет, из-за изначально уродливой концепции. Если бы systemd был просто ещё одной (пусть прогрессивной) системой инициализации, можно было бы его спокойно держать в нормальном тестовом режиме. По мере стабилизации и при наличии реальных плюсов на него бы все спокойно перешли. Но из-за негибкости архитектуры (на что указывает неконтролируемое расползание этой поделки по всем закоулкам системы) единственный способ пропихнуть это в дистрибутивы - вот такое вот агрессивное пропихивание, причём если его не пропихнуть уже сейчас, на ранней стадии разработки, то он потом уже не взлетит - никто просто не сможет понять, как его встроить в существующую систему. А сейчас получается, что разрабочики переложили свои проблемы на всех остальных - дистрибмэйкеров и разработчиков других, нормально не связанных с системой инициализации продуктов - и если бы не это, systemd уже сдох бы или переродился во что-то гораздо менее уродливое.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Hephaestus »

yoshakar писал(а):
08.02.2015 16:51
Возвращаясь к systemd - да, уязвимостей там вполне возможно понаделают некоторое количество.
yoshakar писал(а):
08.02.2015 16:51
В конце-концов, ну вряд ли их будет много
Простите, но про классический sysvinit+скрипты можно сказать ровно то же самое: в скриптах может быть некоторое количество багов и, скорее всего, их немного.
Однако в случае sysvinit это является поводом для повсеместного и безоговорочного выпиливания, а в случае systemd - это так, пустяки, подумаешь, багов понаделали... Здорово, правда?
Спрашиваю в третий раз: Какой смысл менять один источник ошибок на другой?

yoshakar писал(а):
08.02.2015 17:05
это же просто баг. Его пофиксят, и всё будет хорошо. Нельзя делать выводы из таких досадных, но абсолютно частный случаев, не носящих принципиального характера.
Вот как раз в этой ситуации частные случаи имеют принципиальный характер.
Потому что Леннарт обосновывал свою затею по замене скриптов на systemd, опираясь именно на частные случаи. Ах, скрипты такие сложные и переполненные ошибками! Ах, давайте их дружно заменим на что-нибудь другое! Вы, вероятно, думаете, что в init-скриптах ошибки в каждой строке? Оно бы просто не работало.
Ошибки в скриптах есть, но это именно частные случаи. Леннарт предлагает избавиться от скриптов из-за содержащихся в них ошибок, но почему-то его собственные ошибки при этом в счёт не идут.
Скриптописателям, значит, ошибки совершать нельзя (такие скрипты сразу выкидывать надо, и вообще всё заменить), а Леннарту, значит, ошибки совершать можно (это ничего, ерунда, может быть, исправят когда-нибудь). Очень интересно.
Вы не находите, что здесь вроде как двойные стандарты, просматриваются?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

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

Нет, я не нахожу двойных стандартов, я нахожу спорность (но не безусловную неверность!) аргументации Леннарта.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Hephaestus »

yoshakar писал(а):
08.02.2015 17:39
Смысл менять один источник ошибок на другой в том, что новый источник ошибок лучше старого по другим критериям (не по числу ошибок).
Сомнительно. Я нигде не увидел ни внятного описания, ни пользовательского обзора (не говоря уже о каких-либо спецификациях), словом, ни одного документа, из которого можно было бы сделать вывод, что systemd действительно чем-то лучше. В статье Леннарта большей частью ругань в сторону shell-скриптов да лозунги а ля "Владимир Ильич".
Простой юнит в стиле виндового ini-файла - он может и лучше для простого пользователя, который не знает язык shell-скриптов. Но только дело в том, что такому пользователю какая-то там "система инициализации" далеко до фонаря. Он и слов-то таких не слыхал. А вот админу (который действительно что-то может там сделать) - ему скрипты гибче, удобнее и эффективнее. Потому что язык shell-скриптов у него - один из основных инструментов в системе (а не только в системе инициализации), потому что это универсальный инструмент. И вот эту схему зачем-то сломали. При том, что скрипты вообще-то никуда не делись, но теперь надо помимо скриптов ковыряться ещё и с юнитами да всякими глюками systemd-модулей.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Bizdelnick »

Hephaestus писал(а):
08.02.2015 18:56
дело в том, что такому пользователю какая-то там "система инициализации" далеко до фонаря. Он и слов-то таких не слыхал. А вот админу (который действительно что-то может там сделать) - ему скрипты гибче, удобнее и эффективнее.

Да, в общем-то, и админу до фонаря. Не припоминаю случая, чтобы мне пришлось править хоть один инит-скрипт. Писать с нуля приходилось, но в этих случаях я уже был не админом, а разработчиком.
Кстати, с позиции разработчика: можно написать инит-скрипт, пусть не соответствующий политикам дистрибутивов, но который будет работать везде - и в GNU/Linux, и в *BSD, и в Solaris... Леннарт и его сподвижники агитируют разрабов забить на инит-скрипты и писать якобы универсальные сервис-файлы. При этом поддержки не-linux систем в systemd нет и никогда не будет. Несколько странновата его логика, не?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 848
Статус: Оператор вычислительных машин
ОС: Debian

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Janik »

yoshakar писал(а):
08.02.2015 17:39
новый источник ошибок лучше старого по другим критериям

Кстати, а для чего пихать в одну программу так много возможностей, если в init просто вызываются сторонние программы для настройки всего?
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

Bizdelnick писал(а):
08.02.2015 19:08
Несколько странновата его логика, не?
Есть такое дело. Да и тот же Slackware может взять и не поддаться. Думаю, с позиции Леннарта никаких BSD и тем более всего остального не существует. Типа "пишите только под Линукс только под systemd, а кто не с нами - на того нам плевать и пусть крутятся как хотят".

Janik писал(а):
08.02.2015 19:29
Кстати, а для чего пихать в одну программу так много возможностей, если в init просто вызываются сторонние программы для настройки всего?
А просто им так захотелось. Или всё-таки "не шмогли" сделать нормально (не пихать). Ну и есть типа некоторые политические причины, но это на границе с конспирологией, и не хотелось бы в эту степь углубляться.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Bizdelnick »

Вот, споткнулся об очередной вопиющий пример отношения системдешников к тому, что не системде: Jessie: startx
Ихний logind работает нормально только в том случае, если графическая сессия запускается в том же виртуальном терминале, где пользователь залогинился изначально. Ах, startx запускает иксы в новом терминале? Фигня, перепишем startx. И пофиг, что какой-то там consolekit в итоге перестанет нормально работать, всё равно мы же его выкидываем и заменяем на logind. Мысль починить logind и сохранить совместимость с существующим софтом им даже в голову не пришла. Именно за это я и не люблю Леннарта и компанию, а вовсе не за то, что они шелл не осилили.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение Hephaestus »

Bizdelnick писал(а):
08.02.2015 19:08
Да, в общем-то, и админу до фонаря. Не припоминаю случая, чтобы мне пришлось править хоть один инит-скрипт. Писать с нуля приходилось, но в этих случаях я уже был не админом, а разработчиком.
Мне приходилось. Переделывал чужой под свои нужды.
И даже если писать с нуля (я, правда, писал не с нуля, а на основе стандартного шаблона в debian), то всё равно, я не разработчик, а админ. В общем, я не бы не сказал, что админ совсем не прикасается к init-скриптам.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [NIXP] Systemd получил новые сетевые возможности: форвардинг и маскарадинг IP, базовое управление брандмауэром

Сообщение yoshakar »

Реквестирую комикс.
Комната с двумя разработчиками systemd. Входит Леннарт. Леннарт: "Ребят, startx запускает иксы в новом терминале. Что делать?" Один из разработчиков: "Как что делать? Переписать startx." Леннарт "Но тогда сломается ConsoleKit!" Второй разработчик: "Ну и что? Кому нужен ConsoleKit, если есть logind?" Леннарт: "Но мы могли бы сохранить совместимость!" Двое разработчиков переглядываются друг с другом, смотрят на Леннарта. Леннарт смотрят на них. Несколько секунд переглядываний в тишине. Наконец они не выдерживают и все одновременно начинают дико ржать.
Спасибо сказали:
Ответить