]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/script.c
Avoid copying buffer after dn_expand() fails
[odhcp6c.git] / src / script.c
index 3d313cf4964e6ab2479a51c0ba062174258a7de7..49f39c4ae2f28b57ed4dc9d86139bea1253adcec 100644 (file)
@@ -118,9 +118,10 @@ static void fqdn_to_env(const char *name, const uint8_t *fqdn, size_t len)
        char *buf = realloc(NULL, len + buf_len + 2);
        memcpy(buf, name, buf_len);
        buf[buf_len++] = '=';
-       int l = 1;
-       while (l > 0 && fqdn < fqdn_end) {
-               l = dn_expand(fqdn, fqdn_end, fqdn, &buf[buf_len], buf_size - buf_len);
+       while (fqdn < fqdn_end) {
+               int l = dn_expand(fqdn, fqdn_end, fqdn, &buf[buf_len], buf_size - buf_len);
+               if (l <= 0)
+                       break;
                fqdn += l;
                buf_len += strlen(&buf[buf_len]);
                buf[buf_len++] = ' ';
@@ -353,13 +354,15 @@ static void s46_to_env(enum odhcp6c_state state, const uint8_t *data, size_t len
 void script_call(const char *status, int delay, bool resume)
 {
        time_t now = odhcp6c_get_milli_time() / 1000;
+       bool running_script = false;
 
        if (running) {
                kill(running, SIGTERM);
                delay -= now - started;
+               running_script = true;
        }
 
-       if (resume || !action[0])
+       if (resume || !running_script || !action[0])
                strncpy(action, status, sizeof(action) - 1);
 
        pid_t pid = fork();