blob.out = space;
code = pioctl_utf8(apath, VIOC_FILE_CELL_NAME, &blob, 1);
- if (code == 0)
- return !cm_stricmp_utf8N("Freelance.Local.Root",space);
+ if (code == 0) {
+ return !cm_strnicmp_utf8N("Freelance.Local.Root",space, blob.out_size);
+ }
return 1; /* assume it is because it is more restrictive that way */
}
blob.out = cellname;
code = pioctl_utf8(fname, VIOC_FILE_CELL_NAME, &blob, 1);
+ if (code == 0)
+ cellname[blob.out_size - 1] = '\0';
return code;
}
blob.out_size = sizeof(cm_fid_t);
blob.out = (char *) &fid;
- if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
+ if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1) &&
+ blob.out_size == sizeof(cm_fid_t)) {
options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
options.fid = fid;
} else {
blob.out = &filetype;
code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
+ if (code || blob.out_size != sizeof(filetype)) {
+ Die(errno, ti->data);
+ error = 1;
+ continue;
+ }
blob.out_size = CELL_MAXNAMELEN;
blob.out = cell;
code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
+ if (code == 0)
+ cell[blob.out_size-1] = '\0';
printf("%s %s (%u.%u.%u) contained in cell %s\n",
filetypestr(filetype),
ti->data, fid.volume, fid.vnode, fid.unique,
blob.out_size = 2 * sizeof(afs_uint32);
blob.out = (char *) &owner;
- if (0 == pioctl_utf8(ti->data, VIOCGETOWNER, &blob, 1)) {
+ if (0 == pioctl_utf8(ti->data, VIOCGETOWNER, &blob, 1) &&
+ blob.out_size == 2 * sizeof(afs_uint32)) {
char oname[PR_MAXNAMELEN] = "(unknown)";
char gname[PR_MAXNAMELEN] = "(unknown)";
char confDir[257];
blob.out_size = MAXSIZE;
code = pioctl_utf8(ti->data, VIOCGETVOLSTAT, &blob, 1);
if (code == 0) {
+ space[blob.out_size - 1] = '\0';
status = (VolumeStatus *)space;
name = (char *)status + sizeof(*status);
offmsg = name + strlen(name) + 1;
motd = offmsg + strlen(offmsg) + 1;
-
PrintStatus(status, name, motd, offmsg);
} else {
Die(errno, ti->data);
error = 1;
continue;
}
+ space[blob.out_size - 1] = '\0';
status = (VolumeStatus *)space;
name = (char *)status + sizeof(*status);
QuickPrintStatus(status, name);
blob.out_size = sizeof(cm_fid_t);
blob.out = (char *) &fid;
- if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
+ if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1) &&
+ blob.out_size == sizeof(cm_fid_t)) {
options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
options.fid = fid;
} else {
blob.out = &filetype;
code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
-
+ if (code || blob.out_size != sizeof(filetype)) {
+ Die(errno, ti->data);
+ error = 1;
+ continue;
+ }
blob.out_size = MAXSIZE;
blob.out = space;
memset(space, 0, sizeof(space));
error = 1;
continue;
}
- hosts = (afs_int32 *) space;
+ hosts = (afs_int32 *) space;
printf("%s %s is on host%s ",
filetypestr(filetype),
ti->data,
error = 1;
continue;
}
+ space[blob.out_size - 1] = '\0';
status = (VolumeStatus *)space;
name = (char *)status + sizeof(*status);
QuickPrintSpace(status, name);
blob.in_size = 0;
blob.out = space;
code = pioctl_utf8(ti->data, VIOCGETVOLSTAT, &blob, 1);
- if (code) {
+ if (code || blob.out_size != sizeof(*status)) {
Die(errno, ti->data);
error = 1;
continue;
code = pioctl_utf8(parent_dir, VIOC_AFS_STAT_MT_PT, &blob, 1);
if (code == 0) {
- printf("'%s' is a %smount point for volume '%s'\n",
+ printf("'%s' is a %smount point for volume '%.*s'\n",
ti->data,
(thru_symlink ? "symbolic link, leading to a " : ""),
- space);
+ blob.out_size,
+ space);
} else {
if (errno == EINVAL) {
blob.out_size = sizeof(localCellName);
blob.out = localCellName;
code = pioctl_utf8(parent, VIOC_GET_WS_CELL, &blob, 1);
- if (!code)
+ if (!code) {
+ localCellName[sizeof(localCellName) - 1] = '\0';
cellName = localCellName;
+ }
}
} else {
if (!cellName) {
blob.out_size = sizeof(parms);
blob.out = (char *) &parms;
code = pioctl_utf8(0, VIOCGETCACHEPARMS, &blob, 1);
- if (code) {
+ if (code || blob.out_size != sizeof(parms)) {
Die(errno, NULL);
return 1;
}
tp += sizeof(afs_int32);
}
printf("Cell %s on hosts", tp+maxa*sizeof(afs_int32));
- for(j=0; j < maxa; j++) {
+ for(j=0; j < maxa && j*sizeof(afs_int32) < MAXSIZE; j++) {
char *name, tbuffer[20];
memcpy(&addr, tp + j*sizeof(afs_int32), sizeof(afs_int32));
Die(errno, 0);
return 1;
}
+ space[blob.out_size - 1] = '\0';
tp = space;
aliasName = tp;
tp += strlen(aliasName) + 1;
blob.out_size = sizeof(cm_fid_t);
blob.out = (char *) &fid;
- if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
+ if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1) &&
+ blob.out_size == sizeof(cm_fid_t)) {
options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
options.fid = fid;
} else {
blob.out = &filetype;
code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
-
+ if (code || blob.out_size != sizeof(filetype)) {
+ Die(errno, ti->data);
+ error = 1;
+ continue;
+ }
blob.out_size = CELL_MAXNAMELEN;
blob.out = cell;
error = 1;
continue;
}
+ cell[CELL_MAXNAMELEN - 1] = '\0';
printf("%s %s lives in cell '%s'\n",
filetypestr(filetype),
ti->data, cell);
Die(errno, NULL);
return 1;
}
-
+ space[MAXSIZE - 1] = '\0';
printf("This workstation belongs to cell '%s'\n", space);
return 0;
}
blob.in = (char *) &hostAddr;
blob.out = (char *) &hostAddr;
code = pioctl_utf8(0, VIOC_AFS_MARINER_HOST, &blob, 1);
- if (code) {
+ if (code || blob.out_size != sizeof(afs_int32)) {
Die(errno, 0);
return 1;
}
fprintf(stderr,"No sysname name value was found\n");
return 1;
}
-
+ space[blob.out_size - 1] = '\0';
printf("Current sysname%s is", setp > 1 ? " list" : "");
for (; setp > 0; --setp ) {
printf(" \'%s\'", input);
blob.out_size = sizeof(cm_fid_t);
blob.out = (char *) &fid;
- if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
+ if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1) &&
+ blob.out_size == sizeof(cm_fid_t)) {
options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
options.fid = fid;
} else {
blob.out = &filetype;
code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
-
+ if (code || blob.out_size != sizeof(filetype)) {
+ Die(errno, ti->data);
+ error = 1;
+ continue;
+ }
blob.out_size = CELL_MAXNAMELEN;
blob.out = cell;
code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
+ if (code == 0)
+ cell[CELL_MAXNAMELEN - 1] = '\0';
printf("%s %s (%u.%u.%u) contained in cell %s\n",
filetypestr(filetype),
ti->data, fid.volume, fid.vnode, fid.unique,
blob.out = (char *) &outValue;
code = pioctl_utf8(NULL, VIOC_UUIDCTL, &blob, 1);
- if (code) {
+ if (code || blob.out_size != sizeof(outValue)) {
Die(errno, NULL);
return code;
}
blob.out = (char *) &outValue;
code = pioctl_utf8(NULL, VIOC_TRACECTL, &blob, 1);
- if (code) {
+ if (code || blob.out_size != sizeof(long)) {
Die(errno, NULL);
return code;
}
code = pioctl_utf8(0, VIOC_GETRXKCRYPT, &blob, 1);
- if (code)
+ if (code || blob.out_size != sizeof(flag))
Die(code, NULL);
else {
tp = space;
blob.out = (char *) &outValue;
code = pioctl_utf8(NULL, VIOC_TRACEMEMDUMP, &blob, 1);
- if (code) {
+ if (code || blob.out_size != sizeof(long)) {
Die(errno, NULL);
return code;
}
blob.out_size = sizeof(cm_fid_t);
blob.out = (char *) &fid;
- if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
+ if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1) &&
+ blob.out_size == sizeof(cm_fid_t)) {
inData.options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
inData.options.fid = fid;
} else {
blob.out = cell;
code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
+ if (code) {
+ Die(errno, ti->data);
+ error = 1;
+ continue;
+ }
+ cell[CELL_MAXNAMELEN - 1] = '\0';
/*
* We now know the cell for the target and we need to
* convert the ownerStr to the Id for this user
blob.out_size = sizeof(cm_fid_t);
blob.out = (char *) &fid;
- if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
+ if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1) &&
+ blob.out_size == sizeof(cm_fid_t)) {
inData.options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
inData.options.fid = fid;
} else {
blob.out = cell;
code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
+ if (code) {
+ Die(errno, ti->data);
+ error = 1;
+ continue;
+ }
+ cell[CELL_MAXNAMELEN - 1] = '\0';
/*
* We now know the cell for the target and we need to
* convert the groupStr to the Id for this user