X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Fsecure-mount.c;h=34af02f4fad1581ce64e900ef9fdfeb07417e2fb;hb=54dca8e1902c0329b2a070098ea93b001a22cc5b;hp=2af654c7b1208bfcf39e4f9c76515e488bf54700;hpb=73f7ca6c48e7aec5e0cb25990b2f0aa916bb5905;p=util-vserver.git diff --git a/util-vserver/src/secure-mount.c b/util-vserver/src/secure-mount.c index 2af654c..34af02f 100644 --- a/util-vserver/src/secure-mount.c +++ b/util-vserver/src/secure-mount.c @@ -231,7 +231,7 @@ fchroot(int fd) static int writeX(int fd, void const *buf, size_t len) { - if (write(fd, buf, len)!=len) return -1; + if ((size_t)(write(fd, buf, len))!=len) return -1; return 0; } @@ -305,7 +305,8 @@ callExternalMount(struct MountInfo const *mnt) if (mnt->flags & MS_BIND) argv[idx++] = "--bind"; else if (mnt->flags & MS_MOVE) argv[idx++] = "--move"; - if (mnt->data) { + if (mnt->data && + strcmp(mnt->data, "defaults")!=0) { argv[idx++] = "-o"; argv[idx++] = mnt->data; } @@ -441,10 +442,10 @@ transformOptionList(struct MountInfo *info) while (isspace(*PTR)) ++PTR static enum {prDOIT, prFAIL, prIGNORE} -parseFstabLine(struct MountInfo *info, char *buf, struct Options const *opt) +parseFstabLine(struct MountInfo *info, char *buf) { while (isspace(*buf)) ++buf; - if (*buf=='#') return prIGNORE; + if (*buf=='#' || *buf=='\0') return prIGNORE; info->src = buf; MOVE_TO_NEXT_FIELD(buf, false); @@ -490,23 +491,25 @@ mountFstab(struct Options const *opt) } { - char buf[len+1]; + char buf[len+2]; char *ptr, *ptrptr; if (read(fd, buf, len+1)!=len) { perror("read()"); goto err1; } - buf[len] = '\0'; + buf[len] = '#'; // workaround for broken dietlibc strtok_r() + // implementation + buf[len+1] = '\0'; ptr = strtok_r(buf, "\n", &ptrptr); while (ptr) { struct MountInfo mnt; char * new_ptr = strtok_r(0, "\n", &ptrptr); - switch (parseFstabLine(&mnt, ptr, opt)) { + switch (parseFstabLine(&mnt, ptr)) { case prFAIL : - WRITE_MSG(2, "Failed to parse/mount fstab-line beginning with '"); + WRITE_MSG(2, "Failed to parse fstab-line beginning with '"); WRITE_STR(2, ptr); WRITE_MSG(2, "'\n"); goto err1; @@ -566,7 +569,7 @@ int main(int argc, char *argv[]) if (c==-1) break; switch (c) { - case 'h' : showHelp(2, argv[0], 0); + case 'h' : showHelp(1, argv[0], 0); case 'v' : showVersion(); case 't' : mnt.type = optarg; break; case 'n' : opt.ignore_mtab = true; break;