Imported Upstream version 2.6.1p2
[debian/amanda] / amandad-src / amandad.c
index 7591705898b1e11c2c1ea33a334c9f5a8745d2d3..8d9b3d6b680133603cc551655523d55d9fde2b91 100644 (file)
@@ -445,12 +445,19 @@ main(
 
     if (getuid() == 0) {
        if (strcasecmp(auth, "krb5") != 0) {
-           error(_("Amanda must be run as user '%s' when using '%s' authentication"),
-                 CLIENT_LOGIN, auth);
+           struct passwd *pwd;
+           /* lookup our local user name */
+           if ((pwd = getpwnam(CLIENT_LOGIN)) == NULL) {
+               error(_("getpwnam(%s) failed."), CLIENT_LOGIN);
+           }
+           if (pwd->pw_uid != 0) {
+               error(_("'amandad' must be run as user '%s' when using '%s' authentication"),
+                     CLIENT_LOGIN, auth);
+           }
        }
     } else {
        if (strcasecmp(auth, "krb5") == 0) {
-           error(_("Amanda must be run as user 'root' when using 'krb5' authentication"));
+           error(_("'amandad' must be run as user 'root' when using 'krb5' authentication"));
        }
     }
 
@@ -1670,6 +1677,21 @@ service_new(
                data_write[i + 1][0] = newfd;
            }
        }
+       while(data_write[4][0] >= DATA_FD_OFFSET &&
+             data_write[4][0] <= DATA_FD_OFFSET + DATA_FD_COUNT*2 - 1) {
+           newfd = dup(data_write[4][0]);
+           if (newfd == -1)
+               error(_("Can't dup out off DATA_FD range"));
+           data_write[4][0] = newfd;
+       }
+       while(data_write[4][1] >= DATA_FD_OFFSET &&
+             data_write[4][1] <= DATA_FD_OFFSET + DATA_FD_COUNT*2 - 1) {
+           newfd = dup(data_write[4][1]);
+           if (newfd == -1)
+               error(_("Can't dup out off DATA_FD range"));
+           data_write[4][1] = newfd;
+       }
+
        for (i = 0; i < DATA_FD_COUNT*2; i++)
            close(DATA_FD_OFFSET + i);